def test_06(self): lmbda = 1e-1 W = np.ones(self.S.shape[0:2] + (1, self.S.shape[2], 1)) opt = cbpdndl.ConvBPDNMaskDcplDictLearn.Options({'MaxMainIter' : 10}) try: b = cbpdndl.ConvBPDNMaskDcplDictLearn(self.D0, self.S, lmbda, W, opt=opt) b.solve() except Exception as e: print(e) assert(0)
def test_09(self): N = 16 Nc = 3 Nd = 5 M = 4 K = 3 D0 = np.random.randn(Nd, Nd, 1, M) S = np.random.randn(N, N, Nc, K) lmbda = 1e-1 W = np.ones((N, N, Nc, K, 1)) opt = cbpdndl.ConvBPDNMaskDcplDictLearn.Options({'MaxMainIter': 10}) try: b = cbpdndl.ConvBPDNMaskDcplDictLearn(D0, S, lmbda, W, opt=opt) b.solve() except Exception as e: print(e) assert(0)
def test_18(self): lmbda = 1e-1 W = np.ones(self.S.shape[0:2] + (1, self.S.shape[2], 1)) Nit = 10 opts = cbpdndl.ConvBPDNMaskDcplDictLearn.Options({ 'MaxMainIter': Nit, 'AccurateDFid': True, 'CBPDN': { 'RelaxParam': 1.8, 'AutoRho': { 'Enabled': False } }, 'CCMOD': { 'RelaxParam': 1.8, 'AutoRho': { 'Enabled': False } } }) bs = cbpdndl.ConvBPDNMaskDcplDictLearn(self.D0, self.S, lmbda, W, opt=opts, method='cns') Ds = bs.solve() optp = parcnsdl.ConvBPDNDictLearn_Consensus.Options({ 'MaxMainIter': Nit, 'CBPDN': { 'RelaxParam': 1.8 }, 'CCMOD': { 'RelaxParam': 1.8 } }) bp = parcnsdl.ConvBPDNMaskDcplDictLearn_Consensus(self.D0, self.S, lmbda, W, opt=optp, nproc=2) Dp = bp.solve() assert (np.linalg.norm(Ds - Dp) < 1e-7) assert (np.abs(bs.getitstat().ObjFun[-1] - bp.getitstat().ObjFun[-1]) < 1e-7)
sr1 = d1.reconstruct()[:-Npr, :-Npc].squeeze() + sl # Solve ConvBPDNMaskDcplDictLearn problem opt2 = cbpdndl.ConvBPDNMaskDcplDictLearn.Options({ 'Verbose': True, 'MaxMainIter': 200, 'AccurateDFid': True, 'CBPDN': { 'rho': 50.0 * lmbda + 0.5 }, 'CCMOD': { 'ZeroMean': True } }) Wr = np.reshape(W, W.shape[0:3] + (W.shape[3], 1)) d2 = cbpdndl.ConvBPDNMaskDcplDictLearn(D0, shpw, lmbda, Wr, opt2) D2 = d2.solve() # Reconstruct from ConvBPDNMaskDcplDictLearn solution sr2 = d2.reconstruct()[:-Npr, :-Npc].squeeze() + sl # Compare dictionaries fig1 = plot.figure(1, figsize=(14, 7)) plot.subplot(1, 2, 1) plot.imview(util.tiledict(D1.squeeze()), fgrf=fig1, title='Without Mask Decoupling') plot.subplot(1, 2, 2) plot.imview(util.tiledict(D2.squeeze()), fgrf=fig1, title='With Mask Decoupling')
def gengraphs(pth, nopyfftw): """ Generate call graph images when necessary. Parameter pth is the path to the directory in which images are to be created. Parameter nopyfftw is a flag indicating whether it is necessary to avoid using pyfftw. """ srcmodflt = '^sporco.admm' srcqnmflt = r'^((?!<locals>|__new|_name_nested).)*$' dstqnmflt = r'^((?!<locals>|__new|_name_nested).)*$' fnmsub = ('^sporco.admm.', '') grpflt = r'^[^\.]*.[^\.]*' lnksub = (r'^([^\.]*).(.*)', r'../../sporco.admm.\1.html#sporco.admm.\1.\2') fntsz = 9 fntfm = 'Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans' kwargs = {'fntsz': fntsz, 'fntfm': fntfm, 'rmsz': True} ct = jonga.CallTracer(srcmodflt=srcmodflt, srcqnmflt=srcqnmflt, dstqnmflt=dstqnmflt, fnmsub=fnmsub, grpflt=grpflt, lnksub=lnksub) # Make destination directory if it doesn't exist if not os.path.exists(pth): os.makedirs(pth, exist_ok=True) # Handle environment in which pyfftw is unavailable if nopyfftw: import numpy.fft as npfft import sporco.linalg as spl def empty(shape, dtype, order='C', n=None): return np.zeros(shape, dtype=dtype) spl.pyfftw_empty_aligned = empty def rfftn_empty(shape, axes, dtype, order='C', n=None): ashp = list(shape) raxis = axes[-1] ashp[raxis] = ashp[raxis] // 2 + 1 cdtype = spl.complex_dtype(dtype) return np.zeros(ashp, dtype=cdtype) spl.pyfftw_rfftn_empty_aligned = rfftn_empty spl.fftn = npfft.fftn spl.ifftn = npfft.ifftn spl.rfftn = npfft.rfftn spl.irfftn = npfft.irfftn import numpy as np np.random.seed(12345) #### bpdn module from sporco.admm import bpdn mdnm = 'sporco.admm.bpdn' D = np.random.randn(8, 16) s = np.random.randn(8, 1) lmbda = 0.1 ## BPDN class opt = bpdn.BPDN.Options({'Verbose': False, 'MaxMainIter': 1}) with CallGraph(ct, mdnm, pth, 'bpdn_init.svg', **kwargs): b = bpdn.BPDN(D, s, lmbda, opt) with CallGraph(ct, mdnm, pth, 'bpdn_solve.svg', **kwargs): b.solve() ## BPDNJoint class opt = bpdn.BPDNJoint.Options({'Verbose': False, 'MaxMainIter': 1}) mu = 0.01 with CallGraph(ct, mdnm, pth, 'bpdnjnt_init.svg', **kwargs): b = bpdn.BPDNJoint(D, s, lmbda, mu, opt) with CallGraph(ct, mdnm, pth, 'bpdnjnt_solve.svg', **kwargs): b.solve() ## ElasticNet class opt = bpdn.ElasticNet.Options({'Verbose': False, 'MaxMainIter': 1}) with CallGraph(ct, mdnm, pth, 'elnet_init.svg', **kwargs): b = bpdn.ElasticNet(D, s, lmbda, mu, opt) with CallGraph(ct, mdnm, pth, 'elnet_solve.svg', **kwargs): b.solve() # BPDNProjL1 class opt = bpdn.BPDNProjL1.Options({'Verbose': False, 'MaxMainIter': 1}) gamma = 2.0 with CallGraph(ct, mdnm, pth, 'bpdnprjl1_init.svg', **kwargs): b = bpdn.BPDNProjL1(D, s, gamma, opt) with CallGraph(ct, mdnm, pth, 'bpdnprjl1_solve.svg', **kwargs): b.solve() ## MinL1InL2Ball class opt = bpdn.MinL1InL2Ball.Options({'Verbose': False, 'MaxMainIter': 1}) epsilon = 1.0 with CallGraph(ct, mdnm, pth, 'bpdnml1l2_init.svg', **kwargs): b = bpdn.MinL1InL2Ball(D, s, epsilon, opt) with CallGraph(ct, mdnm, pth, 'bpdnml1l2_solve.svg', **kwargs): b.solve() #### cbpdn module from sporco.admm import cbpdn mdnm = 'sporco.admm.cbpdn' D = np.random.randn(4, 4, 16) s = np.random.randn(8, 8) lmbda = 0.1 ## ConvBPDN class opt = cbpdn.ConvBPDN.Options({'Verbose': False, 'MaxMainIter': 1}) with CallGraph(ct, mdnm, pth, 'cbpdn_init.svg', **kwargs): b = cbpdn.ConvBPDN(D, s, lmbda, opt) with CallGraph(ct, mdnm, pth, 'cbpdn_solve.svg', **kwargs): b.solve() ## ConvBPDNJoint class opt = cbpdn.ConvBPDNJoint.Options({'Verbose': False, 'MaxMainIter': 1}) mu = 0.01 with CallGraph(ct, mdnm, pth, 'cbpdnjnt_init.svg', **kwargs): b = cbpdn.ConvBPDNJoint(D, s, lmbda, mu, opt) with CallGraph(ct, mdnm, pth, 'cbpdnjnt_solve.svg', **kwargs): b.solve() ## ConvElasticNet class opt = cbpdn.ConvElasticNet.Options({'Verbose': False, 'MaxMainIter': 1}) with CallGraph(ct, mdnm, pth, 'celnet_init.svg', **kwargs): b = cbpdn.ConvElasticNet(D, s, lmbda, mu, opt) with CallGraph(ct, mdnm, pth, 'celnet_solve.svg', **kwargs): b.solve() ## ConvBPDNGradReg class opt = cbpdn.ConvBPDNGradReg.Options({'Verbose': False, 'MaxMainIter': 1}) with CallGraph(ct, mdnm, pth, 'cbpdngrd_init.svg', **kwargs): b = cbpdn.ConvBPDNGradReg(D, s, lmbda, mu, opt) with CallGraph(ct, mdnm, pth, 'cbpdngrd_solve.svg', **kwargs): b.solve() ## ConvBPDNProjL1 class opt = cbpdn.ConvBPDNProjL1.Options({'Verbose': False, 'MaxMainIter': 1}) gamma = 0.5 with CallGraph(ct, mdnm, pth, 'cbpdnprjl1_init.svg', **kwargs): b = cbpdn.ConvBPDNProjL1(D, s, gamma, opt) with CallGraph(ct, mdnm, pth, 'cbpdnprjl1_solve.svg', **kwargs): b.solve() ## ConvMinL1InL2Ball class opt = cbpdn.ConvMinL1InL2Ball.Options({'Verbose': False, 'MaxMainIter': 1}) epsilon = 0.5 with CallGraph(ct, mdnm, pth, 'cbpdnml1l2_init.svg', **kwargs): b = cbpdn.ConvMinL1InL2Ball(D, s, epsilon, opt) with CallGraph(ct, mdnm, pth, 'cbpdnml1l2_solve.svg', **kwargs): b.solve() ## ConvBPDNMaskDcpl class opt = cbpdn.ConvBPDNMaskDcpl.Options({'Verbose': False, 'MaxMainIter': 1}) W = np.ones(s.shape) with CallGraph(ct, mdnm, pth, 'cbpdnmd_init.svg', **kwargs): b = cbpdn.ConvBPDNMaskDcpl(D, s, lmbda, W, opt) with CallGraph(ct, mdnm, pth, 'cbpdnmd_solve.svg', **kwargs): b.solve() #### cbpdntv module from sporco.admm import cbpdntv mdnm = 'sporco.admm.cbpdntv' D = np.random.randn(4, 4, 16) s = np.random.randn(8, 8) lmbda = 0.1 mu = 0.01 ## ConvBPDNScalarTV class opt = cbpdntv.ConvBPDNScalarTV.Options({ 'Verbose': False, 'MaxMainIter': 1 }) with CallGraph(ct, mdnm, pth, 'cbpdnstv_init.svg', **kwargs): b = cbpdntv.ConvBPDNScalarTV(D, s, lmbda, mu, opt) with CallGraph(ct, mdnm, pth, 'cbpdnstv_solve.svg', **kwargs): b.solve() ## ConvBPDNVectorTV class opt = cbpdntv.ConvBPDNVectorTV.Options({ 'Verbose': False, 'MaxMainIter': 1 }) with CallGraph(ct, mdnm, pth, 'cbpdnvtv_init.svg', **kwargs): b = cbpdntv.ConvBPDNVectorTV(D, s, lmbda, mu, opt) with CallGraph(ct, mdnm, pth, 'cbpdnvtv_solve.svg', **kwargs): b.solve() ## ConvBPDNRecTV class opt = cbpdntv.ConvBPDNRecTV.Options({'Verbose': False, 'MaxMainIter': 1}) with CallGraph(ct, mdnm, pth, 'cbpdnrtv_init.svg', **kwargs): b = cbpdntv.ConvBPDNRecTV(D, s, lmbda, mu, opt) with CallGraph(ct, mdnm, pth, 'cbpdnrtv_solve.svg', **kwargs): b.solve() #### cmod module from sporco.admm import cmod mdnm = 'sporco.admm.cmod' X = np.random.randn(8, 16) S = np.random.randn(8, 16) ## CnstrMOD class opt = cmod.CnstrMOD.Options({'Verbose': False, 'MaxMainIter': 1}) with CallGraph(ct, mdnm, pth, 'cmod_init.svg', **kwargs): b = cmod.CnstrMOD(X, S, opt=opt) with CallGraph(ct, mdnm, pth, 'cmod_solve.svg', **kwargs): b.solve() #### ccmod module from sporco.admm import ccmod mdnm = 'sporco.admm.ccmod' X = np.random.randn(8, 8, 1, 2, 1) S = np.random.randn(8, 8, 2) dsz = (4, 4, 1) ## ConvCnstrMOD_IterSM class opt = ccmod.ConvCnstrMOD_IterSM.Options({ 'Verbose': False, 'MaxMainIter': 1 }) with CallGraph(ct, mdnm, pth, 'ccmodism_init.svg', **kwargs): b = ccmod.ConvCnstrMOD_IterSM(X, S, dsz=dsz, opt=opt) with CallGraph(ct, mdnm, pth, 'ccmodism_solve.svg', **kwargs): b.solve() ## ConvCnstrMOD_CG class opt = ccmod.ConvCnstrMOD_CG.Options({ 'Verbose': False, 'MaxMainIter': 1, 'CG': { 'MaxIter': 1 } }) with CallGraph(ct, mdnm, pth, 'ccmodcg_init.svg', **kwargs): b = ccmod.ConvCnstrMOD_CG(X, S, dsz=dsz, opt=opt) with CallGraph(ct, mdnm, pth, 'ccmodcg_solve.svg', **kwargs): b.solve() ## ConvCnstrMOD_Consensus class opt = ccmod.ConvCnstrMOD_Consensus.Options({ 'Verbose': False, 'MaxMainIter': 1 }) with CallGraph(ct, mdnm, pth, 'ccmodcnsns_init.svg', **kwargs): b = ccmod.ConvCnstrMOD_Consensus(X, S, dsz=dsz, opt=opt) with CallGraph(ct, mdnm, pth, 'ccmodcnsns_solve.svg', **kwargs): b.solve() #### ccmodmd module from sporco.admm import ccmodmd mdnm = 'sporco.admm.ccmodmd' X = np.random.randn(8, 8, 1, 2, 1) S = np.random.randn(8, 8, 2) W = np.array([1.0]) dsz = (4, 4, 1) ## ConvCnstrMODMaskDcpl_IterSM class opt = ccmodmd.ConvCnstrMODMaskDcpl_IterSM.Options({ 'Verbose': False, 'MaxMainIter': 1 }) with CallGraph(ct, mdnm, pth, 'ccmodmdism_init.svg', **kwargs): b = ccmodmd.ConvCnstrMODMaskDcpl_IterSM(X, S, W, dsz=dsz, opt=opt) with CallGraph(ct, mdnm, pth, 'ccmodmdism_solve.svg', **kwargs): b.solve() ## ConvCnstrMODMaskDcpl_CG class opt = ccmodmd.ConvCnstrMODMaskDcpl_CG.Options({ 'Verbose': False, 'MaxMainIter': 1, 'CG': { 'MaxIter': 1 } }) with CallGraph(ct, mdnm, pth, 'ccmodmdcg_init.svg', **kwargs): b = ccmodmd.ConvCnstrMODMaskDcpl_CG(X, S, W, dsz=dsz, opt=opt) with CallGraph(ct, mdnm, pth, 'ccmodmdcg_solve.svg', **kwargs): b.solve() ## ConvCnstrMODMaskDcpl_Consensus class opt = ccmodmd.ConvCnstrMODMaskDcpl_Consensus.Options({ 'Verbose': False, 'MaxMainIter': 1 }) with CallGraph(ct, mdnm, pth, 'ccmodmdcnsns_init.svg', **kwargs): b = ccmodmd.ConvCnstrMODMaskDcpl_Consensus(X, S, W, dsz=dsz, opt=opt) with CallGraph(ct, mdnm, pth, 'ccmodmdcnsns_solve.svg', **kwargs): b.solve() #### bpdndl module from sporco.admm import bpdndl mdnm = 'sporco.admm.bpdndl' D0 = np.random.randn(8, 8) S = np.random.randn(8, 16) lmbda = 0.1 ## BPDNDictLearn class opt = bpdndl.BPDNDictLearn.Options({ 'Verbose': False, 'MaxMainIter': 1, 'AccurateDFid': True }) with CallGraph(ct, mdnm, pth, 'bpdndl_init.svg', **kwargs): b = bpdndl.BPDNDictLearn(D0, S, lmbda, opt) with CallGraph(ct, mdnm, pth, 'bpdndl_solve.svg', **kwargs): b.solve() #### cbpdndl module from sporco.admm import cbpdndl mdnm = 'sporco.admm.cbpdndl' D0 = np.random.randn(4, 4, 16) s = np.random.randn(8, 8, 10) lmbda = 0.1 ## ConvBPDNDictLearn class opt = cbpdndl.ConvBPDNDictLearn.Options({ 'Verbose': False, 'MaxMainIter': 1, 'AccurateDFid': True }) with CallGraph(ct, mdnm, pth, 'cbpdndl_init.svg', **kwargs): b = cbpdndl.ConvBPDNDictLearn(D0, s, lmbda, opt) with CallGraph(ct, mdnm, pth, 'cbpdndl_solve.svg', **kwargs): b.solve() ## ConvBPDNMaskDcplDictLearn class W = np.array([1.0]) opt = cbpdndl.ConvBPDNMaskDcplDictLearn.Options({ 'Verbose': False, 'MaxMainIter': 1, 'AccurateDFid': True }) with CallGraph(ct, mdnm, pth, 'cbpdnmddl_init.svg', **kwargs): b = cbpdndl.ConvBPDNMaskDcplDictLearn(D0, s, lmbda, W, opt) with CallGraph(ct, mdnm, pth, 'cbpdnmddl_solve.svg', **kwargs): b.solve() #### tvl1 module from sporco.admm import tvl1 mdnm = 'sporco.admm.tvl1' s = np.random.randn(16, 16) lmbda = 0.1 ## TVL1Denoise class opt = tvl1.TVL1Denoise.Options({'Verbose': False, 'MaxMainIter': 1}) with CallGraph(ct, mdnm, pth, 'tvl1den_init.svg', **kwargs): b = tvl1.TVL1Denoise(s, lmbda, opt) with CallGraph(ct, mdnm, pth, 'tvl1den_solve.svg', **kwargs): b.solve() ## TVL1Deconv class opt = tvl1.TVL1Deconv.Options({'Verbose': False, 'MaxMainIter': 1}) h = np.random.randn(3, 3) with CallGraph(ct, mdnm, pth, 'tvl1dcn_init.svg', **kwargs): b = tvl1.TVL1Deconv(h, s, lmbda, opt) with CallGraph(ct, mdnm, pth, 'tvl1dcn_solve.svg', **kwargs): b.solve() #### tvl2 module from sporco.admm import tvl2 mdnm = 'sporco.admm.tvl2' s = np.random.randn(16, 16) lmbda = 0.1 ## TVL2Denoise class opt = tvl2.TVL2Denoise.Options({'Verbose': False, 'MaxMainIter': 1}) with CallGraph(ct, mdnm, pth, 'tvl2den_init.svg', **kwargs): b = tvl2.TVL2Denoise(s, lmbda, opt) with CallGraph(ct, mdnm, pth, 'tvl2den_solve.svg', **kwargs): b.solve() ## TVL2Deconv class opt = tvl2.TVL2Deconv.Options({'Verbose': False, 'MaxMainIter': 1}) h = np.random.randn(3, 3) with CallGraph(ct, mdnm, pth, 'tvl2dcn_init.svg', **kwargs): b = tvl2.TVL2Deconv(h, s, lmbda, opt) with CallGraph(ct, mdnm, pth, 'tvl2dcn_solve.svg', **kwargs): b.solve() srcmodflt = '^sporco.fista' fnmsub = ('^sporco.fista.', '') lnksub = (r'^([^\.]*).(.*)', r'../../sporco.fista.\1.html#sporco.fista.\1.\2') ct = jonga.CallTracer(srcmodflt=srcmodflt, srcqnmflt=srcqnmflt, dstqnmflt=dstqnmflt, fnmsub=fnmsub, grpflt=grpflt, lnksub=lnksub) #### fista.cbpdn module from sporco.fista import cbpdn mdnm = 'sporco.fista.cbpdn' D = np.random.randn(4, 4, 16) s = np.random.randn(8, 8) lmbda = 0.1 ## ConvBPDN class opt = cbpdn.ConvBPDN.Options({'Verbose': False, 'MaxMainIter': 1}) with CallGraph(ct, mdnm, pth, 'fista_cbpdn_init.svg', **kwargs): b = cbpdn.ConvBPDN(D, s, lmbda, opt) with CallGraph(ct, mdnm, pth, 'fista_cbpdn_solve.svg', **kwargs): b.solve() #### fista.ccmod module from sporco.fista import ccmod mdnm = 'sporco.fista.ccmod' X = np.random.randn(8, 8, 1, 2, 1) S = np.random.randn(8, 8, 2) dsz = (4, 4, 1) ## ConvCnstrMOD class opt = ccmod.ConvCnstrMOD.Options({'Verbose': False, 'MaxMainIter': 1}) with CallGraph(ct, mdnm, pth, 'ccmodfista_init.svg', **kwargs): b = ccmod.ConvCnstrMOD(X, S, dsz=dsz, opt=opt) with CallGraph(ct, mdnm, pth, 'ccmodfista_solve.svg', **kwargs): b.solve() ## ConvCnstrMODMaskDcpl class opt = ccmod.ConvCnstrMODMask.Options({'Verbose': False, 'MaxMainIter': 1}) with CallGraph(ct, mdnm, pth, 'ccmodmdfista_init.svg', **kwargs): b = ccmod.ConvCnstrMODMask(X, S, W, dsz=dsz, opt=opt) with CallGraph(ct, mdnm, pth, 'ccmodmdfista_solve.svg', **kwargs): b.solve()