summaryrefslogtreecommitdiffstats
path: root/Wrappers/Python
diff options
context:
space:
mode:
authorepapoutsellis <epapoutsellis@gmail.com>2019-04-14 20:05:34 +0100
committerepapoutsellis <epapoutsellis@gmail.com>2019-04-14 20:05:34 +0100
commit47424426aa54ac629c1cb70efcfe9ef3c23f9ddf (patch)
treea6ff034ca737378945afbba76bb5af133241ed96 /Wrappers/Python
parent8c6e2906397d9543756abf9b69088a94c980c216 (diff)
downloadframework-47424426aa54ac629c1cb70efcfe9ef3c23f9ddf.tar.gz
framework-47424426aa54ac629c1cb70efcfe9ef3c23f9ddf.tar.bz2
framework-47424426aa54ac629c1cb70efcfe9ef3c23f9ddf.tar.xz
framework-47424426aa54ac629c1cb70efcfe9ef3c23f9ddf.zip
change to ZeroFunction
Diffstat (limited to 'Wrappers/Python')
-rw-r--r--Wrappers/Python/ccpi/optimisation/functions/ZeroFunction.py61
1 files changed, 61 insertions, 0 deletions
diff --git a/Wrappers/Python/ccpi/optimisation/functions/ZeroFunction.py b/Wrappers/Python/ccpi/optimisation/functions/ZeroFunction.py
new file mode 100644
index 0000000..cce519a
--- /dev/null
+++ b/Wrappers/Python/ccpi/optimisation/functions/ZeroFunction.py
@@ -0,0 +1,61 @@
+# -*- coding: utf-8 -*-
+# This work is part of the Core Imaging Library developed by
+# Visual Analytics and Imaging System Group of the Science Technology
+# Facilities Council, STFC
+
+# Copyright 2018-2019 Evangelos Papoutsellis and Edoardo Pasca
+
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+
+# http://www.apache.org/licenses/LICENSE-2.0
+
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+from ccpi.optimisation.functions import Function
+from ccpi.framework import BlockDataContainer
+
+class ZeroFunction(Function):
+
+ ''' ZeroFunction: f(x) = 0
+
+
+ '''
+
+ def __init__(self):
+ super(ZeroFunction, self).__init__()
+
+ def __call__(self,x):
+ return 0
+
+ def convex_conjugate(self, x):
+
+ ''' This is the support function sup <x, x^{*}> which in fact is the
+ indicator function for the set = {0}
+ So 0 if x=0, or inf if x neq 0
+ '''
+
+ if x.shape[0]==1:
+ return x.maximum(0).sum()
+ else:
+ if isinstance(x, BlockDataContainer):
+ return x.get_item(0).maximum(0).sum() + x.get_item(1).maximum(0).sum()
+ else:
+ return x.maximum(0).sum() + x.maximum(0).sum()
+
+ def proximal(self, x, tau, out=None):
+ if out is None:
+ return x.copy()
+ else:
+ out.fill(x)
+
+ def proximal_conjugate(self, x, tau, out = None):
+ if out is None:
+ return 0
+ else:
+ return 0