diff --git a/nifty6/operators/scaling_operator.py b/nifty6/operators/scaling_operator.py index b3ed89f39feba9797e1fa15596413e2945c5c27c..f6a4a4b5bb164c7dceca1e4110bd48cfa64bed6c 100644 --- a/nifty6/operators/scaling_operator.py +++ b/nifty6/operators/scaling_operator.py @@ -17,8 +17,10 @@ import numpy as np -from ..sugar import full from .endomorphic_operator import EndomorphicOperator +from ..field import Field +from ..multi_domain import MultiDomain +from ..multi_field import MultiField class ScalingOperator(EndomorphicOperator): @@ -65,7 +67,10 @@ class ScalingOperator(EndomorphicOperator): if fct == 1.: return x if fct == 0.: - return full(self.domain, 0.) + # Avoid a circular import by replicating `..sugar.full` + if isinstance(x.domain, (dict, MultiDomain)): + return MultiField.full(x.domain, 0.) + return Field.full(x.domain, 0.) MODES_WITH_ADJOINT = self.ADJOINT_TIMES | self.ADJOINT_INVERSE_TIMES MODES_WITH_INVERSE = self.INVERSE_TIMES | self.ADJOINT_INVERSE_TIMES diff --git a/nifty6/sugar.py b/nifty6/sugar.py index 7b0318246e35629706cd052108b3db2a72ee9975..c59764b2a60eb30e95dc08a80b8f4d24467c6f8a 100644 --- a/nifty6/sugar.py +++ b/nifty6/sugar.py @@ -25,13 +25,13 @@ from . import utilities from .domain_tuple import DomainTuple from .domains.power_space import PowerSpace from .field import Field -from .logger import logger from .multi_domain import MultiDomain from .multi_field import MultiField from .operators.block_diagonal_operator import BlockDiagonalOperator from .operators.diagonal_operator import DiagonalOperator from .operators.distributors import PowerDistributor from .operators.operator import Operator +from .operators.scaling_operator import ScalingOperator from .plot import Plot __all__ = ['PS_field', 'power_analyze', 'create_power_operator', @@ -327,6 +327,8 @@ def makeOp(input): ---------- input : None, Field or MultiField - if None, None is returned. + - if Field on scalar-domain, a ScalingOperator with the coefficient + given by the Field is returned. - if Field, a DiagonalOperator with the coefficients given by this Field is returned. - if MultiField, a BlockDiagonalOperator with entries given by this @@ -338,6 +340,8 @@ def makeOp(input): """ if input is None: return None + if input.domain is DomainTuple.scalar_domain(): + return ScalingOperator(input.domain, float(input.val)) if isinstance(input, Field): return DiagonalOperator(input) if isinstance(input, MultiField):