From 3cf07f850af9fc74095b0d3a85d08c954f3df14f Mon Sep 17 00:00:00 2001 From: "Hutschenreuter, Sebastian (hutsch)" <hutsch@mpa-garching.mpg.de> Date: Thu, 17 Jan 2019 16:34:05 +0100 Subject: [PATCH] Reviewed docs on operators, library, sugar. Fixed bug in makeOp due to the recent BlochdiagonalOperator interface change --- nifty5/field.py | 2 +- nifty5/library/adjust_variances.py | 2 +- nifty5/library/correlated_fields.py | 14 ++++++------ nifty5/library/dynamic_operator.py | 4 ++-- nifty5/library/inverse_gamma_operator.py | 8 +++---- nifty5/library/los_response.py | 2 +- nifty5/library/smooth_linear_amplitude.py | 6 ++--- nifty5/multi_field.py | 3 ++- nifty5/operators/block_diagonal_operator.py | 5 +++-- nifty5/operators/chain_operator.py | 7 +++++- nifty5/operators/contraction_operator.py | 6 ++--- nifty5/operators/diagonal_operator.py | 4 ++-- .../operators/domain_tuple_field_inserter.py | 4 ++-- nifty5/operators/endomorphic_operator.py | 2 +- nifty5/operators/energy_operators.py | 8 +++---- nifty5/operators/exp_transform.py | 4 ++-- nifty5/operators/harmonic_operators.py | 6 ++--- nifty5/operators/linear_interpolation.py | 5 ++--- nifty5/operators/offset_operator.py | 5 +++-- nifty5/operators/operator.py | 4 ++-- nifty5/operators/outer_product_operator.py | 2 +- nifty5/operators/qht_operator.py | 2 +- nifty5/operators/regridding_operator.py | 4 ++-- nifty5/operators/sampling_enabler.py | 6 ++--- nifty5/operators/sandwich_operator.py | 7 +++++- nifty5/operators/simple_linear_operators.py | 22 +++++++++++++++---- nifty5/operators/slope_operator.py | 4 ++-- nifty5/operators/sum_operator.py | 7 +++++- nifty5/operators/symmetrizing_operator.py | 4 ++-- nifty5/sugar.py | 18 +++++++-------- 30 files changed, 104 insertions(+), 73 deletions(-) diff --git a/nifty5/field.py b/nifty5/field.py index 19924dd12..9d9ae21cf 100644 --- a/nifty5/field.py +++ b/nifty5/field.py @@ -25,7 +25,7 @@ from .domain_tuple import DomainTuple class Field(object): """The discrete representation of a continuous field over multiple spaces. - Stores data arrays and carries all the needed metainformation (i.e. the + Stores data arrays and carries all the needed meta-information (i.e. the domain) for operators to be able to operate on them. Parameters diff --git a/nifty5/library/adjust_variances.py b/nifty5/library/adjust_variances.py index 0ad59c6e2..3e7cde27f 100644 --- a/nifty5/library/adjust_variances.py +++ b/nifty5/library/adjust_variances.py @@ -41,7 +41,7 @@ def make_adjust_variances(a, Operator which gives the amplitude when evaluated at a position xi : Operator Operator which gives the excitation when evaluated at a position - postion : Field, MultiField + position : Field, MultiField Position of the whole problem samples : Field, MultiField Residual samples of the whole problem diff --git a/nifty5/library/correlated_fields.py b/nifty5/library/correlated_fields.py index 71567cda3..4ceaf902e 100644 --- a/nifty5/library/correlated_fields.py +++ b/nifty5/library/correlated_fields.py @@ -25,15 +25,15 @@ from ..operators.simple_linear_operators import ducktape def CorrelatedField(target, amplitude_operator, name='xi'): - '''Constructs an operator which turns a white Gaussian excitation field + """Constructs an operator which turns a white Gaussian excitation field into a correlated field. This function returns an operator which implements: ht @ (vol * A * xi), - where `ht` is a harmonic transform operator, `A` is the sqare root of the - prior covariance an `xi` is the excitation field. + where `ht` is a harmonic transform operator, `A` is the square root of the + prior covariance and `xi` is the excitation field. Parameters ---------- @@ -41,12 +41,12 @@ def CorrelatedField(target, amplitude_operator, name='xi'): Target of the operator. Must contain exactly one space. amplitude_operator: Operator name : string - :class:`MultiField` key for xi-field. + :class:`MultiField` key for the xi-field. Returns ------- Correlated field : Operator - ''' + """ tgt = DomainTuple.make(target) if len(tgt) > 1: raise ValueError @@ -60,7 +60,7 @@ def CorrelatedField(target, amplitude_operator, name='xi'): def MfCorrelatedField(target, amplitudes, name='xi'): - '''Constructs an operator which turns white Gaussian excitation fields + """Constructs an operator which turns white Gaussian excitation fields into a correlated field defined on a DomainTuple with two entries and two separate correlation structures. @@ -79,7 +79,7 @@ def MfCorrelatedField(target, amplitudes, name='xi'): Returns ------- Correlated field : Operator - ''' + """ tgt = DomainTuple.make(target) if len(tgt) != 2: raise ValueError diff --git a/nifty5/library/dynamic_operator.py b/nifty5/library/dynamic_operator.py index 68ef95460..5247ebc26 100644 --- a/nifty5/library/dynamic_operator.py +++ b/nifty5/library/dynamic_operator.py @@ -144,7 +144,7 @@ def dynamic_operator(*, key, causal=True, minimum_phase=False): - '''Constructs an operator encoding the Green's function of a linear + """Constructs an operator encoding the Green's function of a linear homogeneous dynamic system. When evaluated, this operator returns the Green's function representation @@ -189,7 +189,7 @@ def dynamic_operator(*, Notes ----- The first axis of the domain is interpreted the time axis. - ''' + """ dct = { 'target': target, 'harmonic_padding': harmonic_padding, diff --git a/nifty5/library/inverse_gamma_operator.py b/nifty5/library/inverse_gamma_operator.py index e61b77b2b..98e04922c 100644 --- a/nifty5/library/inverse_gamma_operator.py +++ b/nifty5/library/inverse_gamma_operator.py @@ -31,11 +31,11 @@ class InverseGammaOperator(Operator): The pdf of the inverse gamma distribution is defined as follows: .. math :: - \\frac{\\beta^\\alpha}{\\Gamma(\\alpha)}x^{-\\alpha -1}\\exp \\left(-\\frac{\\beta }{x}\\right) + \\frac{q^\\alpha}{\\Gamma(\\alpha)}x^{-\\alpha -1}\\exp \\left(-\\frac{q}{x}\\right) - That means that for large x the pdf falls off like x^(-alpha -1). - The mean of the pdf is at q / (alpha - 1) if alpha > 1. - The mode is q / (alpha + 1). + That means that for large x the pdf falls off like :math:`x^(-\\alpha -1)`. + The mean of the pdf is at :math:`q / (\\alpha - 1)` if :math:`\\alpha > 1`. + The mode is :math:`q / (\\alpha + 1)`. This transformation is implemented as a linear interpolation which maps a Gaussian onto a inverse gamma distribution. diff --git a/nifty5/library/los_response.py b/nifty5/library/los_response.py index fb0c87f0d..f094c097a 100644 --- a/nifty5/library/los_response.py +++ b/nifty5/library/los_response.py @@ -104,7 +104,7 @@ def apply_erf(wgt, dist, lo, mid, hi, sig, erf): class LOSResponse(LinearOperator): """Line-of-sight response operator - This operator transforms from a single RGSpace to an unstructured domain + This operator transforms from a single RGSpace to an UnstructuredDomain with as many entries as there were lines of sight passed to the constructor. Adjoint application is also provided. diff --git a/nifty5/library/smooth_linear_amplitude.py b/nifty5/library/smooth_linear_amplitude.py index 3816af6af..9fda8d374 100644 --- a/nifty5/library/smooth_linear_amplitude.py +++ b/nifty5/library/smooth_linear_amplitude.py @@ -33,7 +33,7 @@ def _ceps_kernel(k, a, k0): def CepstrumOperator(target, a, k0): - '''Turns a white Gaussian random field into a smooth field on a LogRGSpace. + """Turns a white Gaussian random field into a smooth field on a LogRGSpace. Composed out of three operators: @@ -69,10 +69,10 @@ def CepstrumOperator(target, a, k0): regularization of the inverse laplace operator to be finite at zero. Larger values for the cutoff results in a weaker constraining prior. k0 : float, list of float - Strength of smothness prior in quefrency space (positive only) along + Strength of smoothness prior in quefrency space (positive only) along each axis. If float then the strength is the same along each axis. Larger values result in a weaker constraining prior. - ''' + """ a = float(a) target = DomainTuple.make(target) if a <= 0: diff --git a/nifty5/multi_field.py b/nifty5/multi_field.py index 0383f5e7f..fdc913e94 100644 --- a/nifty5/multi_field.py +++ b/nifty5/multi_field.py @@ -25,7 +25,8 @@ from .domain_tuple import DomainTuple class MultiField(object): def __init__(self, domain, val): - """ + """The discrete representation of a continuous field over a sum space. + Parameters ---------- domain: MultiDomain diff --git a/nifty5/operators/block_diagonal_operator.py b/nifty5/operators/block_diagonal_operator.py index be29fc3ae..b1968bd96 100644 --- a/nifty5/operators/block_diagonal_operator.py +++ b/nifty5/operators/block_diagonal_operator.py @@ -24,9 +24,10 @@ class BlockDiagonalOperator(EndomorphicOperator): """ Parameters ---------- + domain : :class:`MultiDomain` + Domain and target of the operator. operators : dict - Dictionary with operators domain names as keys and LinearOperators as - items. + Dictionary with subdomain names as keys and :class:`LinearOperators` as items. """ def __init__(self, domain, operators): if not isinstance(domain, MultiDomain): diff --git a/nifty5/operators/chain_operator.py b/nifty5/operators/chain_operator.py index 81d73617b..154fc7098 100644 --- a/nifty5/operators/chain_operator.py +++ b/nifty5/operators/chain_operator.py @@ -23,7 +23,12 @@ from .simple_linear_operators import NullOperator class ChainOperator(LinearOperator): - """Class representing chains of operators.""" + """Class representing chains of operators. + + Notes + ----- + This operator has to be called using the :attr:`make` method. + """ def __init__(self, ops, _callingfrommake=False): if not _callingfrommake: diff --git a/nifty5/operators/contraction_operator.py b/nifty5/operators/contraction_operator.py index 37fe72934..2a2a2e557 100644 --- a/nifty5/operators/contraction_operator.py +++ b/nifty5/operators/contraction_operator.py @@ -24,10 +24,10 @@ from .linear_operator import LinearOperator class ContractionOperator(LinearOperator): - """A linear operator which sums up fields into the direction of subspaces. + """A :class:`LinearOperator` which sums up fields into the direction of subspaces. - This ContractionOperator sums up a field with is defined on a DomainTuple - to a DomainTuple which contains the former as a subset. + This Operator sums up a field with is defined on a :class:`DomainTuple` + to a :class:`DomainTuple` which contains the former as a subset. Parameters ---------- diff --git a/nifty5/operators/diagonal_operator.py b/nifty5/operators/diagonal_operator.py index 3b2812182..ba18d1edc 100644 --- a/nifty5/operators/diagonal_operator.py +++ b/nifty5/operators/diagonal_operator.py @@ -24,10 +24,10 @@ from .endomorphic_operator import EndomorphicOperator class DiagonalOperator(EndomorphicOperator): - """Represents a linear operator which is diagonal. + """Represents a :class:`LinearOperator` which is diagonal. The NIFTy DiagonalOperator class is a subclass derived from the - EndomorphicOperator. It multiplies an input field pixel-wise with its + :class:`EndomorphicOperator`. It multiplies an input field pixel-wise with its diagonal. Parameters diff --git a/nifty5/operators/domain_tuple_field_inserter.py b/nifty5/operators/domain_tuple_field_inserter.py index 74e5d555e..c7d5ae9f0 100644 --- a/nifty5/operators/domain_tuple_field_inserter.py +++ b/nifty5/operators/domain_tuple_field_inserter.py @@ -23,7 +23,7 @@ from .linear_operator import LinearOperator class DomainTupleFieldInserter(LinearOperator): - '''Writes the content of a field into one slice of a DomainTuple. + """Writes the content of a :class:`Field` into one slice of a :class:`DomainTuple`. Parameters ---------- @@ -33,7 +33,7 @@ class DomainTupleFieldInserter(LinearOperator): Index at which new_space shall be added to domain. position : tuple Slice in new_space in which the input field shall be written into. - ''' + """ def __init__(self, domain, new_space, index, position): self._domain = DomainTuple.make(domain) tgt = list(self.domain) diff --git a/nifty5/operators/endomorphic_operator.py b/nifty5/operators/endomorphic_operator.py index 9b1d797f4..16afb7374 100644 --- a/nifty5/operators/endomorphic_operator.py +++ b/nifty5/operators/endomorphic_operator.py @@ -21,7 +21,7 @@ from .linear_operator import LinearOperator class EndomorphicOperator(LinearOperator): - """Represents a linear operator which is endomorphic, i.e. one which + """Represents a :class:`LinearOperator` which is endomorphic, i.e. one which has identical domain and target. """ @property diff --git a/nifty5/operators/energy_operators.py b/nifty5/operators/energy_operators.py index 6788366f5..07e4b1d67 100644 --- a/nifty5/operators/energy_operators.py +++ b/nifty5/operators/energy_operators.py @@ -49,7 +49,7 @@ class SquaredNormOperator(EnergyOperator): Parameters ---------- domain : Domain, DomainTuple or tuple of Domain - Target domain of the operator in which the L2-norm shall be computed. + Domain of the operator in which the L2-norm shall be computed. """ def __init__(self, domain): @@ -66,7 +66,7 @@ class SquaredNormOperator(EnergyOperator): class QuadraticFormOperator(EnergyOperator): """Computes the L2-norm of a Field or MultiField with respect to a - specific metric `endo`. + specific kernel given by `endo`. .. math :: E(f) = \\frac12 f^\\dagger \\text{endo}(f) @@ -74,7 +74,7 @@ class QuadraticFormOperator(EnergyOperator): Parameters ---------- endo : EndomorphicOperator - Kernel of quadratic form. + Kernel of the quadratic form """ def __init__(self, endo): @@ -283,7 +283,7 @@ class Hamiltonian(EnergyOperator): lh : EnergyOperator The likelihood energy. ic_samp : IterationController - Tells an internal :class:`SamplingEnabler` which convergence criterium + Tells an internal :class:`SamplingEnabler` which convergence criterion to use to draw Gaussian samples. diff --git a/nifty5/operators/exp_transform.py b/nifty5/operators/exp_transform.py index 78673d816..5028ee14f 100644 --- a/nifty5/operators/exp_transform.py +++ b/nifty5/operators/exp_transform.py @@ -31,13 +31,13 @@ class ExpTransform(LinearOperator): This operator creates a log-space subject to the degrees of freedom and and its target-domain. - Then transforms between this log-space and its target, which is defined in + Then it transforms between this log-space and its target, which is defined in normal units. FIXME Write something on t_0 of domain space E.g: A field in log-log-space can be transformed into log-norm-space, - that is the y-axis stays logarithmic, but the x-axis is transfromed. + that is the y-axis stays logarithmic, but the x-axis is transformed. Parameters ---------- diff --git a/nifty5/operators/harmonic_operators.py b/nifty5/operators/harmonic_operators.py index f8c4bb2e8..f7a536ac6 100644 --- a/nifty5/operators/harmonic_operators.py +++ b/nifty5/operators/harmonic_operators.py @@ -143,7 +143,7 @@ class HartleyOperator(LinearOperator): (https://en.wikipedia.org/wiki/Discrete_Hartley_transform). For complex input fields, the operator will transform the real and imaginary parts separately and use the results as real and imaginary parts - of the result field, respectivey. + of the result field, respectively. In many contexts the Hartley transform is a perfect substitute for the Fourier transform, but in some situations (e.g. convolution with a general, non-symmetric kernel, the full FFT must be used instead. @@ -386,7 +386,7 @@ class HarmonicTransformOperator(LinearOperator): def HarmonicSmoothingOperator(domain, sigma, space=None): """Returns an operator that carries out a smoothing with a Gaussian kernel - of width `sigma` on the part of `domain` given by `space` + of width `sigma` on the part of `domain` given by `space`. Parameters ---------- @@ -408,7 +408,7 @@ def HarmonicSmoothingOperator(domain, sigma, space=None): sigma = float(sigma) if sigma < 0.: - raise ValueError("sigma must be nonnegative") + raise ValueError("sigma must be non-negative") if sigma == 0.: return ScalingOperator(1., domain) diff --git a/nifty5/operators/linear_interpolation.py b/nifty5/operators/linear_interpolation.py index 7f96de0e0..594a25795 100644 --- a/nifty5/operators/linear_interpolation.py +++ b/nifty5/operators/linear_interpolation.py @@ -35,9 +35,8 @@ class LinearInterpolator(LinearOperator): Parameters ---------- domain : RGSpace - positions : numpy.ndarray - Positions at which to interpolate - Field with UnstructuredDomain, shape (dim, ndata) + sampling_points : numpy.ndarray, shape (dim, ndata) + Positions at which to interpolate. Notes ----- diff --git a/nifty5/operators/offset_operator.py b/nifty5/operators/offset_operator.py index a8ebba807..98976e057 100644 --- a/nifty5/operators/offset_operator.py +++ b/nifty5/operators/offset_operator.py @@ -19,12 +19,13 @@ from .operator import Operator class OffsetOperator(Operator): - '''Shifts the input by a fixed field. + """Shifts the input by a fixed field. Parameters ---------- field : Field - The field by which the input is shifted.''' + The field by which the input is shifted. + """ def __init__(self, field): self._field = field self._domain = self._target = field.domain diff --git a/nifty5/operators/operator.py b/nifty5/operators/operator.py index 3b2c8a102..346724efe 100644 --- a/nifty5/operators/operator.py +++ b/nifty5/operators/operator.py @@ -110,14 +110,14 @@ class Operator(NiftyMetaBase()): return _OpChain.make((_Clipper(self.target, min, max), self)) def apply(self, x): - '''Applies the operator to a Field or MultiField. + """Applies the operator to a Field or MultiField. Parameters ---------- x : Field or MultiField Input on which the operator shall act. Needs to be defined on :attr:`domain`. - ''' + """ raise NotImplementedError def force(self, x): diff --git a/nifty5/operators/outer_product_operator.py b/nifty5/operators/outer_product_operator.py index b66f9f951..21412c4c3 100644 --- a/nifty5/operators/outer_product_operator.py +++ b/nifty5/operators/outer_product_operator.py @@ -23,7 +23,7 @@ from .linear_operator import LinearOperator class OuterProduct(LinearOperator): - """Performs the pointwise outer product of two fields. + """Performs the point-wise outer product of two fields. Parameters --------- diff --git a/nifty5/operators/qht_operator.py b/nifty5/operators/qht_operator.py index ff9425216..ec858d623 100644 --- a/nifty5/operators/qht_operator.py +++ b/nifty5/operators/qht_operator.py @@ -36,7 +36,7 @@ class QHTOperator(LinearOperator): The full output domain space : int The index of the domain on which the operator acts. - target[space] must be a nonharmonic LogRGSpace. + target[space] must be a non-harmonic LogRGSpace. """ def __init__(self, target, space=0): diff --git a/nifty5/operators/regridding_operator.py b/nifty5/operators/regridding_operator.py index aad93b5cb..a5531be9a 100644 --- a/nifty5/operators/regridding_operator.py +++ b/nifty5/operators/regridding_operator.py @@ -26,7 +26,7 @@ from .linear_operator import LinearOperator class RegriddingOperator(LinearOperator): - '''Linearly interpolates a RGSpace to an RGSpace with coarser resolution. + """Linearly interpolates a RGSpace to an RGSpace with coarser resolution. Parameters ---------- @@ -38,7 +38,7 @@ class RegriddingOperator(LinearOperator): space : int Index of space in `domain` on which the operator shall act. Default is 0. - ''' + """ def __init__(self, domain, new_shape, space=0): self._domain = DomainTuple.make(domain) self._space = infer_space(self._domain, space) diff --git a/nifty5/operators/sampling_enabler.py b/nifty5/operators/sampling_enabler.py index 69cc208a0..57327368e 100644 --- a/nifty5/operators/sampling_enabler.py +++ b/nifty5/operators/sampling_enabler.py @@ -23,7 +23,7 @@ from .endomorphic_operator import EndomorphicOperator class SamplingEnabler(EndomorphicOperator): - """Class which acts as the operator object (likelihood + prior) + """Class which acts as a operator object built of (`likelihood` + `prior`) and enables sampling from its inverse even if the operator object itself does not support it. @@ -38,8 +38,8 @@ class SamplingEnabler(EndomorphicOperator): The iteration controller to use for the iterative numerical inversion done by a :class:`ConjugateGradient` object. approximation : :class:`LinearOperator`, optional - if not None, this operator should be an approximation to `op`, which - supports the operation modes that `op` doesn't have. It is used as a + if not None, this linear operator should be an approximation to the operator, which + supports the operation modes that the operator doesn't have. It is used as a preconditioner during the iterative inversion, to accelerate convergence. """ diff --git a/nifty5/operators/sandwich_operator.py b/nifty5/operators/sandwich_operator.py index 181a41656..7032df190 100644 --- a/nifty5/operators/sandwich_operator.py +++ b/nifty5/operators/sandwich_operator.py @@ -25,7 +25,12 @@ from .scaling_operator import ScalingOperator class SandwichOperator(EndomorphicOperator): """Operator which is equivalent to the expression - `bun.adjoint(cheese(bun))`.""" + `bun.adjoint(cheese(bun))`. + + Notes + ----- + This operator should always be called using the `make` method. + """ def __init__(self, bun, cheese, op, _callingfrommake=False): if not _callingfrommake: diff --git a/nifty5/operators/simple_linear_operators.py b/nifty5/operators/simple_linear_operators.py index 9abc5cd09..c98a9c20f 100644 --- a/nifty5/operators/simple_linear_operators.py +++ b/nifty5/operators/simple_linear_operators.py @@ -46,7 +46,14 @@ class VdotOperator(LinearOperator): class ConjugationOperator(EndomorphicOperator): - """Operator computing the complex conjugate of its input.""" + """Operator computing the complex conjugate of its input. + + Parameters + ---------- + domain: Domain, tuple of domains or DomainTuple + domain of the input field + + """ def __init__(self, domain): self._domain = DomainTuple.make(domain) self._capability = self._all_ops @@ -57,7 +64,14 @@ class ConjugationOperator(EndomorphicOperator): class Realizer(EndomorphicOperator): - """Operator returning the real component of its input.""" + """Operator returning the real component of its input. + + Parameters + ---------- + domain: Domain, tuple of domains or DomainTuple + domain of the input field + + """ def __init__(self, domain): self._domain = DomainTuple.make(domain) self._capability = self.TIMES | self.ADJOINT_TIMES @@ -173,8 +187,8 @@ class GeometryRemover(LinearOperator): domain: Domain, tuple of Domain, or DomainTuple: the full input domain of the operator. space: int, optional - The index of the subdomain on which the operator should act - If None, it acts on all spaces + The index of the subdomain on which the operator should act. Default is None. + If None, it acts on all spaces. Notes ----- diff --git a/nifty5/operators/slope_operator.py b/nifty5/operators/slope_operator.py index 1c84f6d54..b4676ed45 100644 --- a/nifty5/operators/slope_operator.py +++ b/nifty5/operators/slope_operator.py @@ -29,10 +29,10 @@ class SlopeOperator(LinearOperator): Slope and y-intercept of this line are the two parameters which are defined on an UnstructeredDomain (in this order) which is the domain of - the operator. Being a LogRGSpace each pixel has a well-defined coordinate + the operator. Being a LogRGSpace instance each pixel has a well-defined coordinate value. - y-intercept is defined to be the value at t_0 of the target. + The y-intercept is defined to be the value at t_0 of the target. Parameters ---------- diff --git a/nifty5/operators/sum_operator.py b/nifty5/operators/sum_operator.py index 8ed74bf63..9cfe1328c 100644 --- a/nifty5/operators/sum_operator.py +++ b/nifty5/operators/sum_operator.py @@ -26,7 +26,12 @@ from .linear_operator import LinearOperator class SumOperator(LinearOperator): - """Class representing sums of operators.""" + """Class representing sums of operators. + + Notes + ----- + This operator has to be called using the `make` method. + """ def __init__(self, ops, neg, dom, tgt, _callingfrommake=False): if not _callingfrommake: diff --git a/nifty5/operators/symmetrizing_operator.py b/nifty5/operators/symmetrizing_operator.py index 4f38603a4..c0abb67b4 100644 --- a/nifty5/operators/symmetrizing_operator.py +++ b/nifty5/operators/symmetrizing_operator.py @@ -23,7 +23,7 @@ from .endomorphic_operator import EndomorphicOperator class SymmetrizingOperator(EndomorphicOperator): - '''Subtracts the field axes-wise in reverse order from itself. The slice of + """Subtracts the field axes-wise in reverse order from itself. The slice of all elements with at least one index being zero is not touched. Parameters @@ -33,7 +33,7 @@ class SymmetrizingOperator(EndomorphicOperator): :class:`LogRGSpace`. space : int Index of space in domain on which the operator shall act. Default is 0. - ''' + """ def __init__(self, domain, space=0): self._domain = DomainTuple.make(domain) self._capability = self.TIMES | self.ADJOINT_TIMES diff --git a/nifty5/sugar.py b/nifty5/sugar.py index 68484a326..7e4704bcb 100644 --- a/nifty5/sugar.py +++ b/nifty5/sugar.py @@ -65,7 +65,7 @@ def get_signal_variance(spec, space): """ Computes how much a field with a given power spectrum will vary in space - This is a small helper function that computes how the expected variance + This is a small helper function that computes the expected variance of a harmonically transformed sample of this power spectrum. Parameters @@ -103,14 +103,14 @@ def power_analyze(field, spaces=None, binbounds=None, """Computes the power spectrum for a subspace of `field`. Creates a PowerSpace for the space addressed by `spaces` with the given - binning and computes the power spectrum as a Field over this + binning and computes the power spectrum as a :class:`Field` over this PowerSpace. This can only be done if the subspace to be analyzed is a harmonic space. The resulting field has the same units as the square of the initial field. Parameters ---------- - field : Field + field : :class:`Field` The field to be analyzed spaces : None or int or tuple of int, optional The indices of subdomains for which the power spectrum shall be @@ -122,18 +122,18 @@ def power_analyze(field, spaces=None, binbounds=None, if binbounds is None : bins are inferred. keep_phase_information : bool, optional If False, return a real-valued result containing the power spectrum - of the input Field. + of `field`. If True, return a complex-valued result whose real component - contains the power spectrum computed from the real part of the - input Field, and whose imaginary component contains the power - spectrum computed from the imaginary part of the input Field. + contains the power spectrum computed from the real part of `field`, + and whose imaginary component contains the power + spectrum computed from the imaginary part of `field`. The absolute value of this result should be identical to the output of power_analyze with keep_phase_information=False. (default : False). Returns ------- - Field + :class:`Field` The output object. Its domain is a PowerSpace and it contains the power spectrum of `field`. """ @@ -363,7 +363,7 @@ def makeOp(input): return DiagonalOperator(input) if isinstance(input, MultiField): return BlockDiagonalOperator( - input.domain, tuple(makeOp(val) for val in input.values())) + input.domain, input.to_dict()) raise NotImplementedError -- GitLab