diff --git a/demos/critical_filtering.py b/demos/critical_filtering.py index 19fcb4a8876fb94d70f9e96d83fe3bcc67aa92f1..11d670beb0c4a4a6eead0bf30c7998b8c2883276 100644 --- a/demos/critical_filtering.py +++ b/demos/critical_filtering.py @@ -59,7 +59,7 @@ if __name__ == "__main__": S = ift.create_power_operator(h_space, power_spectrum=p_spec) # Draw a sample sh from the prior distribution in harmonic space - sp = ift.Field(p_space, val=p_spec(p_space.k_lengths)) + sp = ift.PS_field(p_space, p_spec) sh = ift.power_synthesize(sp, real_signal=True) # Choose the measurement instrument diff --git a/demos/log_normal_wiener_filter.py b/demos/log_normal_wiener_filter.py index 8b4209a065081d61bc07e13f84053d965bbcfb27..542737d2b7f7fc34aebf7a08a54a9d2f432f1e68 100644 --- a/demos/log_normal_wiener_filter.py +++ b/demos/log_normal_wiener_filter.py @@ -24,7 +24,7 @@ if __name__ == "__main__": # Creating the mock signal |\label{code:wf_mock_signal}| S = ift.create_power_operator(harmonic_space, power_spectrum=power_spectrum) - mock_power = ift.Field(power_space, val=power_spectrum(power_space.k_lengths)) + mock_power = ift.PS_field(power_space, power_spectrum) mock_signal = fft(ift.power_synthesize(mock_power, real_signal=True)) # Setting up an exemplary response diff --git a/demos/paper_demos/wiener_filter.py b/demos/paper_demos/wiener_filter.py index 229c6ab1f9732c0b317e2a0e02a0261581fbe868..e32d76a4a63e86752df8686b1216f485f3072071 100644 --- a/demos/paper_demos/wiener_filter.py +++ b/demos/paper_demos/wiener_filter.py @@ -23,7 +23,7 @@ if __name__ == "__main__": # Creating the mock signal |\label{code:wf_mock_signal}| S = ift.create_power_operator(harmonic_space, power_spectrum=power_spectrum) - mock_power = ift.Field(power_space, val=power_spectrum(power_space.k_lengths)) + mock_power = ift.PS_field(power_space, power_spectrum) mock_signal = fft(ift.power_synthesize(mock_power, real_signal=True)) # Setting up an exemplary response diff --git a/demos/probing.py b/demos/probing.py index 21b63493348415dae11199ae38517561f9bc4eda..4f3f1e0ef001d6cd815c1f89da5c70ca449226b1 100644 --- a/demos/probing.py +++ b/demos/probing.py @@ -4,6 +4,7 @@ import numpy as np np.random.seed(42) + class DiagonalProber(ift.DiagonalProberMixin, ift.Prober): pass diff --git a/nifty/data_objects/distributed_do.py b/nifty/data_objects/distributed_do.py index b747284841459aef24c5d8c0a7946d2daea340cd..259b1ed39ec921705439b80418dc3c480bdd16fc 100644 --- a/nifty/data_objects/distributed_do.py +++ b/nifty/data_objects/distributed_do.py @@ -23,7 +23,7 @@ def _shareRange(nwork, nshares, myshare): nbase = nwork//nshares additional = nwork % nshares lo = myshare*nbase + min(myshare, additional) - hi = lo + nbase + int(myshare<additional) + hi = lo + nbase + int(myshare < additional) return lo, hi @@ -408,15 +408,15 @@ def redistribute(arr, dist=None, nodist=None): ofs = 0 for i in range(ntask): lo, hi = _shareRange(arr.shape[dist], ntask, i) - sslice[dist] = slice(lo,hi) + sslice[dist] = slice(lo, hi) ssz[i] = ssz0*(hi-lo) sbuf[ofs:ofs+ssz[i]] = arr._data[sslice].flat ofs += ssz[i] rsz[i] = rsz0*_shareSize(arr.shape[arr._distaxis], ntask, i) ssz *= arr._data.itemsize rsz *= arr._data.itemsize - sdisp = np.append (0, np.cumsum(ssz[:-1])) - rdisp = np.append (0, np.cumsum(rsz[:-1])) + sdisp = np.append(0, np.cumsum(ssz[:-1])) + rdisp = np.append(0, np.cumsum(rsz[:-1])) s_msg = [sbuf, (ssz, sdisp), MPI.BYTE] r_msg = [rbuf, (rsz, rdisp), MPI.BYTE] _comm.Alltoallv(s_msg, r_msg) @@ -430,7 +430,7 @@ def redistribute(arr, dist=None, nodist=None): ofs = 0 for i in range(ntask): lo, hi = _shareRange(arr.shape[arr._distaxis], ntask, i) - rslice[arr._distaxis] = slice(lo,hi) + rslice[arr._distaxis] = slice(lo, hi) sz = rsz[i]//arr._data.itemsize arrnew._data[rslice].flat = rbuf[ofs:ofs+sz] ofs += sz diff --git a/nifty/sugar.py b/nifty/sugar.py index 052586a8980c7f93b2cf8e148b47740a4437038b..e87a79adf31d7b6413cc93c8fa9cb54e4e38d928 100644 --- a/nifty/sugar.py +++ b/nifty/sugar.py @@ -29,7 +29,8 @@ from . import Space,\ from . import nifty_utilities as utilities from . import dobj -__all__ = ['power_analyze', +__all__ = ['PS_field', + 'power_analyze', 'power_synthesize', 'power_synthesize_special', 'create_power_field', @@ -38,6 +39,12 @@ __all__ = ['power_analyze', 'create_composed_fft_operator'] +def PS_field(pspace, func, dtype=None): + if not isinstance(pspace, PowerSpace): + raise TypeError + data = dobj.from_global_data(func(pspace.k_lengths)) + return Field(pspace, val=data, dtype=dtype) + def _single_power_analyze(field, idx, binbounds): from .operators.power_projection_operator import PowerProjectionOperator power_domain = PowerSpace(field.domain[idx], binbounds) @@ -223,9 +230,7 @@ def create_power_field(domain, power_spectrum, dtype=None): fp = Field(power_domain, val=power_spectrum.val, dtype=dtype) else: power_domain = PowerSpace(domain) - fp = Field(power_domain, - val=dobj.from_global_data(power_spectrum(power_domain.k_lengths)), - dtype=dtype) + fp = PS_field(power_domain, power_spectrum, dtype) P = PowerProjectionOperator(domain, power_domain) f = P.adjoint_times(fp)