# This file was automatically generated by SWIG (https://www.swig.org).
# Version 4.4.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 getattr(globals().get("__spec__"), "parent", None) or __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.itkGradientDescentOptimizerv4Python
import itk.itkIndexPython
import itk.itkOffsetPython
import itk.itkSizePython
import itk.pyBasePython
import itk.itkGradientDescentOptimizerBasev4Python
import itk.itkArrayPython
import itk.vnl_vectorPython
import itk.stdcomplexPython
import itk.vnl_matrixPython
import itk.ITKCommonBasePython
import itk.itkMatrixPython
import itk.itkPointPython
import itk.itkFixedArrayPython
import itk.vnl_vector_refPython
import itk.itkVectorPython
import itk.vnl_matrix_fixedPython
import itk.itkCovariantVectorPython
import itk.itkObjectToObjectOptimizerBasePython
import itk.itkOptimizerParameterScalesEstimatorPython
import itk.itkOptimizerParametersPython
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)

