Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
N
NIFTy
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
13
Issues
13
List
Boards
Labels
Service Desk
Milestones
Merge Requests
13
Merge Requests
13
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Incidents
Environments
Packages & Registries
Packages & Registries
Container Registry
Analytics
Analytics
CI / CD
Repository
Value Stream
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
ift
NIFTy
Commits
a272d7c5
Commit
a272d7c5
authored
Dec 05, 2019
by
Martin Reinecke
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
more renamings
parent
914f053a
Pipeline
#64989
passed with stages
in 8 minutes and 50 seconds
Changes
26
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
Showing
26 changed files
with
68 additions
and
60 deletions
+68
-60
demos/Wiener_Filter.ipynb
demos/Wiener_Filter.ipynb
+7
-7
demos/bernoulli_demo.py
demos/bernoulli_demo.py
+1
-1
demos/find_amplitude_parameters.py
demos/find_amplitude_parameters.py
+1
-1
demos/getting_started_1.py
demos/getting_started_1.py
+1
-1
demos/getting_started_2.py
demos/getting_started_2.py
+2
-2
demos/polynomial_fit.py
demos/polynomial_fit.py
+1
-1
nifty6/domains/lm_space.py
nifty6/domains/lm_space.py
+3
-3
nifty6/domains/power_space.py
nifty6/domains/power_space.py
+1
-1
nifty6/domains/rg_space.py
nifty6/domains/rg_space.py
+2
-2
nifty6/field.py
nifty6/field.py
+11
-7
nifty6/library/correlated_fields.py
nifty6/library/correlated_fields.py
+2
-2
nifty6/library/los_response.py
nifty6/library/los_response.py
+6
-7
nifty6/linearization.py
nifty6/linearization.py
+2
-2
nifty6/minimization/metric_gaussian_kl_mpi.py
nifty6/minimization/metric_gaussian_kl_mpi.py
+1
-1
nifty6/minimization/scipy_minimizer.py
nifty6/minimization/scipy_minimizer.py
+1
-1
nifty6/multi_field.py
nifty6/multi_field.py
+7
-2
nifty6/operator_spectrum.py
nifty6/operator_spectrum.py
+1
-1
nifty6/operators/distributors.py
nifty6/operators/distributors.py
+2
-2
nifty6/plot.py
nifty6/plot.py
+1
-1
nifty6/probing.py
nifty6/probing.py
+1
-1
nifty6/sugar.py
nifty6/sugar.py
+2
-2
test/test_minimizers.py
test/test_minimizers.py
+6
-6
test/test_multi_field.py
test/test_multi_field.py
+1
-1
test/test_operators/test_adjoint.py
test/test_operators/test_adjoint.py
+2
-2
test/test_operators/test_representation.py
test/test_operators/test_representation.py
+2
-2
test/test_operators/test_smoothing_operator.py
test/test_operators/test_smoothing_operator.py
+1
-1
No files found.
demos/Wiener_Filter.ipynb
View file @
a272d7c5
...
@@ -427,12 +427,12 @@
...
@@ -427,12 +427,12 @@
"\n",
"\n",
"mask = np.full(s_space.shape, 1.)\n",
"mask = np.full(s_space.shape, 1.)\n",
"mask[l:h] = 0\n",
"mask[l:h] = 0\n",
"mask = ift.Field.from_
arr
(s_space, mask)\n",
"mask = ift.Field.from_
raw
(s_space, mask)\n",
"\n",
"\n",
"R = ift.DiagonalOperator(mask)(HT)\n",
"R = ift.DiagonalOperator(mask)(HT)\n",
"n = n.val
.copy
()\n",
"n = n.val
_rw
()\n",
"n[l:h] = 0\n",
"n[l:h] = 0\n",
"n = ift.Field.from_
arr
(s_space, n)\n",
"n = ift.Field.from_
raw
(s_space, n)\n",
"\n",
"\n",
"d = R(sh) + n"
"d = R(sh) + n"
]
]
...
@@ -501,7 +501,7 @@
...
@@ -501,7 +501,7 @@
"m_data = HT(m).val\n",
"m_data = HT(m).val\n",
"m_var_data = m_var.val\n",
"m_var_data = m_var.val\n",
"uncertainty = np.sqrt(m_var_data)\n",
"uncertainty = np.sqrt(m_var_data)\n",
"d_data = d.val
.copy
()\n",
"d_data = d.val
_rw
()\n",
"\n",
"\n",
"# Set lost data to NaN for proper plotting\n",
"# Set lost data to NaN for proper plotting\n",
"d_data[d_data == 0] = np.nan"
"d_data[d_data == 0] = np.nan"
...
@@ -583,12 +583,12 @@
...
@@ -583,12 +583,12 @@
"\n",
"\n",
"mask = np.full(s_space.shape, 1.)\n",
"mask = np.full(s_space.shape, 1.)\n",
"mask[l:h,l:h] = 0.\n",
"mask[l:h,l:h] = 0.\n",
"mask = ift.Field.from_
arr
(s_space, mask)\n",
"mask = ift.Field.from_
raw
(s_space, mask)\n",
"\n",
"\n",
"R = ift.DiagonalOperator(mask)(HT)\n",
"R = ift.DiagonalOperator(mask)(HT)\n",
"n = n.val
.copy
()\n",
"n = n.val
_rw
()\n",
"n[l:h, l:h] = 0\n",
"n[l:h, l:h] = 0\n",
"n = ift.Field.from_
arr
(s_space, n)\n",
"n = ift.Field.from_
raw
(s_space, n)\n",
"curv = Curvature(R=R, N=N, Sh=Sh)\n",
"curv = Curvature(R=R, N=N, Sh=Sh)\n",
"D = curv.inverse\n",
"D = curv.inverse\n",
"\n",
"\n",
...
...
demos/bernoulli_demo.py
View file @
a272d7c5
...
@@ -63,7 +63,7 @@ if __name__ == '__main__':
...
@@ -63,7 +63,7 @@ if __name__ == '__main__':
mock_position
=
ift
.
from_random
(
'normal'
,
harmonic_space
)
mock_position
=
ift
.
from_random
(
'normal'
,
harmonic_space
)
tmp
=
p
(
mock_position
).
val
.
astype
(
np
.
float64
)
tmp
=
p
(
mock_position
).
val
.
astype
(
np
.
float64
)
data
=
np
.
random
.
binomial
(
1
,
tmp
)
data
=
np
.
random
.
binomial
(
1
,
tmp
)
data
=
ift
.
Field
.
from_
arr
(
R
.
target
,
data
)
data
=
ift
.
Field
.
from_
raw
(
R
.
target
,
data
)
# Compute likelihood and Hamiltonian
# Compute likelihood and Hamiltonian
position
=
ift
.
from_random
(
'normal'
,
harmonic_space
)
position
=
ift
.
from_random
(
'normal'
,
harmonic_space
)
...
...
demos/find_amplitude_parameters.py
View file @
a272d7c5
...
@@ -57,7 +57,7 @@ if __name__ == '__main__':
...
@@ -57,7 +57,7 @@ if __name__ == '__main__':
for
_
in
range
(
n_samps
):
for
_
in
range
(
n_samps
):
fld
=
pspec
(
ift
.
from_random
(
'normal'
,
pspec
.
domain
))
fld
=
pspec
(
ift
.
from_random
(
'normal'
,
pspec
.
domain
))
klengths
=
fld
.
domain
[
0
].
k_lengths
klengths
=
fld
.
domain
[
0
].
k_lengths
ycoord
=
fld
.
val
.
copy
()
ycoord
=
fld
.
val
_rw
()
ycoord
[
0
]
=
ycoord
[
1
]
ycoord
[
0
]
=
ycoord
[
1
]
ax
.
plot
(
klengths
,
ycoord
,
alpha
=
1
)
ax
.
plot
(
klengths
,
ycoord
,
alpha
=
1
)
...
...
demos/getting_started_1.py
View file @
a272d7c5
...
@@ -95,7 +95,7 @@ if __name__ == '__main__':
...
@@ -95,7 +95,7 @@ if __name__ == '__main__':
# and harmonic transformaion
# and harmonic transformaion
# Masking operator to model that parts of the field have not been observed
# Masking operator to model that parts of the field have not been observed
mask
=
ift
.
Field
.
from_
arr
(
position_space
,
mask
)
mask
=
ift
.
Field
.
from_
raw
(
position_space
,
mask
)
Mask
=
ift
.
MaskOperator
(
mask
)
Mask
=
ift
.
MaskOperator
(
mask
)
# The response operator consists of
# The response operator consists of
...
...
demos/getting_started_2.py
View file @
a272d7c5
...
@@ -40,7 +40,7 @@ def exposure_2d():
...
@@ -40,7 +40,7 @@ def exposure_2d():
exposure
[:,
x_shape
*
4
//
5
:
x_shape
]
*=
.
1
exposure
[:,
x_shape
*
4
//
5
:
x_shape
]
*=
.
1
exposure
[:,
x_shape
//
2
:
x_shape
*
3
//
2
]
*=
3.
exposure
[:,
x_shape
//
2
:
x_shape
*
3
//
2
]
*=
3.
return
ift
.
Field
.
from_
arr
(
position_space
,
exposure
)
return
ift
.
Field
.
from_
raw
(
position_space
,
exposure
)
if
__name__
==
'__main__'
:
if
__name__
==
'__main__'
:
...
@@ -95,7 +95,7 @@ if __name__ == '__main__':
...
@@ -95,7 +95,7 @@ if __name__ == '__main__':
mock_position
=
ift
.
from_random
(
'normal'
,
domain
)
mock_position
=
ift
.
from_random
(
'normal'
,
domain
)
data
=
lamb
(
mock_position
)
data
=
lamb
(
mock_position
)
data
=
np
.
random
.
poisson
(
data
.
val
.
astype
(
np
.
float64
))
data
=
np
.
random
.
poisson
(
data
.
val
.
astype
(
np
.
float64
))
data
=
ift
.
Field
.
from_
arr
(
d_space
,
data
)
data
=
ift
.
Field
.
from_
raw
(
d_space
,
data
)
likelihood
=
ift
.
PoissonianEnergy
(
data
)(
lamb
)
likelihood
=
ift
.
PoissonianEnergy
(
data
)(
lamb
)
# Settings for minimization
# Settings for minimization
...
...
demos/polynomial_fit.py
View file @
a272d7c5
...
@@ -71,7 +71,7 @@ class PolynomialResponse(ift.LinearOperator):
...
@@ -71,7 +71,7 @@ class PolynomialResponse(ift.LinearOperator):
def
apply
(
self
,
x
,
mode
):
def
apply
(
self
,
x
,
mode
):
self
.
_check_input
(
x
,
mode
)
self
.
_check_input
(
x
,
mode
)
val
=
x
.
val
.
copy
()
val
=
x
.
val
_rw
()
if
mode
==
self
.
TIMES
:
if
mode
==
self
.
TIMES
:
# FIXME Use polynomial() here
# FIXME Use polynomial() here
out
=
self
.
_mat
.
dot
(
val
)
out
=
self
.
_mat
.
dot
(
val
)
...
...
nifty6/domains/lm_space.py
View file @
a272d7c5
...
@@ -87,7 +87,7 @@ class LMSpace(StructuredDomain):
...
@@ -87,7 +87,7 @@ class LMSpace(StructuredDomain):
for
m
in
range
(
1
,
mmax
+
1
):
for
m
in
range
(
1
,
mmax
+
1
):
ldist
[
idx
:
idx
+
2
*
(
lmax
+
1
-
m
)]
=
tmp
[
2
*
m
:]
ldist
[
idx
:
idx
+
2
*
(
lmax
+
1
-
m
)]
=
tmp
[
2
*
m
:]
idx
+=
2
*
(
lmax
+
1
-
m
)
idx
+=
2
*
(
lmax
+
1
-
m
)
return
Field
.
from_
arr
(
self
,
ldist
)
return
Field
.
from_
raw
(
self
,
ldist
)
def
get_unique_k_lengths
(
self
):
def
get_unique_k_lengths
(
self
):
return
np
.
arange
(
self
.
lmax
+
1
,
dtype
=
np
.
float64
)
return
np
.
arange
(
self
.
lmax
+
1
,
dtype
=
np
.
float64
)
...
@@ -123,7 +123,7 @@ class LMSpace(StructuredDomain):
...
@@ -123,7 +123,7 @@ class LMSpace(StructuredDomain):
lm0
=
gl
.
get_default_codomain
()
lm0
=
gl
.
get_default_codomain
()
theta
=
pyHealpix
.
GL_thetas
(
gl
.
nlat
)
theta
=
pyHealpix
.
GL_thetas
(
gl
.
nlat
)
# evaluate the kernel function at the required thetas
# evaluate the kernel function at the required thetas
kernel_sphere
=
Field
.
from_
arr
(
gl
,
func
(
theta
))
kernel_sphere
=
Field
.
from_
raw
(
gl
,
func
(
theta
))
# normalize the kernel such that the integral over the sphere is 4pi
# normalize the kernel such that the integral over the sphere is 4pi
kernel_sphere
=
kernel_sphere
*
(
4
*
np
.
pi
/
kernel_sphere
.
integrate
())
kernel_sphere
=
kernel_sphere
*
(
4
*
np
.
pi
/
kernel_sphere
.
integrate
())
# compute the spherical harmonic coefficients of the kernel
# compute the spherical harmonic coefficients of the kernel
...
@@ -131,7 +131,7 @@ class LMSpace(StructuredDomain):
...
@@ -131,7 +131,7 @@ class LMSpace(StructuredDomain):
kernel_lm
=
op
.
adjoint_times
(
kernel_sphere
.
weight
(
1
)).
val
kernel_lm
=
op
.
adjoint_times
(
kernel_sphere
.
weight
(
1
)).
val
# evaluate the k lengths of the harmonic space
# evaluate the k lengths of the harmonic space
k_lengths
=
self
.
get_k_length_array
().
val
.
astype
(
np
.
int
)
k_lengths
=
self
.
get_k_length_array
().
val
.
astype
(
np
.
int
)
return
Field
.
from_
arr
(
self
,
kernel_lm
[
k_lengths
])
return
Field
.
from_
raw
(
self
,
kernel_lm
[
k_lengths
])
@
property
@
property
def
lmax
(
self
):
def
lmax
(
self
):
...
...
nifty6/domains/power_space.py
View file @
a272d7c5
...
@@ -240,7 +240,7 @@ class PowerSpace(StructuredDomain):
...
@@ -240,7 +240,7 @@ class PowerSpace(StructuredDomain):
@
property
@
property
def
pindex
(
self
):
def
pindex
(
self
):
"""
data_object
: bin indices
"""
numpy.ndarray
: bin indices
Bin index for every pixel in the harmonic partner.
Bin index for every pixel in the harmonic partner.
"""
"""
...
...
nifty6/domains/rg_space.py
View file @
a272d7c5
...
@@ -97,14 +97,14 @@ class RGSpace(StructuredDomain):
...
@@ -97,14 +97,14 @@ class RGSpace(StructuredDomain):
res
=
np
.
arange
(
self
.
shape
[
0
],
dtype
=
np
.
float64
)
res
=
np
.
arange
(
self
.
shape
[
0
],
dtype
=
np
.
float64
)
res
=
np
.
minimum
(
res
,
self
.
shape
[
0
]
-
res
)
*
self
.
distances
[
0
]
res
=
np
.
minimum
(
res
,
self
.
shape
[
0
]
-
res
)
*
self
.
distances
[
0
]
if
len
(
self
.
shape
)
==
1
:
if
len
(
self
.
shape
)
==
1
:
return
Field
.
from_
arr
(
self
,
res
)
return
Field
.
from_
raw
(
self
,
res
)
res
*=
res
res
*=
res
for
i
in
range
(
1
,
len
(
self
.
shape
)):
for
i
in
range
(
1
,
len
(
self
.
shape
)):
tmp
=
np
.
arange
(
self
.
shape
[
i
],
dtype
=
np
.
float64
)
tmp
=
np
.
arange
(
self
.
shape
[
i
],
dtype
=
np
.
float64
)
tmp
=
np
.
minimum
(
tmp
,
self
.
shape
[
i
]
-
tmp
)
*
self
.
distances
[
i
]
tmp
=
np
.
minimum
(
tmp
,
self
.
shape
[
i
]
-
tmp
)
*
self
.
distances
[
i
]
tmp
*=
tmp
tmp
*=
tmp
res
=
np
.
add
.
outer
(
res
,
tmp
)
res
=
np
.
add
.
outer
(
res
,
tmp
)
return
Field
.
from_
arr
(
self
,
np
.
sqrt
(
res
))
return
Field
.
from_
raw
(
self
,
np
.
sqrt
(
res
))
def
get_k_length_array
(
self
):
def
get_k_length_array
(
self
):
if
(
not
self
.
harmonic
):
if
(
not
self
.
harmonic
):
...
...
nifty6/field.py
View file @
a272d7c5
...
@@ -32,8 +32,8 @@ class Field(object):
...
@@ -32,8 +32,8 @@ class Field(object):
----------
----------
domain : DomainTuple
domain : DomainTuple
The domain of the new Field.
The domain of the new Field.
val :
data_object
val :
numpy.ndarray
This object's
global
shape must match the domain shape
This object's shape must match the domain shape
After construction, the object will no longer be writeable!
After construction, the object will no longer be writeable!
Notes
Notes
...
@@ -93,7 +93,7 @@ class Field(object):
...
@@ -93,7 +93,7 @@ class Field(object):
return
Field
(
domain
,
val
)
return
Field
(
domain
,
val
)
@
staticmethod
@
staticmethod
def
from_
arr
(
domain
,
arr
):
def
from_
raw
(
domain
,
arr
):
"""Returns a Field constructed from `domain` and `arr`.
"""Returns a Field constructed from `domain` and `arr`.
Parameters
Parameters
...
@@ -148,15 +148,19 @@ class Field(object):
...
@@ -148,15 +148,19 @@ class Field(object):
@
property
@
property
def
val
(
self
):
def
val
(
self
):
"""numpy.ndarray : the
data object
storing the field's entries.
"""numpy.ndarray : the
array
storing the field's entries.
Notes
Notes
-----
-----
This property is intended for low-level, internal use only. Do not use
The returned array is read-only.
from outside of NIFTy's core; there should be better alternatives.
"""
"""
return
self
.
_val
return
self
.
_val
def
val_rw
(
self
):
"""numpy.ndarray : a copy of the array storing the field's entries.
"""
return
self
.
_val
.
copy
()
@
property
@
property
def
dtype
(
self
):
def
dtype
(
self
):
"""type : the data type of the field's entries"""
"""type : the data type of the field's entries"""
...
@@ -241,7 +245,7 @@ class Field(object):
...
@@ -241,7 +245,7 @@ class Field(object):
Field
Field
The weighted field.
The weighted field.
"""
"""
aout
=
self
.
val
.
copy
()
aout
=
self
.
val
_rw
()
spaces
=
utilities
.
parse_spaces
(
spaces
,
len
(
self
.
_domain
))
spaces
=
utilities
.
parse_spaces
(
spaces
,
len
(
self
.
_domain
))
...
...
nifty6/library/correlated_fields.py
View file @
a272d7c5
...
@@ -179,7 +179,7 @@ class _TwoLogIntegrations(LinearOperator):
...
@@ -179,7 +179,7 @@ class _TwoLogIntegrations(LinearOperator):
res
[
from_third
]
=
(
res
[
from_third
]
+
res
[
no_border
])
/
2
*
self
.
_log_vol
[
extender_sl
]
+
x
[
first
]
res
[
from_third
]
=
(
res
[
from_third
]
+
res
[
no_border
])
/
2
*
self
.
_log_vol
[
extender_sl
]
+
x
[
first
]
res
[
from_third
]
=
np
.
cumsum
(
res
[
from_third
],
axis
=
axis
)
res
[
from_third
]
=
np
.
cumsum
(
res
[
from_third
],
axis
=
axis
)
else
:
else
:
x
=
x
.
val
.
copy
()
x
=
x
.
val
_rw
()
res
=
np
.
zeros
(
self
.
_domain
.
shape
)
res
=
np
.
zeros
(
self
.
_domain
.
shape
)
x
[
from_third
]
=
np
.
cumsum
(
x
[
from_third
][
reverse
],
axis
=
axis
)[
reverse
]
x
[
from_third
]
=
np
.
cumsum
(
x
[
from_third
][
reverse
],
axis
=
axis
)[
reverse
]
res
[
first
]
+=
x
[
from_third
]
res
[
first
]
+=
x
[
from_third
]
...
@@ -199,7 +199,7 @@ class _Normalization(Operator):
...
@@ -199,7 +199,7 @@ class _Normalization(Operator):
pd
=
PowerDistributor
(
hspace
,
pd
=
PowerDistributor
(
hspace
,
power_space
=
self
.
_domain
[
space
],
power_space
=
self
.
_domain
[
space
],
space
=
space
)
space
=
space
)
mode_multiplicity
=
pd
.
adjoint
(
full
(
pd
.
target
,
1.
)).
val
.
copy
()
mode_multiplicity
=
pd
.
adjoint
(
full
(
pd
.
target
,
1.
)).
val
_rw
()
zero_mode
=
(
slice
(
None
),)
*
self
.
_domain
.
axes
[
space
][
0
]
+
(
0
,)
zero_mode
=
(
slice
(
None
),)
*
self
.
_domain
.
axes
[
space
][
0
]
+
(
0
,)
mode_multiplicity
[
zero_mode
]
=
0
mode_multiplicity
[
zero_mode
]
=
0
self
.
_mode_multiplicity
=
makeField
(
self
.
_domain
,
self
.
_mode_multiplicity
=
makeField
(
self
.
_domain
,
...
...
nifty6/library/los_response.py
View file @
a272d7c5
...
@@ -172,12 +172,11 @@ class LOSResponse(LinearOperator):
...
@@ -172,12 +172,11 @@ class LOSResponse(LinearOperator):
"getting negative distances"
)
"getting negative distances"
)
real_ends
=
starts
+
diffs
*
real_distances
real_ends
=
starts
+
diffs
*
real_distances
dist
=
np
.
array
(
self
.
domain
[
0
].
distances
).
reshape
((
-
1
,
1
))
dist
=
np
.
array
(
self
.
domain
[
0
].
distances
).
reshape
((
-
1
,
1
))
localized_
pixel_starts
=
starts
/
dist
+
0.5
pixel_starts
=
starts
/
dist
+
0.5
localized_
pixel_ends
=
real_ends
/
dist
+
0.5
pixel_ends
=
real_ends
/
dist
+
0.5
# get the shape of the local data slice
w_i
=
_comp_traverse
(
pixel_starts
,
w_i
=
_comp_traverse
(
localized_pixel_starts
,
pixel_ends
,
localized_pixel_ends
,
self
.
domain
[
0
].
shape
,
self
.
domain
[
0
].
shape
,
np
.
array
(
self
.
domain
[
0
].
distances
),
np
.
array
(
self
.
domain
[
0
].
distances
),
1.
/
(
1.
/
difflen
+
truncation
*
sigmas
),
1.
/
(
1.
/
difflen
+
truncation
*
sigmas
),
...
@@ -229,6 +228,6 @@ class LOSResponse(LinearOperator):
...
@@ -229,6 +228,6 @@ class LOSResponse(LinearOperator):
if
mode
==
self
.
TIMES
:
if
mode
==
self
.
TIMES
:
result_arr
=
self
.
_smat
.
matvec
(
x
.
val
.
reshape
(
-
1
))
result_arr
=
self
.
_smat
.
matvec
(
x
.
val
.
reshape
(
-
1
))
return
Field
(
self
.
_target
,
result_arr
)
return
Field
(
self
.
_target
,
result_arr
)
local_
input_data
=
x
.
val
.
reshape
(
-
1
)
input_data
=
x
.
val
.
reshape
(
-
1
)
res
=
self
.
_smat
.
rmatvec
(
local_
input_data
).
reshape
(
self
.
domain
[
0
].
shape
)
res
=
self
.
_smat
.
rmatvec
(
input_data
).
reshape
(
self
.
domain
[
0
].
shape
)
return
Field
(
self
.
_domain
,
res
)
return
Field
(
self
.
_domain
,
res
)
nifty6/linearization.py
View file @
a272d7c5
...
@@ -321,7 +321,7 @@ class Linearization(object):
...
@@ -321,7 +321,7 @@ class Linearization(object):
tmp
=
self
.
_val
.
sinc
()
tmp
=
self
.
_val
.
sinc
()
tmp2
=
((
np
.
pi
*
self
.
_val
).
cos
()
-
tmp
)
/
self
.
_val
tmp2
=
((
np
.
pi
*
self
.
_val
).
cos
()
-
tmp
)
/
self
.
_val
ind
=
self
.
_val
.
val
==
0
ind
=
self
.
_val
.
val
==
0
loc
=
tmp2
.
val
.
copy
()
loc
=
tmp2
.
val
_rw
()
loc
[
ind
]
=
0
loc
[
ind
]
=
0
tmp2
=
Field
(
tmp
.
domain
,
loc
)
tmp2
=
Field
(
tmp
.
domain
,
loc
)
return
self
.
new
(
tmp
,
makeOp
(
tmp2
)(
self
.
_jac
))
return
self
.
new
(
tmp
,
makeOp
(
tmp2
)(
self
.
_jac
))
...
@@ -371,7 +371,7 @@ class Linearization(object):
...
@@ -371,7 +371,7 @@ class Linearization(object):
tmp2
=
self
.
_val
.
sign
()
tmp2
=
self
.
_val
.
sign
()
ind
=
self
.
_val
.
val
==
0
ind
=
self
.
_val
.
val
==
0
loc
=
tmp2
.
val
.
copy
().
astype
(
float
)
loc
=
tmp2
.
val
_rw
().
astype
(
float
)
loc
[
ind
]
=
np
.
nan
loc
[
ind
]
=
np
.
nan
tmp2
=
Field
(
tmp
.
domain
,
loc
)
tmp2
=
Field
(
tmp
.
domain
,
loc
)
...
...
nifty6/minimization/metric_gaussian_kl_mpi.py
View file @
a272d7c5
...
@@ -188,7 +188,7 @@ class MetricGaussianKL_MPI(Energy):
...
@@ -188,7 +188,7 @@ class MetricGaussianKL_MPI(Energy):
for
s
in
self
.
_samples
:
for
s
in
self
.
_samples
:
tmp
=
self
.
_hamiltonian
(
self
.
_lin
+
s
)
tmp
=
self
.
_hamiltonian
(
self
.
_lin
+
s
)
if
v
is
None
:
if
v
is
None
:
v
=
tmp
.
val
.
val
.
copy
()
v
=
tmp
.
val
.
val
_rw
()
g
=
tmp
.
gradient
g
=
tmp
.
gradient
else
:
else
:
v
+=
tmp
.
val
.
val
v
+=
tmp
.
val
.
val
...
...
nifty6/minimization/scipy_minimizer.py
View file @
a272d7c5
...
@@ -48,7 +48,7 @@ def _toArray(fld):
...
@@ -48,7 +48,7 @@ def _toArray(fld):
def
_toArray_rw
(
fld
):
def
_toArray_rw
(
fld
):
if
isinstance
(
fld
,
Field
):
if
isinstance
(
fld
,
Field
):
return
fld
.
val
.
copy
().
reshape
(
-
1
)
return
fld
.
val
_rw
().
reshape
(
-
1
)
return
_multiToArray
(
fld
)
return
_multiToArray
(
fld
)
...
...
nifty6/multi_field.py
View file @
a272d7c5
...
@@ -132,12 +132,17 @@ class MultiField(object):
...
@@ -132,12 +132,17 @@ class MultiField(object):
return
MultiField
(
domain
,
tuple
(
Field
(
dom
,
val
)
return
MultiField
(
domain
,
tuple
(
Field
(
dom
,
val
)
for
dom
in
domain
.
_domains
))
for
dom
in
domain
.
_domains
))
def
to_global_data
(
self
):
@
property
def
val
(
self
):
return
{
key
:
val
.
val
return
{
key
:
val
.
val
for
key
,
val
in
zip
(
self
.
_domain
.
keys
(),
self
.
_val
)}
for
key
,
val
in
zip
(
self
.
_domain
.
keys
(),
self
.
_val
)}
def
val_rw
(
self
):
return
{
key
:
val
.
val_rw
()
for
key
,
val
in
zip
(
self
.
_domain
.
keys
(),
self
.
_val
)}
@
staticmethod
@
staticmethod
def
from_
global_data
(
domain
,
arr
):
def
from_
raw
(
domain
,
arr
):
return
MultiField
(
return
MultiField
(
domain
,
tuple
(
Field
(
domain
[
key
],
arr
[
key
])
domain
,
tuple
(
Field
(
domain
[
key
],
arr
[
key
])
for
key
in
domain
.
keys
()))
for
key
in
domain
.
keys
()))
...
...
nifty6/operator_spectrum.py
View file @
a272d7c5
...
@@ -56,7 +56,7 @@ class _DomRemover(LinearOperator):
...
@@ -56,7 +56,7 @@ class _DomRemover(LinearOperator):
def
apply
(
self
,
x
,
mode
):
def
apply
(
self
,
x
,
mode
):
self
.
_check_input
(
x
,
mode
)
self
.
_check_input
(
x
,
mode
)
self
.
_check_float_dtype
(
x
)
self
.
_check_float_dtype
(
x
)
x
=
x
.
to_global_data
()
x
=
x
.
val
if
isinstance
(
self
.
_domain
,
DomainTuple
):
if
isinstance
(
self
.
_domain
,
DomainTuple
):
res
=
x
.
ravel
()
if
mode
==
self
.
TIMES
else
x
.
reshape
(
res
=
x
.
ravel
()
if
mode
==
self
.
TIMES
else
x
.
reshape
(
self
.
_domain
.
shape
)
self
.
_domain
.
shape
)
...
...
nifty6/operators/distributors.py
View file @
a272d7c5
...
@@ -74,7 +74,7 @@ class DOFDistributor(LinearOperator):
...
@@ -74,7 +74,7 @@ class DOFDistributor(LinearOperator):
wgt
=
np
.
bincount
(
dofdex
.
val
.
ravel
(),
minlength
=
nbin
)
wgt
=
np
.
bincount
(
dofdex
.
val
.
ravel
(),
minlength
=
nbin
)
wgt
=
wgt
*
partner
.
scalar_dvol
wgt
=
wgt
*
partner
.
scalar_dvol
else
:
else
:
dvol
=
Field
.
from_
arr
(
partner
,
partner
.
dvol
).
val
dvol
=
Field
.
from_
raw
(
partner
,
partner
.
dvol
).
val
wgt
=
np
.
bincount
(
dofdex
.
val
.
ravel
(),
wgt
=
np
.
bincount
(
dofdex
.
val
.
ravel
(),
minlength
=
nbin
,
weights
=
dvol
)
minlength
=
nbin
,
weights
=
dvol
)
# The explicit conversion to float64 is necessary because bincount
# The explicit conversion to float64 is necessary because bincount
...
@@ -108,7 +108,7 @@ class DOFDistributor(LinearOperator):
...
@@ -108,7 +108,7 @@ class DOFDistributor(LinearOperator):
oarr
=
np
.
zeros
(
self
.
_hshape
,
dtype
=
x
.
dtype
)
oarr
=
np
.
zeros
(
self
.
_hshape
,
dtype
=
x
.
dtype
)
oarr
=
special_add_at
(
oarr
,
1
,
self
.
_dofdex
,
arr
)
oarr
=
special_add_at
(
oarr
,
1
,
self
.
_dofdex
,
arr
)
oarr
=
oarr
.
reshape
(
self
.
_domain
.
shape
)
oarr
=
oarr
.
reshape
(
self
.
_domain
.
shape
)
res
=
Field
.
from_
arr
(
self
.
_domain
,
oarr
)
res
=
Field
.
from_
raw
(
self
.
_domain
,
oarr
)
return
res
return
res
def
_times
(
self
,
x
):
def
_times
(
self
,
x
):
...
...
nifty6/plot.py
View file @
a272d7c5
...
@@ -310,7 +310,7 @@ def _plot1D(f, ax, **kwargs):
...
@@ -310,7 +310,7 @@ def _plot1D(f, ax, **kwargs):
plt
.
yscale
(
kwargs
.
pop
(
"yscale"
,
"log"
))
plt
.
yscale
(
kwargs
.
pop
(
"yscale"
,
"log"
))
xcoord
=
dom
.
k_lengths
xcoord
=
dom
.
k_lengths
for
i
,
fld
in
enumerate
(
f
):
for
i
,
fld
in
enumerate
(
f
):
ycoord
=
fld
.
val
.
copy
()
ycoord
=
fld
.
val
_rw
()
ycoord
[
0
]
=
ycoord
[
1
]
ycoord
[
0
]
=
ycoord
[
1
]
plt
.
plot
(
xcoord
,
ycoord
,
label
=
label
[
i
],
plt
.
plot
(
xcoord
,
ycoord
,
label
=
label
[
i
],
linewidth
=
linewidth
[
i
],
alpha
=
alpha
[
i
])
linewidth
=
linewidth
[
i
],
alpha
=
alpha
[
i
])
...
...
nifty6/probing.py
View file @
a272d7c5
...
@@ -144,7 +144,7 @@ def approximation2endo(op, nsamples):
...
@@ -144,7 +144,7 @@ def approximation2endo(op, nsamples):
approx
=
sc
.
var
approx
=
sc
.
var
dct
=
approx
.
to_dict
()
dct
=
approx
.
to_dict
()
for
kk
in
dct
:
for
kk
in
dct
:
foo
=
dct
[
kk
].
to_global_data
_rw
()
foo
=
dct
[
kk
].
val
_rw
()
foo
[
foo
==
0
]
=
1
foo
[
foo
==
0
]
=
1
dct
[
kk
]
=
makeField
(
dct
[
kk
].
domain
,
foo
)
dct
[
kk
]
=
makeField
(
dct
[
kk
].
domain
,
foo
)
return
MultiField
.
from_dict
(
dct
)
return
MultiField
.
from_dict
(
dct
)
nifty6/sugar.py
View file @
a272d7c5
...
@@ -297,8 +297,8 @@ def makeField(domain, arr):
...
@@ -297,8 +297,8 @@ def makeField(domain, arr):
The newly created random field
The newly created random field
"""
"""
if
isinstance
(
domain
,
(
dict
,
MultiDomain
)):
if
isinstance
(
domain
,
(
dict
,
MultiDomain
)):
return
MultiField
.
from_
global_data
(
domain
,
arr
)
return
MultiField
.
from_
raw
(
domain
,
arr
)
return
Field
.
from_
arr
(
domain
,
arr
)
return
Field
.
from_
raw
(
domain
,
arr
)
def
makeDomain
(
domain
):
def
makeDomain
(
domain
):
...
...
test/test_minimizers.py
View file @
a272d7c5
...
@@ -131,11 +131,11 @@ def test_rosenbrock(minimizer):
...
@@ -131,11 +131,11 @@ def test_rosenbrock(minimizer):
@
property
@
property
def
value
(
self
):
def
value
(
self
):
return
rosen
(
self
.
_position
.
val
.
copy
())
return
rosen
(
self
.
_position
.
val
_rw
())
@
property
@
property
def
gradient
(
self
):
def
gradient
(
self
):
inp
=
self
.
_position
.
val
.
copy
()
inp
=
self
.
_position
.
val
_rw
()
out
=
ift
.
Field
(
space
,
rosen_der
(
inp
))
out
=
ift
.
Field
(
space
,
rosen_der
(
inp
))
return
out
return
out
...
@@ -143,13 +143,13 @@ def test_rosenbrock(minimizer):
...
@@ -143,13 +143,13 @@ def test_rosenbrock(minimizer):
def
metric
(
self
):
def
metric
(
self
):
class
RBCurv
(
ift
.
EndomorphicOperator
):
class
RBCurv
(
ift
.
EndomorphicOperator
):
def
__init__
(
self
,
loc
):
def
__init__
(
self
,
loc
):
self
.
_loc
=
loc
.
val
.
copy
()
self
.
_loc
=
loc
.
val
_rw
()
self
.
_capability
=
self
.
TIMES
self
.
_capability
=
self
.
TIMES
self
.
_domain
=
space
self
.
_domain
=
space
def
apply
(
self
,
x
,
mode
):
def
apply
(
self
,
x
,
mode
):
self
.
_check_input
(
x
,
mode
)
self
.
_check_input
(
x
,
mode
)
inp
=
x
.
val
.
copy
()
inp
=
x
.
val
_rw
()
out
=
ift
.
Field
(
out
=
ift
.
Field
(
space
,
rosen_hess_prod
(
self
.
_loc
.
copy
(),
inp
))
space
,
rosen_hess_prod
(
self
.
_loc
.
copy
(),
inp
))
return
out
return
out
...
@@ -159,8 +159,8 @@ def test_rosenbrock(minimizer):
...
@@ -159,8 +159,8 @@ def test_rosenbrock(minimizer):
return
ift
.
InversionEnabler
(
RBCurv
(
self
.
_position
),
t1
)
return
ift
.
InversionEnabler
(
RBCurv
(
self
.
_position
),
t1
)
def
apply_metric
(
self
,
x
):
def
apply_metric
(
self
,
x
):
inp
=
x
.
val
.
copy
()
inp
=
x
.
val
_rw
()
pos
=
self
.
_position
.
val
.
copy
()
pos
=
self
.
_position
.
val
_rw
()
return
ift
.
Field
(
space
,
rosen_hess_prod
(
pos
,
inp
))
return
ift
.
Field
(
space
,
rosen_hess_prod
(
pos
,
inp
))
try
:
try
:
...
...
test/test_multi_field.py
View file @
a272d7c5
...
@@ -44,7 +44,7 @@ def test_multifield_field_consistency():
...
@@ -44,7 +44,7 @@ def test_multifield_field_consistency():
def
test_dataconv
():
def
test_dataconv
():
f1
=
ift
.
full
(
dom
,
27
)
f1
=
ift
.
full
(
dom
,
27
)
f2
=
ift
.
makeField
(
dom
,
f1
.
to_global_data
()
)
f2
=
ift
.
makeField
(
dom
,
f1
.
val
)
for
key
,
val
in
f1
.
items
():
for
key
,
val
in
f1
.
items
():