# This file was automatically generated by SWIG (https://www.swig.org).
# Version 4.3.1
#
# Do not make changes to this file unless you know what you are doing - modify
# the SWIG interface file instead.


import collections

from sys import version_info as _version_info
if _version_info < (3, 7, 0):
    raise RuntimeError("Python 3.7 or later required")

from . import _ITKCommonPython


from . import _ITKOptimizersv4Python



from sys import version_info as _swig_python_version_info
# Import the low-level C/C++ module
if __package__ or "." in __name__:
    from . import _itkLBFGS2Optimizerv4Python
else:
    import _itkLBFGS2Optimizerv4Python

try:
    import builtins as __builtin__
except ImportError:
    import __builtin__

def _swig_repr(self):
    try:
        strthis = "proxy of " + self.this.__repr__()
    except __builtin__.Exception:
        strthis = ""
    return "<%s.%s; %s >" % (self.__class__.__module__, self.__class__.__name__, strthis,)


def _swig_setattr_nondynamic_instance_variable(set):
    def set_instance_attr(self, name, value):
        if name == "this":
            set(self, name, value)
        elif name == "thisown":
            self.this.own(value)
        elif hasattr(self, name) and isinstance(getattr(type(self), name), property):
            set(self, name, value)
        else:
            raise AttributeError("You cannot add instance attributes to %s" % self)
    return set_instance_attr


def _swig_setattr_nondynamic_class_variable(set):
    def set_class_attr(cls, name, value):
        if hasattr(cls, name) and not isinstance(getattr(cls, name), property):
            set(cls, name, value)
        else:
            raise AttributeError("You cannot add class attributes to %s" % cls)
    return set_class_attr


def _swig_add_metaclass(metaclass):
    """Class decorator for adding a metaclass to a SWIG wrapped class - a slimmed down version of six.add_metaclass"""
    def wrapper(cls):
        return metaclass(cls.__name__, cls.__bases__, cls.__dict__.copy())
    return wrapper


class _SwigNonDynamicMeta(type):
    """Meta class to enforce nondynamic attributes (no new attributes) for a class"""
    __setattr__ = _swig_setattr_nondynamic_class_variable(type.__setattr__)


if _swig_python_version_info[0:2] >= (3, 3):
    import collections.abc
else:
    import collections

import itk.ITKCommonBasePython
import itk.itkMatrixPython
import itk.vnl_matrixPython
import itk.stdcomplexPython
import itk.pyBasePython
import itk.vnl_vectorPython
import itk.vnl_matrix_fixedPython
import itk.itkCovariantVectorPython
import itk.itkFixedArrayPython
import itk.vnl_vector_refPython
import itk.itkVectorPython
import itk.itkPointPython
import itk.itkGradientDescentOptimizerv4Python
import itk.itkIndexPython
import itk.itkSizePython
import itk.itkOffsetPython
import itk.itkGradientDescentOptimizerBasev4Python
import itk.itkArrayPython
import itk.itkObjectToObjectOptimizerBasePython
import itk.itkOptimizerParametersPython
import itk.itkOptimizerParameterScalesEstimatorPython
import itk.itkObjectToObjectMetricBasePython
import itk.itkSingleValuedCostFunctionv4Python
import itk.itkCostFunctionPython
class itkLBFGS2Optimizerv4Enums(object):
    r"""Proxy of C++ itkLBFGS2Optimizerv4Enums class."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr
    LineSearchMethod_LINESEARCH_DEFAULT = _itkLBFGS2Optimizerv4Python.itkLBFGS2Optimizerv4Enums_LineSearchMethod_LINESEARCH_DEFAULT
    
    LineSearchMethod_LINESEARCH_MORETHUENTE = _itkLBFGS2Optimizerv4Python.itkLBFGS2Optimizerv4Enums_LineSearchMethod_LINESEARCH_MORETHUENTE
    
    LineSearchMethod_LINESEARCH_BACKTRACKING_ARMIJO = _itkLBFGS2Optimizerv4Python.itkLBFGS2Optimizerv4Enums_LineSearchMethod_LINESEARCH_BACKTRACKING_ARMIJO
    
    LineSearchMethod_LINESEARCH_BACKTRACKING = _itkLBFGS2Optimizerv4Python.itkLBFGS2Optimizerv4Enums_LineSearchMethod_LINESEARCH_BACKTRACKING
    
    LineSearchMethod_LINESEARCH_BACKTRACKING_WOLFE = _itkLBFGS2Optimizerv4Python.itkLBFGS2Optimizerv4Enums_LineSearchMethod_LINESEARCH_BACKTRACKING_WOLFE
    
    LineSearchMethod_LINESEARCH_BACKTRACKING_STRONG_WOLFE = _itkLBFGS2Optimizerv4Python.itkLBFGS2Optimizerv4Enums_LineSearchMethod_LINESEARCH_BACKTRACKING_STRONG_WOLFE
    

    def __init__(self, *args):
        r"""
        __init__(self) -> itkLBFGS2Optimizerv4Enums
        __init__(self, arg0) -> itkLBFGS2Optimizerv4Enums

        Parameters
        ----------
        arg0: itkLBFGS2Optimizerv4Enums const &

        """
        _itkLBFGS2Optimizerv4Python.itkLBFGS2Optimizerv4Enums_swiginit(self, _itkLBFGS2Optimizerv4Python.new_itkLBFGS2Optimizerv4Enums(*args))
    __swig_destroy__ = _itkLBFGS2Optimizerv4Python.delete_itkLBFGS2Optimizerv4Enums

# Register itkLBFGS2Optimizerv4Enums in _itkLBFGS2Optimizerv4Python:
_itkLBFGS2Optimizerv4Python.itkLBFGS2Optimizerv4Enums_swigregister(itkLBFGS2Optimizerv4Enums)

def itkLBFGS2Optimizerv4TemplateD_New():
    return itkLBFGS2Optimizerv4TemplateD.New()

class itkLBFGS2Optimizerv4TemplateD(itk.itkGradientDescentOptimizerv4Python.itkGradientDescentOptimizerv4TemplateD):
    r"""Proxy of C++ itkLBFGS2Optimizerv4TemplateD class."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def __New_orig__():
        r"""__New_orig__() -> itkLBFGS2Optimizerv4TemplateD_Pointer"""
        return _itkLBFGS2Optimizerv4Python.itkLBFGS2Optimizerv4TemplateD___New_orig__()

    def Clone(self):
        r"""Clone(self) -> itkLBFGS2Optimizerv4TemplateD_Pointer"""
        return _itkLBFGS2Optimizerv4Python.itkLBFGS2Optimizerv4TemplateD_Clone(self)

    def StartOptimization(self, doOnlyInitialization=False):
        r"""
        StartOptimization(self, doOnlyInitialization=False)

        Parameters
        ----------
        doOnlyInitialization: bool

        """
        return _itkLBFGS2Optimizerv4Python.itkLBFGS2Optimizerv4TemplateD_StartOptimization(self, doOnlyInitialization)

    def SetHessianApproximationAccuracy(self, m):
        r"""
        SetHessianApproximationAccuracy(self, m)

        Parameters
        ----------
        m: int

        """
        return _itkLBFGS2Optimizerv4Python.itkLBFGS2Optimizerv4TemplateD_SetHessianApproximationAccuracy(self, m)

    def GetHessianApproximationAccuracy(self):
        r"""GetHessianApproximationAccuracy(self) -> int"""
        return _itkLBFGS2Optimizerv4Python.itkLBFGS2Optimizerv4TemplateD_GetHessianApproximationAccuracy(self)

    def SetSolutionAccuracy(self, epsilon):
        r"""
        SetSolutionAccuracy(self, epsilon)

        Parameters
        ----------
        epsilon: double

        """
        return _itkLBFGS2Optimizerv4Python.itkLBFGS2Optimizerv4TemplateD_SetSolutionAccuracy(self, epsilon)

    def GetSolutionAccuracy(self):
        r"""GetSolutionAccuracy(self) -> double"""
        return _itkLBFGS2Optimizerv4Python.itkLBFGS2Optimizerv4TemplateD_GetSolutionAccuracy(self)

    def SetDeltaConvergenceDistance(self, nPast):
        r"""
        SetDeltaConvergenceDistance(self, nPast)

        Parameters
        ----------
        nPast: int

        """
        return _itkLBFGS2Optimizerv4Python.itkLBFGS2Optimizerv4TemplateD_SetDeltaConvergenceDistance(self, nPast)

    def GetDeltaConvergenceDistance(self):
        r"""GetDeltaConvergenceDistance(self) -> int"""
        return _itkLBFGS2Optimizerv4Python.itkLBFGS2Optimizerv4TemplateD_GetDeltaConvergenceDistance(self)

    def SetDeltaConvergenceTolerance(self, tol):
        r"""
        SetDeltaConvergenceTolerance(self, tol)

        Parameters
        ----------
        tol: double

        """
        return _itkLBFGS2Optimizerv4Python.itkLBFGS2Optimizerv4TemplateD_SetDeltaConvergenceTolerance(self, tol)

    def GetDeltaConvergenceTolerance(self):
        r"""GetDeltaConvergenceTolerance(self) -> double"""
        return _itkLBFGS2Optimizerv4Python.itkLBFGS2Optimizerv4TemplateD_GetDeltaConvergenceTolerance(self)

    def SetMaximumIterations(self, maxIterations):
        r"""
        SetMaximumIterations(self, maxIterations)

        Parameters
        ----------
        maxIterations: int

        """
        return _itkLBFGS2Optimizerv4Python.itkLBFGS2Optimizerv4TemplateD_SetMaximumIterations(self, maxIterations)

    def GetMaximumIterations(self):
        r"""GetMaximumIterations(self) -> int"""
        return _itkLBFGS2Optimizerv4Python.itkLBFGS2Optimizerv4TemplateD_GetMaximumIterations(self)

    def SetNumberOfIterations(self, _arg):
        r"""
        SetNumberOfIterations(self, _arg)

        Parameters
        ----------
        _arg: unsigned long const

        """
        return _itkLBFGS2Optimizerv4Python.itkLBFGS2Optimizerv4TemplateD_SetNumberOfIterations(self, _arg)

    def SetLineSearch(self, linesearch):
        r"""
        SetLineSearch(self, linesearch)

        Parameters
        ----------
        linesearch: itkLBFGS2Optimizerv4Enums::LineSearchMethod const &

        """
        return _itkLBFGS2Optimizerv4Python.itkLBFGS2Optimizerv4TemplateD_SetLineSearch(self, linesearch)

    def GetLineSearch(self):
        r"""GetLineSearch(self) -> itkLBFGS2Optimizerv4Enums::LineSearchMethod"""
        return _itkLBFGS2Optimizerv4Python.itkLBFGS2Optimizerv4TemplateD_GetLineSearch(self)

    def SetMaximumLineSearchEvaluations(self, n):
        r"""
        SetMaximumLineSearchEvaluations(self, n)

        Parameters
        ----------
        n: int

        """
        return _itkLBFGS2Optimizerv4Python.itkLBFGS2Optimizerv4TemplateD_SetMaximumLineSearchEvaluations(self, n)

    def GetMaximumLineSearchEvaluations(self):
        r"""GetMaximumLineSearchEvaluations(self) -> int"""
        return _itkLBFGS2Optimizerv4Python.itkLBFGS2Optimizerv4TemplateD_GetMaximumLineSearchEvaluations(self)

    def SetMinimumLineSearchStep(self, step):
        r"""
        SetMinimumLineSearchStep(self, step)

        Parameters
        ----------
        step: double

        """
        return _itkLBFGS2Optimizerv4Python.itkLBFGS2Optimizerv4TemplateD_SetMinimumLineSearchStep(self, step)

    def GetMinimumLineSearchStep(self):
        r"""GetMinimumLineSearchStep(self) -> double"""
        return _itkLBFGS2Optimizerv4Python.itkLBFGS2Optimizerv4TemplateD_GetMinimumLineSearchStep(self)

    def SetMaximumLineSearchStep(self, step):
        r"""
        SetMaximumLineSearchStep(self, step)

        Parameters
        ----------
        step: double

        """
        return _itkLBFGS2Optimizerv4Python.itkLBFGS2Optimizerv4TemplateD_SetMaximumLineSearchStep(self, step)

    def GetMaximumLineSearchStep(self):
        r"""GetMaximumLineSearchStep(self) -> double"""
        return _itkLBFGS2Optimizerv4Python.itkLBFGS2Optimizerv4TemplateD_GetMaximumLineSearchStep(self)

    def SetLineSearchAccuracy(self, ftol):
        r"""
        SetLineSearchAccuracy(self, ftol)

        Parameters
        ----------
        ftol: double

        """
        return _itkLBFGS2Optimizerv4Python.itkLBFGS2Optimizerv4TemplateD_SetLineSearchAccuracy(self, ftol)

    def GetLineSearchAccuracy(self):
        r"""GetLineSearchAccuracy(self) -> double"""
        return _itkLBFGS2Optimizerv4Python.itkLBFGS2Optimizerv4TemplateD_GetLineSearchAccuracy(self)

    def SetWolfeCoefficient(self, wc):
        r"""
        SetWolfeCoefficient(self, wc)

        Parameters
        ----------
        wc: double

        """
        return _itkLBFGS2Optimizerv4Python.itkLBFGS2Optimizerv4TemplateD_SetWolfeCoefficient(self, wc)

    def GetWolfeCoefficient(self):
        r"""GetWolfeCoefficient(self) -> double"""
        return _itkLBFGS2Optimizerv4Python.itkLBFGS2Optimizerv4TemplateD_GetWolfeCoefficient(self)

    def SetLineSearchGradientAccuracy(self, gtol):
        r"""
        SetLineSearchGradientAccuracy(self, gtol)

        Parameters
        ----------
        gtol: double

        """
        return _itkLBFGS2Optimizerv4Python.itkLBFGS2Optimizerv4TemplateD_SetLineSearchGradientAccuracy(self, gtol)

    def GetLineSearchGradientAccuracy(self):
        r"""GetLineSearchGradientAccuracy(self) -> double"""
        return _itkLBFGS2Optimizerv4Python.itkLBFGS2Optimizerv4TemplateD_GetLineSearchGradientAccuracy(self)

    def SetMachinePrecisionTolerance(self, xtol):
        r"""
        SetMachinePrecisionTolerance(self, xtol)

        Parameters
        ----------
        xtol: double

        """
        return _itkLBFGS2Optimizerv4Python.itkLBFGS2Optimizerv4TemplateD_SetMachinePrecisionTolerance(self, xtol)

    def GetMachinePrecisionTolerance(self):
        r"""GetMachinePrecisionTolerance(self) -> double"""
        return _itkLBFGS2Optimizerv4Python.itkLBFGS2Optimizerv4TemplateD_GetMachinePrecisionTolerance(self)

    def SetOrthantwiseCoefficient(self, orthant_c):
        r"""
        SetOrthantwiseCoefficient(self, orthant_c)

        Parameters
        ----------
        orthant_c: double

        """
        return _itkLBFGS2Optimizerv4Python.itkLBFGS2Optimizerv4TemplateD_SetOrthantwiseCoefficient(self, orthant_c)

    def GetOrthantwiseCoefficient(self):
        r"""GetOrthantwiseCoefficient(self) -> double"""
        return _itkLBFGS2Optimizerv4Python.itkLBFGS2Optimizerv4TemplateD_GetOrthantwiseCoefficient(self)

    def SetOrthantwiseStart(self, start):
        r"""
        SetOrthantwiseStart(self, start)

        Parameters
        ----------
        start: int

        """
        return _itkLBFGS2Optimizerv4Python.itkLBFGS2Optimizerv4TemplateD_SetOrthantwiseStart(self, start)

    def GetOrthantwiseStart(self):
        r"""GetOrthantwiseStart(self) -> int"""
        return _itkLBFGS2Optimizerv4Python.itkLBFGS2Optimizerv4TemplateD_GetOrthantwiseStart(self)

    def SetOrthantwiseEnd(self, end):
        r"""
        SetOrthantwiseEnd(self, end)

        Parameters
        ----------
        end: int

        """
        return _itkLBFGS2Optimizerv4Python.itkLBFGS2Optimizerv4TemplateD_SetOrthantwiseEnd(self, end)

    def GetOrthantwiseEnd(self):
        r"""GetOrthantwiseEnd(self) -> int"""
        return _itkLBFGS2Optimizerv4Python.itkLBFGS2Optimizerv4TemplateD_GetOrthantwiseEnd(self)

    def GetCurrentParameterNorm(self):
        r"""GetCurrentParameterNorm(self) -> double"""
        return _itkLBFGS2Optimizerv4Python.itkLBFGS2Optimizerv4TemplateD_GetCurrentParameterNorm(self)

    def GetCurrentGradientNorm(self):
        r"""GetCurrentGradientNorm(self) -> double"""
        return _itkLBFGS2Optimizerv4Python.itkLBFGS2Optimizerv4TemplateD_GetCurrentGradientNorm(self)

    def GetCurrentStepSize(self):
        r"""GetCurrentStepSize(self) -> double"""
        return _itkLBFGS2Optimizerv4Python.itkLBFGS2Optimizerv4TemplateD_GetCurrentStepSize(self)

    def GetCurrentNumberOfEvaluations(self):
        r"""GetCurrentNumberOfEvaluations(self) -> double"""
        return _itkLBFGS2Optimizerv4Python.itkLBFGS2Optimizerv4TemplateD_GetCurrentNumberOfEvaluations(self)

    def SetEstimateScalesAtEachIteration(self, _arg):
        r"""
        SetEstimateScalesAtEachIteration(self, _arg)

        Parameters
        ----------
        _arg: bool

        """
        return _itkLBFGS2Optimizerv4Python.itkLBFGS2Optimizerv4TemplateD_SetEstimateScalesAtEachIteration(self, _arg)

    def GetEstimateScalesAtEachIteration(self):
        r"""GetEstimateScalesAtEachIteration(self) -> bool const &"""
        return _itkLBFGS2Optimizerv4Python.itkLBFGS2Optimizerv4TemplateD_GetEstimateScalesAtEachIteration(self)

    def EstimateScalesAtEachIterationOn(self):
        r"""EstimateScalesAtEachIterationOn(self)"""
        return _itkLBFGS2Optimizerv4Python.itkLBFGS2Optimizerv4TemplateD_EstimateScalesAtEachIterationOn(self)

    def EstimateScalesAtEachIterationOff(self):
        r"""EstimateScalesAtEachIterationOff(self)"""
        return _itkLBFGS2Optimizerv4Python.itkLBFGS2Optimizerv4TemplateD_EstimateScalesAtEachIterationOff(self)
    __swig_destroy__ = _itkLBFGS2Optimizerv4Python.delete_itkLBFGS2Optimizerv4TemplateD

    @staticmethod
    def cast(obj):
        r"""
        cast(obj) -> itkLBFGS2Optimizerv4TemplateD

        Parameters
        ----------
        obj: itkLightObject *

        """
        return _itkLBFGS2Optimizerv4Python.itkLBFGS2Optimizerv4TemplateD_cast(obj)

    def New(*args, **kargs):
        """New() -> itkLBFGS2Optimizerv4TemplateD

        Create a new object of the class itkLBFGS2Optimizerv4TemplateD and set the input and the parameters if some
        named or non-named arguments are passed to that method.

        New() tries to assign all the non named parameters to the input of the new objects - the
        first non named parameter in the first input, etc.

        The named parameters are used by calling the method with the same name prefixed by 'Set'.

        Ex:

          itkLBFGS2Optimizerv4TemplateD.New(reader, threshold=10)

        is (most of the time) equivalent to:

          obj = itkLBFGS2Optimizerv4TemplateD.New()
          obj.SetInput(0, reader.GetOutput())
          obj.SetThreshold(10)
        """
        obj = itkLBFGS2Optimizerv4TemplateD.__New_orig__()
        from itk.support import template_class
        template_class.New(obj, *args, **kargs)
        return obj
    New = staticmethod(New)


# Register itkLBFGS2Optimizerv4TemplateD in _itkLBFGS2Optimizerv4Python:
_itkLBFGS2Optimizerv4Python.itkLBFGS2Optimizerv4TemplateD_swigregister(itkLBFGS2Optimizerv4TemplateD)
class itkLBFGS2Optimizerv4TemplateD_ConstPointer(object):
    r"""Proxy of C++ itkLBFGS2Optimizerv4TemplateD_ConstPointer class."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr

    def __init__(self, *args):
        r"""
        __init__(self) -> itkLBFGS2Optimizerv4TemplateD_ConstPointer
        __init__(self, p) -> itkLBFGS2Optimizerv4TemplateD_ConstPointer

        Parameters
        ----------
        p: itkLBFGS2Optimizerv4TemplateD_ConstPointer const &

        __init__(self, p) -> itkLBFGS2Optimizerv4TemplateD_ConstPointer

        Parameters
        ----------
        p: itkLBFGS2Optimizerv4TemplateD const *

        """
        _itkLBFGS2Optimizerv4Python.itkLBFGS2Optimizerv4TemplateD_ConstPointer_swiginit(self, _itkLBFGS2Optimizerv4Python.new_itkLBFGS2Optimizerv4TemplateD_ConstPointer(*args))
    __swig_destroy__ = _itkLBFGS2Optimizerv4Python.delete_itkLBFGS2Optimizerv4TemplateD_ConstPointer

    def __deref__(self):
        r"""__deref__(self) -> itkLBFGS2Optimizerv4TemplateD"""
        return _itkLBFGS2Optimizerv4Python.itkLBFGS2Optimizerv4TemplateD_ConstPointer___deref__(self)

    def __ref__(self):
        r"""__ref__(self) -> itkLBFGS2Optimizerv4TemplateD"""
        return _itkLBFGS2Optimizerv4Python.itkLBFGS2Optimizerv4TemplateD_ConstPointer___ref__(self)

    def IsNotNull(self):
        r"""IsNotNull(self) -> bool"""
        return _itkLBFGS2Optimizerv4Python.itkLBFGS2Optimizerv4TemplateD_ConstPointer_IsNotNull(self)

    def IsNull(self):
        r"""IsNull(self) -> bool"""
        return _itkLBFGS2Optimizerv4Python.itkLBFGS2Optimizerv4TemplateD_ConstPointer_IsNull(self)

    def GetPointer(self):
        r"""GetPointer(self) -> itkLBFGS2Optimizerv4TemplateD"""
        return _itkLBFGS2Optimizerv4Python.itkLBFGS2Optimizerv4TemplateD_ConstPointer_GetPointer(self)

    def get(self):
        r"""get(self) -> itkLBFGS2Optimizerv4TemplateD"""
        return _itkLBFGS2Optimizerv4Python.itkLBFGS2Optimizerv4TemplateD_ConstPointer_get(self)

    def Print(self, os):
        r"""
        Print(self, os) -> itkLBFGS2Optimizerv4TemplateD

        Parameters
        ----------
        os: std::basic_ostream< char,std::char_traits< char > > &

        """
        return _itkLBFGS2Optimizerv4Python.itkLBFGS2Optimizerv4TemplateD_ConstPointer_Print(self, os)

    def Swap(self, other):
        r"""
        Swap(self, other)

        Parameters
        ----------
        other: itkLBFGS2Optimizerv4TemplateD_ConstPointer &

        """
        return _itkLBFGS2Optimizerv4Python.itkLBFGS2Optimizerv4TemplateD_ConstPointer_Swap(self, other)

    def Clone(self):
        r"""Clone(self) -> itkLBFGS2Optimizerv4TemplateD_Pointer"""
        return _itkLBFGS2Optimizerv4Python.itkLBFGS2Optimizerv4TemplateD_ConstPointer_Clone(self)

    def GetHessianApproximationAccuracy(self):
        r"""GetHessianApproximationAccuracy(self) -> int"""
        return _itkLBFGS2Optimizerv4Python.itkLBFGS2Optimizerv4TemplateD_ConstPointer_GetHessianApproximationAccuracy(self)

    def GetSolutionAccuracy(self):
        r"""GetSolutionAccuracy(self) -> double"""
        return _itkLBFGS2Optimizerv4Python.itkLBFGS2Optimizerv4TemplateD_ConstPointer_GetSolutionAccuracy(self)

    def GetDeltaConvergenceDistance(self):
        r"""GetDeltaConvergenceDistance(self) -> int"""
        return _itkLBFGS2Optimizerv4Python.itkLBFGS2Optimizerv4TemplateD_ConstPointer_GetDeltaConvergenceDistance(self)

    def GetDeltaConvergenceTolerance(self):
        r"""GetDeltaConvergenceTolerance(self) -> double"""
        return _itkLBFGS2Optimizerv4Python.itkLBFGS2Optimizerv4TemplateD_ConstPointer_GetDeltaConvergenceTolerance(self)

    def GetMaximumIterations(self):
        r"""GetMaximumIterations(self) -> int"""
        return _itkLBFGS2Optimizerv4Python.itkLBFGS2Optimizerv4TemplateD_ConstPointer_GetMaximumIterations(self)

    def GetLineSearch(self):
        r"""GetLineSearch(self) -> itkLBFGS2Optimizerv4Enums::LineSearchMethod"""
        return _itkLBFGS2Optimizerv4Python.itkLBFGS2Optimizerv4TemplateD_ConstPointer_GetLineSearch(self)

    def GetMaximumLineSearchEvaluations(self):
        r"""GetMaximumLineSearchEvaluations(self) -> int"""
        return _itkLBFGS2Optimizerv4Python.itkLBFGS2Optimizerv4TemplateD_ConstPointer_GetMaximumLineSearchEvaluations(self)

    def GetMinimumLineSearchStep(self):
        r"""GetMinimumLineSearchStep(self) -> double"""
        return _itkLBFGS2Optimizerv4Python.itkLBFGS2Optimizerv4TemplateD_ConstPointer_GetMinimumLineSearchStep(self)

    def GetMaximumLineSearchStep(self):
        r"""GetMaximumLineSearchStep(self) -> double"""
        return _itkLBFGS2Optimizerv4Python.itkLBFGS2Optimizerv4TemplateD_ConstPointer_GetMaximumLineSearchStep(self)

    def GetLineSearchAccuracy(self):
        r"""GetLineSearchAccuracy(self) -> double"""
        return _itkLBFGS2Optimizerv4Python.itkLBFGS2Optimizerv4TemplateD_ConstPointer_GetLineSearchAccuracy(self)

    def GetWolfeCoefficient(self):
        r"""GetWolfeCoefficient(self) -> double"""
        return _itkLBFGS2Optimizerv4Python.itkLBFGS2Optimizerv4TemplateD_ConstPointer_GetWolfeCoefficient(self)

    def GetLineSearchGradientAccuracy(self):
        r"""GetLineSearchGradientAccuracy(self) -> double"""
        return _itkLBFGS2Optimizerv4Python.itkLBFGS2Optimizerv4TemplateD_ConstPointer_GetLineSearchGradientAccuracy(self)

    def GetMachinePrecisionTolerance(self):
        r"""GetMachinePrecisionTolerance(self) -> double"""
        return _itkLBFGS2Optimizerv4Python.itkLBFGS2Optimizerv4TemplateD_ConstPointer_GetMachinePrecisionTolerance(self)

    def GetOrthantwiseCoefficient(self):
        r"""GetOrthantwiseCoefficient(self) -> double"""
        return _itkLBFGS2Optimizerv4Python.itkLBFGS2Optimizerv4TemplateD_ConstPointer_GetOrthantwiseCoefficient(self)

    def GetOrthantwiseStart(self):
        r"""GetOrthantwiseStart(self) -> int"""
        return _itkLBFGS2Optimizerv4Python.itkLBFGS2Optimizerv4TemplateD_ConstPointer_GetOrthantwiseStart(self)

    def GetOrthantwiseEnd(self):
        r"""GetOrthantwiseEnd(self) -> int"""
        return _itkLBFGS2Optimizerv4Python.itkLBFGS2Optimizerv4TemplateD_ConstPointer_GetOrthantwiseEnd(self)

    def GetCurrentParameterNorm(self):
        r"""GetCurrentParameterNorm(self) -> double"""
        return _itkLBFGS2Optimizerv4Python.itkLBFGS2Optimizerv4TemplateD_ConstPointer_GetCurrentParameterNorm(self)

    def GetCurrentGradientNorm(self):
        r"""GetCurrentGradientNorm(self) -> double"""
        return _itkLBFGS2Optimizerv4Python.itkLBFGS2Optimizerv4TemplateD_ConstPointer_GetCurrentGradientNorm(self)

    def GetCurrentStepSize(self):
        r"""GetCurrentStepSize(self) -> double"""
        return _itkLBFGS2Optimizerv4Python.itkLBFGS2Optimizerv4TemplateD_ConstPointer_GetCurrentStepSize(self)

    def GetCurrentNumberOfEvaluations(self):
        r"""GetCurrentNumberOfEvaluations(self) -> double"""
        return _itkLBFGS2Optimizerv4Python.itkLBFGS2Optimizerv4TemplateD_ConstPointer_GetCurrentNumberOfEvaluations(self)

    def GetEstimateScalesAtEachIteration(self):
        r"""GetEstimateScalesAtEachIteration(self) -> bool const &"""
        return _itkLBFGS2Optimizerv4Python.itkLBFGS2Optimizerv4TemplateD_ConstPointer_GetEstimateScalesAtEachIteration(self)

    def GetLearningRate(self):
        r"""GetLearningRate(self) -> double const &"""
        return _itkLBFGS2Optimizerv4Python.itkLBFGS2Optimizerv4TemplateD_ConstPointer_GetLearningRate(self)

    def GetMaximumStepSizeInPhysicalUnits(self):
        r"""GetMaximumStepSizeInPhysicalUnits(self) -> double const &"""
        return _itkLBFGS2Optimizerv4Python.itkLBFGS2Optimizerv4TemplateD_ConstPointer_GetMaximumStepSizeInPhysicalUnits(self)

    def GetDoEstimateLearningRateAtEachIteration(self):
        r"""GetDoEstimateLearningRateAtEachIteration(self) -> bool const &"""
        return _itkLBFGS2Optimizerv4Python.itkLBFGS2Optimizerv4TemplateD_ConstPointer_GetDoEstimateLearningRateAtEachIteration(self)

    def GetDoEstimateLearningRateOnce(self):
        r"""GetDoEstimateLearningRateOnce(self) -> bool const &"""
        return _itkLBFGS2Optimizerv4Python.itkLBFGS2Optimizerv4TemplateD_ConstPointer_GetDoEstimateLearningRateOnce(self)

    def GetReturnBestParametersAndValue(self):
        r"""GetReturnBestParametersAndValue(self) -> bool const &"""
        return _itkLBFGS2Optimizerv4Python.itkLBFGS2Optimizerv4TemplateD_ConstPointer_GetReturnBestParametersAndValue(self)

    def GetGradient(self):
        r"""GetGradient(self) -> itkArrayD"""
        return _itkLBFGS2Optimizerv4Python.itkLBFGS2Optimizerv4TemplateD_ConstPointer_GetGradient(self)

    def GetStopCondition(self):
        r"""GetStopCondition(self) -> itkObjectToObjectOptimizerBaseTemplateEnums::StopConditionObjectToObjectOptimizer const &"""
        return _itkLBFGS2Optimizerv4Python.itkLBFGS2Optimizerv4TemplateD_ConstPointer_GetStopCondition(self)

    def GetCurrentMetricValue(self):
        r"""GetCurrentMetricValue(self) -> double const &"""
        return _itkLBFGS2Optimizerv4Python.itkLBFGS2Optimizerv4TemplateD_ConstPointer_GetCurrentMetricValue(self)

    def GetValue(self):
        r"""GetValue(self) -> double const &"""
        return _itkLBFGS2Optimizerv4Python.itkLBFGS2Optimizerv4TemplateD_ConstPointer_GetValue(self)

    def GetScales(self):
        r"""GetScales(self) -> itkOptimizerParametersD"""
        return _itkLBFGS2Optimizerv4Python.itkLBFGS2Optimizerv4TemplateD_ConstPointer_GetScales(self)

    def GetScalesAreIdentity(self):
        r"""GetScalesAreIdentity(self) -> bool const &"""
        return _itkLBFGS2Optimizerv4Python.itkLBFGS2Optimizerv4TemplateD_ConstPointer_GetScalesAreIdentity(self)

    def GetWeights(self):
        r"""GetWeights(self) -> itkOptimizerParametersD"""
        return _itkLBFGS2Optimizerv4Python.itkLBFGS2Optimizerv4TemplateD_ConstPointer_GetWeights(self)

    def GetWeightsAreIdentity(self):
        r"""GetWeightsAreIdentity(self) -> bool const &"""
        return _itkLBFGS2Optimizerv4Python.itkLBFGS2Optimizerv4TemplateD_ConstPointer_GetWeightsAreIdentity(self)

    def GetScalesInitialized(self):
        r"""GetScalesInitialized(self) -> bool"""
        return _itkLBFGS2Optimizerv4Python.itkLBFGS2Optimizerv4TemplateD_ConstPointer_GetScalesInitialized(self)

    def GetDoEstimateScales(self):
        r"""GetDoEstimateScales(self) -> bool const &"""
        return _itkLBFGS2Optimizerv4Python.itkLBFGS2Optimizerv4TemplateD_ConstPointer_GetDoEstimateScales(self)

    def GetNumberOfWorkUnits(self):
        r"""GetNumberOfWorkUnits(self) -> unsigned int const &"""
        return _itkLBFGS2Optimizerv4Python.itkLBFGS2Optimizerv4TemplateD_ConstPointer_GetNumberOfWorkUnits(self)

    def GetCurrentIteration(self):
        r"""GetCurrentIteration(self) -> unsigned long"""
        return _itkLBFGS2Optimizerv4Python.itkLBFGS2Optimizerv4TemplateD_ConstPointer_GetCurrentIteration(self)

    def GetNumberOfIterations(self):
        r"""GetNumberOfIterations(self) -> unsigned long"""
        return _itkLBFGS2Optimizerv4Python.itkLBFGS2Optimizerv4TemplateD_ConstPointer_GetNumberOfIterations(self)

    def GetCurrentPosition(self):
        r"""GetCurrentPosition(self) -> itkOptimizerParametersD"""
        return _itkLBFGS2Optimizerv4Python.itkLBFGS2Optimizerv4TemplateD_ConstPointer_GetCurrentPosition(self)

    def GetStopConditionDescription(self):
        r"""GetStopConditionDescription(self) -> std::string const"""
        return _itkLBFGS2Optimizerv4Python.itkLBFGS2Optimizerv4TemplateD_ConstPointer_GetStopConditionDescription(self)

    def CanUseScales(self):
        r"""CanUseScales(self) -> bool"""
        return _itkLBFGS2Optimizerv4Python.itkLBFGS2Optimizerv4TemplateD_ConstPointer_CanUseScales(self)

    def DebugOn(self):
        r"""DebugOn(self)"""
        return _itkLBFGS2Optimizerv4Python.itkLBFGS2Optimizerv4TemplateD_ConstPointer_DebugOn(self)

    def DebugOff(self):
        r"""DebugOff(self)"""
        return _itkLBFGS2Optimizerv4Python.itkLBFGS2Optimizerv4TemplateD_ConstPointer_DebugOff(self)

    def GetDebug(self):
        r"""GetDebug(self) -> bool"""
        return _itkLBFGS2Optimizerv4Python.itkLBFGS2Optimizerv4TemplateD_ConstPointer_GetDebug(self)

    def SetDebug(self, debugFlag):
        r"""
        SetDebug(self, debugFlag)

        Parameters
        ----------
        debugFlag: bool

        """
        return _itkLBFGS2Optimizerv4Python.itkLBFGS2Optimizerv4TemplateD_ConstPointer_SetDebug(self, debugFlag)

    def GetMTime(self):
        r"""GetMTime(self) -> unsigned long"""
        return _itkLBFGS2Optimizerv4Python.itkLBFGS2Optimizerv4TemplateD_ConstPointer_GetMTime(self)

    def GetTimeStamp(self):
        r"""GetTimeStamp(self) -> itkTimeStamp"""
        return _itkLBFGS2Optimizerv4Python.itkLBFGS2Optimizerv4TemplateD_ConstPointer_GetTimeStamp(self)

    def Modified(self):
        r"""Modified(self)"""
        return _itkLBFGS2Optimizerv4Python.itkLBFGS2Optimizerv4TemplateD_ConstPointer_Modified(self)

    def AddObserver(self, *args):
        r"""
        AddObserver(self, event, arg1) -> unsigned long

        Parameters
        ----------
        event: itkEventObject const &
        arg1: itkCommand *

        AddObserver(self, event, arg1) -> unsigned long

        Parameters
        ----------
        event: itkEventObject const &
        arg1: itkCommand *

        """

        import itk
        if len(args) == 3 and not issubclass(args[2].__class__, itk.Command) and callable(args[2]):
            args = list(args)
            pycommand = itk.PyCommand.New()
            pycommand.SetCommandCallable( args[2] )
            args[2] = pycommand
            args = tuple(args)
        elif len(args) == 2 and not issubclass(args[1].__class__, itk.Command) and callable(args[1]):
            args = list(args)
            pycommand = itk.PyCommand.New()
            pycommand.SetCommandCallable( args[1] )
            args[1] = pycommand
            args = tuple(args)


        return _itkLBFGS2Optimizerv4Python.itkLBFGS2Optimizerv4TemplateD_ConstPointer_AddObserver(self, *args)


    def InvokeEvent(self, *args):
        r"""
        InvokeEvent(self, arg0)

        Parameters
        ----------
        arg0: itkEventObject const &

        InvokeEvent(self, arg0)

        Parameters
        ----------
        arg0: itkEventObject const &

        """
        return _itkLBFGS2Optimizerv4Python.itkLBFGS2Optimizerv4TemplateD_ConstPointer_InvokeEvent(self, *args)

    def HasObserver(self, event):
        r"""
        HasObserver(self, event) -> bool

        Parameters
        ----------
        event: itkEventObject const &

        """
        return _itkLBFGS2Optimizerv4Python.itkLBFGS2Optimizerv4TemplateD_ConstPointer_HasObserver(self, event)

    def GetMetaDataDictionary(self, *args):
        r"""
        GetMetaDataDictionary(self) -> itkMetaDataDictionary
        GetMetaDataDictionary(self) -> itkMetaDataDictionary
        """
        return _itkLBFGS2Optimizerv4Python.itkLBFGS2Optimizerv4TemplateD_ConstPointer_GetMetaDataDictionary(self, *args)

    def GetObjectName(self):
        r"""GetObjectName(self) -> std::string const &"""
        return _itkLBFGS2Optimizerv4Python.itkLBFGS2Optimizerv4TemplateD_ConstPointer_GetObjectName(self)

    def CreateAnother(self):
        r"""CreateAnother(self) -> itkLightObject_Pointer"""
        return _itkLBFGS2Optimizerv4Python.itkLBFGS2Optimizerv4TemplateD_ConstPointer_CreateAnother(self)

    def GetNameOfClass(self):
        r"""GetNameOfClass(self) -> char const *"""
        return _itkLBFGS2Optimizerv4Python.itkLBFGS2Optimizerv4TemplateD_ConstPointer_GetNameOfClass(self)

    def GetReferenceCount(self):
        r"""GetReferenceCount(self) -> int"""
        return _itkLBFGS2Optimizerv4Python.itkLBFGS2Optimizerv4TemplateD_ConstPointer_GetReferenceCount(self)

# Register itkLBFGS2Optimizerv4TemplateD_ConstPointer in _itkLBFGS2Optimizerv4Python:
_itkLBFGS2Optimizerv4Python.itkLBFGS2Optimizerv4TemplateD_ConstPointer_swigregister(itkLBFGS2Optimizerv4TemplateD_ConstPointer)

