Commit 78005d9f authored by Martin Reinecke's avatar Martin Reinecke
Browse files

add NullOperator

parent 1f9e0de6
......@@ -18,6 +18,7 @@
from __future__ import absolute_import, division, print_function
from ..compat import *
from ..operators.null_operator import NullOperator
from .model import Model
......@@ -43,7 +44,7 @@ class Constant(Model):
self._constant = constant
self._value = self._constant
self._jacobian = 0.
self._jacobian = NullOperator(position.domain, constand.domain)
def at(self, position):
return self.__class__(position, self._constant)
......@@ -30,7 +30,7 @@ class MultiField(object):
domain: MultiDomain
val: tuple of Fields
val: tuple containing Field or None entries
if not isinstance(domain, MultiDomain):
raise TypeError("domain must be of type MultiDomain")
......@@ -38,12 +38,12 @@ class MultiField(object):
raise TypeError("val must be a tuple")
if len(val) != len(domain):
raise ValueError("length mismatch")
for i, v in enumerate(val):
for d, v in zip(domain._domains, val):
if isinstance(v, Field):
if v._domain is not domain._domains[i]:
if v._domain is not d:
raise ValueError("domain mismatch")
elif v is not None:
raise TypeError("bad entry in val")
raise TypeError("bad entry in val (must be Field or None)")
self._domain = domain
self._val = val
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# GNU General Public License for more details.
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <>.
# Copyright(C) 2013-2018 Max-Planck-Society
# NIFTy is being developed at the Max-Planck-Institut fuer Astrophysik
# and financially supported by the Studienstiftung des deutschen Volkes.
from __future__ import absolute_import, division, print_function
from ..compat import *
from ..domain_tuple import DomainTuple
from ..field import Field
from ..multi.multi_field import MultiField
from ..operators.linear_operator import LinearOperator
class NullOperator(LinearOperator):
"""Operator corresponding to a matrix of all zeros.
domain : DomainTuple or MultiDomain
input domain
target : DomainTuple or MultiDomain
output domain
def __init__(self, domain, target):
from ..sugar import makeDomain
self._domain = makeDomain(domain)
self._target = makeDomain(target)
def _nullfield(dom):
if isinstance (dom, DomainTuple):
return Field.full(self._target, 0)
return MultiField(dom, (None,)*len(dom))
def apply(self, x, mode):
self._check_input(x, mode)
if mode == self.TIMES:
return self._nullfield(self._target)
return self._nullfield(self._domain)
def domain(self):
return self._domain
def target(self):
return self._target
def capability(self):
return self.TIMES | self.ADJOINT_TIMES
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment