Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
ift
NIFTy
Commits
d609fa59
Commit
d609fa59
authored
Apr 09, 2015
by
ultimanet
Browse files
Implemented paradict
parent
77bfafd4
Changes
3
Hide whitespace changes
Inline
Side-by-side
Makefile
0 → 100644
View file @
d609fa59
# This Makefile implements common tasks needed by developers
# A list of implemented rules can be obtained by the command "make help"
.DEFAULT_GOAL
=
build
.PHONY .SILENT
:
help
help
:
echo
echo
" Implemented targets:"
echo
echo
" build build pypmc for python2 and python3"
echo
" buildX build pypmc for pythonX only where X is one of {2,3}"
echo
" build-sdist build pypmc from the dist directory (python 2 and 3)"
echo
" build-sdistX build pypmc from the dist directory (pythonX, X in {2,3})"
echo
" check use nosetests to test pypmc with python 2.7 and 3"
echo
" checkX use nosetests to test pypmc with python 2.7 or 3,"
echo
" where X is one of {2,3}"
echo
" check-fast use nosetests to run only quick tests of pypmc"
echo
" using nosetests-2.7 and nosetests3"
echo
" check-sdist use nosetests-2.7 and nosetests3 to test the distribution"
echo
" generated by 'make sdist'"
echo
" check-sdistX use nosetests-2.7 or nosetests3 to test the distribution"
echo
" generated by 'make sdist', where X is one of {2,3}"
echo
" clean delete compiled and temporary files"
echo
" coverage produce and show a code coverage report"
echo
" Note: Cython modules cannot be analyzed"
echo
" distcheck runs 'check', check-sdist', 'run-examples' and"
echo
" opens a browser with the built documentation"
echo
" doc build the html documentation using sphinx"
echo
" doc-pdf build the pdf documentation using sphinx"
echo
" help show this message"
echo
" run-examples run all examples using python 2 and 3"
echo
" sdist make a source distribution"
echo
" show-todos show todo marks in the source code"
echo
.PHONY
:
clean
clean
:
#remove build doc
rm
-rf
./doc/_build
#remove .pyc files created by python 2.7
rm
-f
./*.pyc
find
-P
.
-name
'*.pyc'
-delete
#remove .pyc files crated by python 3
rm
-rf
./__pycache__
find
-P
.
-name
__pycache__
-delete
#remove build folder in root directory
rm
-rf
./build
#remove cythonized C source and object files
find
-P
.
-name
'*.c'
-delete
#remove variational binaries only if command line argument specified
find
-P
.
-name
'*.so'
-delete
#remove backup files
find
-P
.
-name
'*~'
-delete
#remove files created by coverage
rm
-f
.coverage
rm
-rf
coverage
# remove egg info
rm
-rf
pypmc.egg-info
# remove downloaded seutptools
rm
-f
setuptools-3.3.zip
# remove dist/
rm
-rf
dist
.PHONY
:
build
build
:
build2
.PHONY
:
build2
build2
:
python2 setup.py build_ext
--inplace
.PHONY
:
check
:
check2
.PHONY
:
check2
check2
:
build2
@
# run tests
nosetests-2.7
--processes
=
-1
--process-timeout
=
60
# run tests in parallel
mpirun
-n
2
nosetests-2.7
.PHONY
:
check-fast
check-fast
:
build
nosetests-2.7
-a
'!slow'
--processes
=
-1
--process-timeout
=
60
nosetests3
-a
'!slow'
--processes
=
-1
--process-timeout
=
60
.PHONY
:
.build-system-default
.build-system-default
:
python setup.py build_ext
--inplace
.PHONY
:
doc
doc
:
.build-system-default
cd
doc
&&
make html
.PHONY
:
doc-pdf
doc-pdf
:
.build-system-default
cd
doc
;
make latexpdf
.PHONY
:
run-examples
run-examples
:
build
cd
examples
;
\
for
file
in
$
$(ls)
;
do
\
echo
running
$
${file}
with python2
&&
\
python2
$
${file}
&&
\
echo
running
$
${file}
with python3
&&
\
python3
$
${file}
&&
\
\
# execute with mpirun if mpi4py appears in the file
\
if
grep
-Fq
'mpi4py'
$
${file}
;
then
\
echo
"
$
${file}
"
is mpi parallelized
&&
\
echo
running
$
${file}
in
parallel with python2
&&
\
mpirun
-n
2 python2
$
${file}
&&
\
echo
running
$
${file}
in
parallel with python3
&&
\
mpirun
-n
2 python3
$
${file}
;
\
fi
\
;
\
done
.PHONY
:
sdist
sdist
:
python setup.py sdist
.PHONY
:
build-sdist
build-sdist
:
build-sdist2 build-sdist3
./dist/pypmc*/NUL
:
sdist
cd
dist
&&
tar
xaf
*
.tar.gz
&&
cd
*
.PHONY
:
build-sdist2
build-sdist2
:
./dist/pypmc*/NUL
cd
dist/pypmc
*
&&
python2 setup.py build
.PHONY
:
build-sdist3
build-sdist3
:
./dist/pypmc*/NUL
cd
dist/pypmc
*
&&
python3 setup.py build
.PHONY
:
check-sdist
check-sdist
:
check-sdist2 check-sdist3
.PHONY
:
check-sdist2
check-sdist2
:
build-sdist2
cd
dist/
*
/build/lib
*
2.7
&&
\
nosetests-2.7
--processes
=
-1
--process-timeout
=
60
&&
\
mpirun
-n
2 nosetests-2.7
.PHONY
:
check-sdist3
check-sdist3
:
build-sdist3
cd
dist/
*
/build/lib
*
3.
*
&&
\
nosetests3
--processes
=
-1
--process-timeout
=
60
&&
\
mpirun
-n
2 nosetests3
.PHONY
:
distcheck
distcheck
:
check check-sdist doc
@
# execute "run-examples" after all other recipes makes are done
make run-examples
xdg-open link_to_documentation
.PHONY
:
show-todos
grep_cmd
=
ack-grep
-i
--no-html
--no-cc
[
^
"au""sphinx.ext."
]
todo
show-todos
:
@
# suppress errors here
@
# note that no todo found is considered as error
$(grep_cmd)
doc
;
\
$(grep_cmd)
pypmc
;
\
$(grep_cmd)
examples
;
echo
\
.PHONY
:
coverage
coverage
:
.build-system-default
rm
-rf
coverage
nosetests
--with-coverage
--cover-package
=
nifty
--cover-html
--cover-html-dir
=
coverage
xdg-open coverage/index.html
mpi_dummy.py
0 → 100644
View file @
d609fa59
# -*- coding: utf-8 -*-
import
numpy
as
np
def
MIN
():
return
np
.
min
def
MAX
():
return
np
.
max
def
SUM
():
return
np
.
sum
class
_COMM_WORLD
():
def
__init__
(
self
):
self
.
rank
=
0
self
.
size
=
1
def
Get_rank
(
self
):
return
self
.
rank
def
Get_size
(
self
):
return
self
.
size
def
_scattergather_helper
(
self
,
sendbuf
,
recvbuf
=
None
):
if
recvbuf
!=
None
:
recvbuf
[:]
=
sendbuf
return
recvbuf
else
:
recvbuf
=
np
.
copy
(
sendbuf
)
return
recvbuf
def
bcast
(
self
,
sendbuf
,
*
args
,
**
kwargs
):
return
sendbuf
def
Bcast
(
self
,
sendbuf
,
*
args
,
**
kwargs
):
return
sendbuf
def
scatter
(
self
,
*
args
,
**
kwargs
):
return
self
.
_scattergather_helper
(
*
args
,
**
kwargs
)
def
Scatter
(
self
,
*
args
,
**
kwargs
):
return
self
.
_scattergather_helper
(
*
args
,
**
kwargs
)
def
Scatterv
(
self
,
*
args
,
**
kwargs
):
return
self
.
_scattergather_helper
(
*
args
,
**
kwargs
)
def
gather
(
self
,
*
args
,
**
kwargs
):
return
self
.
_scattergather_helper
(
*
args
,
**
kwargs
)
def
Gather
(
self
,
*
args
,
**
kwargs
):
return
self
.
_scattergather_helper
(
*
args
,
**
kwargs
)
def
Gatherv
(
self
,
*
args
,
**
kwargs
):
return
self
.
_scattergather_helper
(
*
args
,
**
kwargs
)
def
allgather
(
self
,
*
args
,
**
kwargs
):
return
self
.
_scattergather_helper
(
*
args
,
**
kwargs
)
def
Allgather
(
self
,
*
args
,
**
kwargs
):
return
self
.
_scattergather_helper
(
*
args
,
**
kwargs
)
def
Allgatherv
(
self
,
*
args
,
**
kwargs
):
return
self
.
_scattergather_helper
(
*
args
,
**
kwargs
)
def
Allreduce
(
self
,
sendbuf
,
recvbuf
,
op
,
**
kwargs
):
recvbuf
[
None
]
=
op
(
sendbuf
)
return
recvbuf
def
allreduce
(
self
,
sendbuf
,
recvbuf
,
op
,
**
kwargs
):
recvbuf
[
None
]
=
op
(
sendbuf
)
return
recvbuf
def
_unwrapper
(
self
,
x
):
if
isinstance
(
x
,
list
):
return
x
[
0
]
else
:
return
x
class
_datatype
():
def
__init__
(
self
,
name
):
self
.
name
=
str
(
name
)
SHORT
=
_datatype
(
'MPI_SHORT'
)
UNSIGNED_SHORT
=
_datatype
(
"MPI_UNSIGNED_SHORT"
)
UNSIGNED_INT
=
_datatype
(
"MPI_UNSIGNED_INT"
)
INT
=
_datatype
(
"MPI_INT"
)
LONG
=
_datatype
(
"MPI_LONG"
)
UNSIGNED_LONG
=
_datatype
(
"MPI_UNSIGNED_LONG"
)
LONG_LONG
=
_datatype
(
"MPI_LONG_LONG"
)
UNSIGNED_LONG_LONG
=
_datatype
(
"MPI_UNSIGNED_LONG_LONG"
)
FLOAT
=
_datatype
(
"MPI_FLOAT"
)
DOUBLE
=
_datatype
(
"MPI_DOUBLE"
)
LONG_DOUBLE
=
_datatype
(
"MPI_LONG_DOUBLE"
)
COMPLEX
=
_datatype
(
"MPI_COMPLEX"
)
DOUBLE_COMPLEX
=
_datatype
(
"MPI_DOUBLE_COMPLEX"
)
COMM_WORLD
=
_COMM_WORLD
()
\ No newline at end of file
nifty_paradict.py
0 → 100644
View file @
d609fa59
# -*- coding: utf-8 -*-
"""
Created on Thu Apr 2 21:29:30 2015
@author: steininger
"""
import
numpy
as
np
from
nifty
import
*
#from nifty import about
def
paradict_getter
(
space_instance
):
paradict_dictionary
=
{
str
(
space
().
__class__
)
:
_space_paradict
,
str
(
point_space
((
2
)).
__class__
)
:
_point_space_paradict
,
str
(
rg_space
((
2
)).
__class__
)
:
_rg_space_paradict
,
str
(
nested_space
([
point_space
(
2
),
point_space
(
2
)]).
__class__
)
:
_nested_space_paradict
,
str
(
lm_space
(
1
).
__class__
)
:
_lm_space_paradict
,
str
(
gl_space
(
2
).
__class__
)
:
_gl_space_paradict
,
str
(
hp_space
(
1
).
__class__
)
:
_hp_space_paradict
,
}
return
paradict_dictionary
[
str
(
space_instance
.
__class__
)]()
class
_space_paradict
(
object
):
def
__init__
(
self
,
**
kwargs
):
self
.
parameters
=
{}
for
key
in
kwargs
:
self
[
key
]
=
kwargs
[
key
]
def
__setitem__
(
self
,
key
,
arg
):
self
.
parameters
.
__setitem__
(
key
,
arg
)
def
__getitem__
(
self
,
key
):
return
self
.
parameters
.
__getitem__
(
key
)
class
_point_space_paradict
(
_space_paradict
):
def
__setitem__
(
self
,
key
,
arg
):
if
key
is
not
'num'
:
raise
ValueError
(
about
.
_errors
.
cstring
(
"ERROR: Unsupported point_space parameter"
))
temp
=
np
.
array
(
arg
,
dtype
=
int
).
flatten
()[
0
]
self
.
parameters
.
__setitem__
(
key
,
temp
)
class
_rg_space_paradict
(
_space_paradict
):
def
__init__
(
self
,
num
,
hermitian
=
False
,
zerocenter
=
False
):
self
.
ndim
=
len
(
np
.
array
(
num
).
flatten
())
_space_paradict
.
__init__
(
self
,
num
=
num
,
hermitian
=
hermitian
,
zerocenter
=
zerocenter
)
def
__setitem__
(
self
,
key
,
arg
):
if
key
not
in
[
'num'
,
'hermitian'
,
'zerocenter'
]:
raise
ValueError
(
about
.
_errors
.
cstring
(
"ERROR: Unsupported rg_space parameter"
))
if
key
==
'num'
:
temp
=
list
(
np
.
array
(
arg
,
dtype
=
int
).
flatten
())
if
len
(
temp
)
!=
self
.
ndim
:
raise
ValueError
(
about
.
_errors
.
cstring
(
"ERROR: Number of dimensions does not match the init value."
))
elif
key
==
'hermitian'
:
temp
=
int
(
arg
)
elif
key
==
'zerocenter'
:
temp
=
np
.
empty
(
self
.
ndim
,
dtype
=
bool
)
temp
[:]
=
arg
temp
=
list
(
temp
)
#if len(temp) != self.ndim:
# raise ValueError(about._errors.cstring("ERROR: Number of dimensions does not match the init value."))
self
.
parameters
.
__setitem__
(
key
,
temp
)
class
_nested_space_paradict
(
_space_paradict
):
def
__init__
(
self
,
ndim
):
self
.
ndim
=
np
.
int
(
ndim
)
_space_paradict
.
__init__
(
self
)
def
__setitem__
(
self
,
key
,
arg
):
if
not
isinstance
(
key
,
int
):
raise
ValueError
(
about
.
_errors
.
cstring
(
"ERROR: Unsupported point_space parameter"
))
if
key
>=
self
.
ndim
or
key
<
0
:
raise
ValueError
(
about
.
_errors
.
cstring
(
"ERROR: Nestindex out of bounds"
))
temp
=
list
(
np
.
array
(
arg
,
dtype
=
int
).
flatten
())
self
.
parameters
.
__setitem__
(
key
,
temp
)
class
_lm_space_paradict
(
_space_paradict
):
def
__init__
(
self
,
lmax
,
mmax
=
None
):
_space_paradict
.
__init__
(
self
,
lmax
=
lmax
)
if
mmax
==
None
:
mmax
=
-
1
self
[
'mmax'
]
=
mmax
def
__setitem__
(
self
,
key
,
arg
):
if
key
not
in
[
'lmax'
,
'mmax'
]:
raise
ValueError
(
about
.
_errors
.
cstring
(
"ERROR: Unsupported rg_space parameter"
))
if
key
==
'lmax'
:
temp
=
int
(
arg
)
if
(
temp
<
1
):
raise
ValueError
(
about
.
_errors
.
cstring
(
"ERROR: lmax: nonpositive number."
))
if
(
temp
%
2
==
0
)
and
(
temp
>
2
):
## exception lmax == 2 (nside == 1)
about
.
warnings
.
cprint
(
"WARNING: unrecommended parameter (lmax <> 2*n+1)."
)
try
:
if
temp
<
self
[
'mmax'
]:
about
.
warnings
.
cprint
(
"WARNING: mmax parameter set to lmax."
)
self
[
'mmax'
]
=
temp
if
(
temp
!=
self
[
'mmax'
]):
about
.
warnings
.
cprint
(
"WARNING: unrecommended parameter set (mmax <> lmax)."
)
except
:
pass
elif
key
==
'mmax'
:
temp
=
int
(
arg
)
if
(
temp
<
1
)
or
(
temp
>
self
[
'lmax'
]):
about
.
warnings
.
cprint
(
"WARNING: mmax parameter set to default."
)
temp
=
self
[
'lmax'
]
if
(
temp
!=
self
[
'lmax'
]):
about
.
warnings
.
cprint
(
"WARNING: unrecommended parameter set (mmax <> lmax)."
)
self
.
parameters
.
__setitem__
(
key
,
temp
)
class
_gl_space_paradict
(
_space_paradict
):
def
__init__
(
self
,
nlat
,
nlon
=
None
):
_space_paradict
.
__init__
(
self
,
nlat
=
nlat
)
if
nlon
==
None
:
nlon
=
-
1
self
[
'nlon'
]
=
nlon
def
__setitem__
(
self
,
key
,
arg
):
if
key
not
in
[
'nlat'
,
'nlon'
]:
raise
ValueError
(
about
.
_errors
.
cstring
(
"ERROR: Unsupported rg_space parameter"
))
if
key
==
'nlat'
:
temp
=
int
(
arg
)
if
(
temp
<
1
):
raise
ValueError
(
about
.
_errors
.
cstring
(
"ERROR: nlat: nonpositive number."
))
if
(
temp
%
2
!=
0
):
raise
ValueError
(
about
.
_errors
.
cstring
(
"ERROR: invalid parameter (nlat <> 2n)."
))
try
:
if
temp
<
self
[
'mmax'
]:
about
.
warnings
.
cprint
(
"WARNING: mmax parameter set to lmax."
)
self
[
'mmax'
]
=
temp
if
(
temp
!=
self
[
'mmax'
]):
about
.
warnings
.
cprint
(
"WARNING: unrecommended parameter set (mmax <> lmax)."
)
except
:
pass
elif
key
==
'nlon'
:
temp
=
int
(
arg
)
if
(
temp
<
1
):
about
.
warnings
.
cprint
(
"WARNING: nlon parameter set to default."
)
temp
=
2
*
self
[
'nlat'
]
-
1
if
(
temp
!=
2
*
self
[
'nlat'
]
-
1
):
about
.
warnings
.
cprint
(
"WARNING: unrecommended parameter set (nlon <> 2*nlat-1)."
)
self
.
parameters
.
__setitem__
(
key
,
temp
)
class
_hp_space_paradict
(
_space_paradict
):
def
__init__
(
self
,
nside
):
_space_paradict
.
__init__
(
self
,
nside
=
nside
)
def
__setitem__
(
self
,
key
,
arg
):
if
key
not
in
[
'nside'
]:
raise
ValueError
(
about
.
_errors
.
cstring
(
"ERROR: Unsupported hp_space parameter"
))
temp
=
int
(
arg
)
#if(not hp.isnsideok(nside)):
if
((
temp
&
(
temp
-
1
))
!=
0
)
or
(
temp
<
2
):
raise
ValueError
(
about
.
_errors
.
cstring
(
"ERROR: invalid parameter ( nside <> 2**n )."
))
self
.
parameters
.
__setitem__
(
key
,
temp
)
##################
class
_space
(
object
):
def
__init__
(
self
):
self
.
paradict
=
_space_paradict
(
default
=
123
)
#self.para = [1,2,3]
@
property
def
para
(
self
):
return
self
.
paradict
[
'default'
]
#return self.distributed_val
@
para
.
setter
def
para
(
self
,
x
):
self
.
paradict
[
'default'
]
=
x
##################
##################
class
_point_space
(
object
):
def
__init__
(
self
):
self
.
paradict
=
_point_space_paradict
()
self
.
para
=
[
10
]
@
property
def
para
(
self
):
temp
=
np
.
array
([
self
.
paradict
[
'num'
]],
dtype
=
int
)
return
temp
#return self.distributed_val
@
para
.
setter
def
para
(
self
,
x
):
self
.
paradict
[
'num'
]
=
x
##################
##################
class
_rg_space
(
object
):
def
__init__
(
self
):
self
.
paradict
=
_rg_space_paradict
(
num
=
[
10
,
100
,
200
])
@
property
def
para
(
self
):
temp
=
np
.
array
(
self
.
paradict
[
'num'
]
+
\
[
self
.
paradict
[
'hermitian'
]]
+
\
self
.
paradict
[
'zerocenter'
],
dtype
=
int
)
return
temp
@
para
.
setter
def
para
(
self
,
x
):
self
.
paradict
[
'num'
]
=
x
[:(
np
.
size
(
x
)
-
1
)
//
2
]
self
.
paradict
[
'zerocenter'
]
=
x
[(
np
.
size
(
x
)
+
1
)
//
2
:]
self
.
paradict
[
'hermitian'
]
=
x
[(
np
.
size
(
x
)
-
1
)
//
2
]
##################
##################
class
_nested_space
(
object
):
def
__init__
(
self
):
self
.
paradict
=
_nested_space_paradict
(
ndim
=
10
)
for
i
in
range
(
10
):
self
.
paradict
[
i
]
=
[
1
+
i
,
2
+
i
,
3
+
i
]
@
property
def
para
(
self
):
temp
=
[]
for
i
in
range
(
self
.
paradict
.
ndim
):
temp
=
np
.
append
(
temp
,
self
.
paradict
[
i
])
return
temp
@
para
.
setter
def
para
(
self
,
x
):
dict_iter
=
0
x_iter
=
0
while
dict_iter
<
self
.
paradict
.
ndim
:
temp
=
x
[
x_iter
:
x_iter
+
len
(
self
.
paradict
[
dict_iter
])]
self
.
paradict
[
dict_iter
]
=
temp
x_iter
=
x_iter
+
len
(
self
.
paradict
[
dict_iter
])
dict_iter
+=
1
##################
##################
class
_lm_space
(
object
):
def
__init__
(
self
):
self
.
paradict
=
_lm_space_paradict
(
lmax
=
10
)
@
property
def
para
(
self
):
temp
=
np
.
array
([
self
.
paradict
[
'lmax'
],
self
.
paradict
[
'mmax'
]],
dtype
=
int
)
return
temp
@
para
.
setter
def
para
(
self
,
x
):
self
.
paradict
[
'lmax'
]
=
x
[
0
]
self
.
paradict
[
'mmax'
]
=
x
[
1
]
##################
##################
class
_gl_space
(
object
):
def
__init__
(
self
):
self
.
paradict
=
_gl_space_paradict
(
nlat
=
10
)
@
property
def
para
(
self
):
temp
=
np
.
array
([
self
.
paradict
[
'nlat'
],
self
.
paradict
[
'nlon'
]],
dtype
=
int
)
return
temp
@
para
.
setter
def
para
(
self
,
x
):
self
.
paradict
[
'nlat'
]
=
x
[
0
]
self
.
paradict
[
'nlon'
]
=
x
[
1
]
##################
##################
class
_hp_space
(
object
):
def
__init__
(
self
):
self
.
paradict
=
_hp_space_paradict
(
nside
=
16
)
@
property
def
para
(
self
):
temp
=
np
.
array
([
self
.
paradict
[
'nside'
]],
dtype
=
int
)
return
temp
@
para
.
setter
def
para
(
self
,
x
):
self
.
paradict
[
'nside'
]
=
x
[
0
]
##################
##################
if
__name__
==
'__main__'
:
myspace
=
_space
()
print
myspace
.
para
print
myspace
.
paradict
.
parameters
.
items
()
myspace
.
para
=
[
4
,
5
,
6
]
print
myspace
.
para
print
myspace
.
paradict
.
parameters
.
items
()
myspace
.
paradict
.
parameters
[
'default'
]
=
[
1
,
4
,
7
]
print
myspace
.
para
print
myspace
.
paradict
.
parameters
.
items
()
\ No newline at end of file
Write
Preview