I would suggest having a separate module for cost functions and for gradients. Any cost function and gradient only need fwd and adj operators to be computed. So users can define their own cost functions and gradients. It would be nice to have def cost_gaussian(fwd,adj,...), def gradient_gaussian(fwd,adj,..),etc. I think the same concept is used in ODL.https://odlgroup.github.io/odl/ @nikitinvv