Source code for sporco.dictlrn.common

# -*- coding: utf-8 -*-
# Copyright (C) 2018-2020 by Brendt Wohlberg <brendt@ieee.org>
# All rights reserved. BSD 3-clause License.
# This file is part of the SPORCO package. Details of the copyright
# and user license can be found in the 'LICENSE.txt' file distributed
# with the package.

"""Common infrastructure for some of the dictionary learning modules"""

from __future__ import print_function, absolute_import

from sporco.util import u


__author__ = """Brendt Wohlberg <brendt@ieee.org>"""



[docs] def evlmap(accdfid): """Return ``evlmap`` argument for ``.IterStatsConfig`` initialiser. """ if accdfid: evl = {'ObjFun': 'ObjFun', 'DFid': 'DFid', 'RegL1': 'RegL1'} else: evl = {} return evl
[docs] def isxmap(xmethod, opt): """Return ``isxmap`` argument for ``.IterStatsConfig`` initialiser. """ if xmethod == 'admm': isx = {'XPrRsdl': 'PrimalRsdl', 'XDlRsdl': 'DualRsdl', 'XRho': 'Rho'} else: isx = {'X_F_Btrack': 'F_Btrack', 'X_Q_Btrack': 'Q_Btrack', 'X_ItBt': 'IterBTrack', 'X_L': 'L', 'X_Rsdl': 'Rsdl'} if not opt['AccurateDFid']: isx.update(evlmap(True)) return isx
[docs] def isdmap(dmethod): """Return ``isdmap`` argument for ``.IterStatsConfig`` initialiser. """ if dmethod == 'pgm': isd = {'Cnstr': 'Cnstr', 'D_F_Btrack': 'F_Btrack', 'D_Q_Btrack': 'Q_Btrack', 'D_ItBt': 'IterBTrack', 'D_L': 'L', 'D_Rsdl': 'Rsdl'} else: isd = {'Cnstr': 'Cnstr', 'DPrRsdl': 'PrimalRsdl', 'DDlRsdl': 'DualRsdl', 'DRho': 'Rho'} return isd
[docs] def isfld(xmethod, dmethod, opt): """Return ``isfld`` argument for ``.IterStatsConfig`` initialiser. """ fld = ['Iter', 'ObjFun', 'DFid', 'RegL1', 'Cnstr'] if xmethod == 'admm': fld.extend(['XPrRsdl', 'XDlRsdl', 'XRho']) else: if opt['CBPDN', 'Backtrack'] is not None: fld.extend(['X_F_Btrack', 'X_Q_Btrack', 'X_ItBt', 'X_L', 'X_Rsdl']) else: fld.extend(['X_L', 'X_Rsdl']) if dmethod != 'pgm': fld.extend(['DPrRsdl', 'DDlRsdl', 'DRho']) else: if opt['CCMOD', 'Backtrack'] is not None: fld.extend(['D_F_Btrack', 'D_Q_Btrack', 'D_ItBt', 'D_L', 'D_Rsdl']) else: fld.extend(['D_L', 'D_Rsdl']) fld.append('Time') return fld
[docs] def hdrtxt(xmethod, dmethod, opt): """Return ``hdrtxt`` argument for ``.IterStatsConfig`` initialiser. """ txt = ['Itn', 'Fnc', 'DFid', u('ℓ1'), 'Cnstr'] if xmethod == 'admm': txt.extend(['r_X', 's_X', u('ρ_X')]) else: if opt['CBPDN', 'Backtrack'] is not None: txt.extend(['F_X', 'Q_X', 'It_X', 'L_X']) else: txt.append('L_X') if dmethod != 'pgm': txt.extend(['r_D', 's_D', u('ρ_D')]) else: if opt['CCMOD', 'Backtrack'] is not None: txt.extend(['F_D', 'Q_D', 'It_D', 'L_D']) else: txt.append('L_D') return txt
[docs] def hdrmap(xmethod, dmethod, opt): """Return ``hdrmap`` argument for ``.IterStatsConfig`` initialiser. """ hdr = {'Itn': 'Iter', 'Fnc': 'ObjFun', 'DFid': 'DFid', u('ℓ1'): 'RegL1', 'Cnstr': 'Cnstr'} if xmethod == 'admm': hdr.update({'r_X': 'XPrRsdl', 's_X': 'XDlRsdl', u('ρ_X'): 'XRho'}) else: if opt['CBPDN', 'Backtrack'] is not None: hdr.update({'F_X': 'X_F_Btrack', 'Q_X': 'X_Q_Btrack', 'It_X': 'X_ItBt', 'L_X': 'X_L'}) else: hdr.update({'L_X': 'X_L'}) if dmethod != 'pgm': hdr.update({'r_D': 'DPrRsdl', 's_D': 'DDlRsdl', u('ρ_D'): 'DRho'}) else: if opt['CCMOD', 'Backtrack'] is not None: hdr.update({'F_D': 'D_F_Btrack', 'Q_D': 'D_Q_Btrack', 'It_D': 'D_ItBt', 'L_D': 'D_L'}) else: hdr.update({'L_D': 'D_L'}) return hdr