# 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 _ITKStatisticsPython



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

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.itkListSamplePython
import itk.itkVectorPython
import itk.vnl_vector_refPython
import itk.stdcomplexPython
import itk.pyBasePython
import itk.vnl_vectorPython
import itk.vnl_matrixPython
import itk.itkFixedArrayPython
import itk.ITKCommonBasePython
import itk.itkMatrixPython
import itk.itkPointPython
import itk.itkCovariantVectorPython
import itk.vnl_matrix_fixedPython
import itk.itkSamplePython
import itk.itkArrayPython
import itk.itkEuclideanDistanceMetricPython
import itk.itkDistanceMetricPython
import itk.itkFunctionBasePython
import itk.itkRGBPixelPython
import itk.itkRGBAPixelPython
import itk.itkContinuousIndexPython
import itk.itkIndexPython
import itk.itkSizePython
import itk.itkOffsetPython
import itk.itkImagePython
import itk.itkSymmetricSecondRankTensorPython
import itk.itkImageRegionPython

def itkKdTreeLSVF2_New():
    return itkKdTreeLSVF2.New()

class itkKdTreeLSVF2(itk.ITKCommonBasePython.itkObject):
    r"""Proxy of C++ itkKdTreeLSVF2 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__() -> itkKdTreeLSVF2_Pointer"""
        return _itkKdTreePython.itkKdTreeLSVF2___New_orig__()

    def Clone(self):
        r"""Clone(self) -> itkKdTreeLSVF2_Pointer"""
        return _itkKdTreePython.itkKdTreeLSVF2_Clone(self)

    def GetMeasurementVectorSize(self):
        r"""GetMeasurementVectorSize(self) -> unsigned int"""
        return _itkKdTreePython.itkKdTreeLSVF2_GetMeasurementVectorSize(self)

    def SetBucketSize(self, arg0):
        r"""
        SetBucketSize(self, arg0)

        Parameters
        ----------
        arg0: unsigned int

        """
        return _itkKdTreePython.itkKdTreeLSVF2_SetBucketSize(self, arg0)

    def SetSample(self, arg0):
        r"""
        SetSample(self, arg0)

        Parameters
        ----------
        arg0: itkListSampleVF2 const *

        """
        return _itkKdTreePython.itkKdTreeLSVF2_SetSample(self, arg0)

    def GetSample(self):
        r"""GetSample(self) -> itkListSampleVF2"""
        return _itkKdTreePython.itkKdTreeLSVF2_GetSample(self)

    def Size(self):
        r"""Size(self) -> unsigned long"""
        return _itkKdTreePython.itkKdTreeLSVF2_Size(self)

    def GetEmptyTerminalNode(self):
        r"""GetEmptyTerminalNode(self) -> itkKdTreeNodeLSVF2"""
        return _itkKdTreePython.itkKdTreeLSVF2_GetEmptyTerminalNode(self)

    def SetRoot(self, root):
        r"""
        SetRoot(self, root)

        Parameters
        ----------
        root: itkKdTreeNodeLSVF2 *

        """
        return _itkKdTreePython.itkKdTreeLSVF2_SetRoot(self, root)

    def GetRoot(self):
        r"""GetRoot(self) -> itkKdTreeNodeLSVF2"""
        return _itkKdTreePython.itkKdTreeLSVF2_GetRoot(self)

    def GetMeasurementVector(self, id):
        r"""
        GetMeasurementVector(self, id) -> itkVectorF2

        Parameters
        ----------
        id: unsigned long

        """
        return _itkKdTreePython.itkKdTreeLSVF2_GetMeasurementVector(self, id)

    def GetFrequency(self, id):
        r"""
        GetFrequency(self, id) -> unsigned long

        Parameters
        ----------
        id: unsigned long

        """
        return _itkKdTreePython.itkKdTreeLSVF2_GetFrequency(self, id)

    def GetDistanceMetric(self):
        r"""GetDistanceMetric(self) -> itkEuclideanDistanceMetricVF2"""
        return _itkKdTreePython.itkKdTreeLSVF2_GetDistanceMetric(self)

    def Search(self, *args):
        r"""
        Search(self, arg0, arg1, arg2)

        Parameters
        ----------
        arg0: itkVectorF2 const &
        arg1: unsigned int
        arg2: std::vector< unsigned long,std::allocator< unsigned long > > &

        Search(self, arg0, arg1, arg2, arg3)

        Parameters
        ----------
        arg0: itkVectorF2 const &
        arg1: unsigned int
        arg2: std::vector< unsigned long,std::allocator< unsigned long > > &
        arg3: std::vector< double,std::allocator< double > > &

        Search(self, arg0, arg1, arg2)

        Parameters
        ----------
        arg0: itkVectorF2 const &
        arg1: double
        arg2: std::vector< unsigned long,std::allocator< unsigned long > > &

        """
        return _itkKdTreePython.itkKdTreeLSVF2_Search(self, *args)

    def BallWithinBounds(self, arg0, arg1, arg2, arg3):
        r"""
        BallWithinBounds(self, arg0, arg1, arg2, arg3) -> bool

        Parameters
        ----------
        arg0: itkVectorF2 const &
        arg1: itkVectorF2 &
        arg2: itkVectorF2 &
        arg3: double

        """
        return _itkKdTreePython.itkKdTreeLSVF2_BallWithinBounds(self, arg0, arg1, arg2, arg3)

    def BoundsOverlapBall(self, arg0, arg1, arg2, arg3):
        r"""
        BoundsOverlapBall(self, arg0, arg1, arg2, arg3) -> bool

        Parameters
        ----------
        arg0: itkVectorF2 const &
        arg1: itkVectorF2 &
        arg2: itkVectorF2 &
        arg3: double

        """
        return _itkKdTreePython.itkKdTreeLSVF2_BoundsOverlapBall(self, arg0, arg1, arg2, arg3)

    def DeleteNode(self, arg0):
        r"""
        DeleteNode(self, arg0)

        Parameters
        ----------
        arg0: itkKdTreeNodeLSVF2 *

        """
        return _itkKdTreePython.itkKdTreeLSVF2_DeleteNode(self, arg0)

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

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

        PrintTree(self, arg0, arg1, arg2, os=cout)

        Parameters
        ----------
        arg0: itkKdTreeNodeLSVF2 *
        arg1: unsigned int
        arg2: unsigned int
        os: std::basic_ostream< char,std::char_traits< char > > &

        """
        return _itkKdTreePython.itkKdTreeLSVF2_PrintTree(self, *args)

    def PlotTree(self, *args):
        r"""
        PlotTree(self, os)

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

        PlotTree(self, node, os=cout)

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

        """
        return _itkKdTreePython.itkKdTreeLSVF2_PlotTree(self, *args)
    __swig_destroy__ = _itkKdTreePython.delete_itkKdTreeLSVF2

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

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

        """
        return _itkKdTreePython.itkKdTreeLSVF2_cast(obj)

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

        Create a new object of the class itkKdTreeLSVF2 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:

          itkKdTreeLSVF2.New(reader, threshold=10)

        is (most of the time) equivalent to:

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


# Register itkKdTreeLSVF2 in _itkKdTreePython:
_itkKdTreePython.itkKdTreeLSVF2_swigregister(itkKdTreeLSVF2)

def itkKdTreeLSVF3_New():
    return itkKdTreeLSVF3.New()

class itkKdTreeLSVF3(itk.ITKCommonBasePython.itkObject):
    r"""Proxy of C++ itkKdTreeLSVF3 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__() -> itkKdTreeLSVF3_Pointer"""
        return _itkKdTreePython.itkKdTreeLSVF3___New_orig__()

    def Clone(self):
        r"""Clone(self) -> itkKdTreeLSVF3_Pointer"""
        return _itkKdTreePython.itkKdTreeLSVF3_Clone(self)

    def GetMeasurementVectorSize(self):
        r"""GetMeasurementVectorSize(self) -> unsigned int"""
        return _itkKdTreePython.itkKdTreeLSVF3_GetMeasurementVectorSize(self)

    def SetBucketSize(self, arg0):
        r"""
        SetBucketSize(self, arg0)

        Parameters
        ----------
        arg0: unsigned int

        """
        return _itkKdTreePython.itkKdTreeLSVF3_SetBucketSize(self, arg0)

    def SetSample(self, arg0):
        r"""
        SetSample(self, arg0)

        Parameters
        ----------
        arg0: itkListSampleVF3 const *

        """
        return _itkKdTreePython.itkKdTreeLSVF3_SetSample(self, arg0)

    def GetSample(self):
        r"""GetSample(self) -> itkListSampleVF3"""
        return _itkKdTreePython.itkKdTreeLSVF3_GetSample(self)

    def Size(self):
        r"""Size(self) -> unsigned long"""
        return _itkKdTreePython.itkKdTreeLSVF3_Size(self)

    def GetEmptyTerminalNode(self):
        r"""GetEmptyTerminalNode(self) -> itkKdTreeNodeLSVF3"""
        return _itkKdTreePython.itkKdTreeLSVF3_GetEmptyTerminalNode(self)

    def SetRoot(self, root):
        r"""
        SetRoot(self, root)

        Parameters
        ----------
        root: itkKdTreeNodeLSVF3 *

        """
        return _itkKdTreePython.itkKdTreeLSVF3_SetRoot(self, root)

    def GetRoot(self):
        r"""GetRoot(self) -> itkKdTreeNodeLSVF3"""
        return _itkKdTreePython.itkKdTreeLSVF3_GetRoot(self)

    def GetMeasurementVector(self, id):
        r"""
        GetMeasurementVector(self, id) -> itkVectorF3

        Parameters
        ----------
        id: unsigned long

        """
        return _itkKdTreePython.itkKdTreeLSVF3_GetMeasurementVector(self, id)

    def GetFrequency(self, id):
        r"""
        GetFrequency(self, id) -> unsigned long

        Parameters
        ----------
        id: unsigned long

        """
        return _itkKdTreePython.itkKdTreeLSVF3_GetFrequency(self, id)

    def GetDistanceMetric(self):
        r"""GetDistanceMetric(self) -> itkEuclideanDistanceMetricVF3"""
        return _itkKdTreePython.itkKdTreeLSVF3_GetDistanceMetric(self)

    def Search(self, *args):
        r"""
        Search(self, arg0, arg1, arg2)

        Parameters
        ----------
        arg0: itkVectorF3 const &
        arg1: unsigned int
        arg2: std::vector< unsigned long,std::allocator< unsigned long > > &

        Search(self, arg0, arg1, arg2, arg3)

        Parameters
        ----------
        arg0: itkVectorF3 const &
        arg1: unsigned int
        arg2: std::vector< unsigned long,std::allocator< unsigned long > > &
        arg3: std::vector< double,std::allocator< double > > &

        Search(self, arg0, arg1, arg2)

        Parameters
        ----------
        arg0: itkVectorF3 const &
        arg1: double
        arg2: std::vector< unsigned long,std::allocator< unsigned long > > &

        """
        return _itkKdTreePython.itkKdTreeLSVF3_Search(self, *args)

    def BallWithinBounds(self, arg0, arg1, arg2, arg3):
        r"""
        BallWithinBounds(self, arg0, arg1, arg2, arg3) -> bool

        Parameters
        ----------
        arg0: itkVectorF3 const &
        arg1: itkVectorF3 &
        arg2: itkVectorF3 &
        arg3: double

        """
        return _itkKdTreePython.itkKdTreeLSVF3_BallWithinBounds(self, arg0, arg1, arg2, arg3)

    def BoundsOverlapBall(self, arg0, arg1, arg2, arg3):
        r"""
        BoundsOverlapBall(self, arg0, arg1, arg2, arg3) -> bool

        Parameters
        ----------
        arg0: itkVectorF3 const &
        arg1: itkVectorF3 &
        arg2: itkVectorF3 &
        arg3: double

        """
        return _itkKdTreePython.itkKdTreeLSVF3_BoundsOverlapBall(self, arg0, arg1, arg2, arg3)

    def DeleteNode(self, arg0):
        r"""
        DeleteNode(self, arg0)

        Parameters
        ----------
        arg0: itkKdTreeNodeLSVF3 *

        """
        return _itkKdTreePython.itkKdTreeLSVF3_DeleteNode(self, arg0)

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

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

        PrintTree(self, arg0, arg1, arg2, os=cout)

        Parameters
        ----------
        arg0: itkKdTreeNodeLSVF3 *
        arg1: unsigned int
        arg2: unsigned int
        os: std::basic_ostream< char,std::char_traits< char > > &

        """
        return _itkKdTreePython.itkKdTreeLSVF3_PrintTree(self, *args)

    def PlotTree(self, *args):
        r"""
        PlotTree(self, os)

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

        PlotTree(self, node, os=cout)

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

        """
        return _itkKdTreePython.itkKdTreeLSVF3_PlotTree(self, *args)
    __swig_destroy__ = _itkKdTreePython.delete_itkKdTreeLSVF3

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

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

        """
        return _itkKdTreePython.itkKdTreeLSVF3_cast(obj)

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

        Create a new object of the class itkKdTreeLSVF3 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:

          itkKdTreeLSVF3.New(reader, threshold=10)

        is (most of the time) equivalent to:

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


# Register itkKdTreeLSVF3 in _itkKdTreePython:
_itkKdTreePython.itkKdTreeLSVF3_swigregister(itkKdTreeLSVF3)
class itkKdTreeNodeLSVF2(object):
    r"""Proxy of C++ itkKdTreeNodeLSVF2 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 - class is abstract")
    __repr__ = _swig_repr

    def IsTerminal(self):
        r"""IsTerminal(self) -> bool"""
        return _itkKdTreePython.itkKdTreeNodeLSVF2_IsTerminal(self)

    def GetParameters(self, arg0, arg1):
        r"""
        GetParameters(self, arg0, arg1)

        Parameters
        ----------
        arg0: unsigned int &
        arg1: float &

        """
        return _itkKdTreePython.itkKdTreeNodeLSVF2_GetParameters(self, arg0, arg1)

    def Left(self, *args):
        r"""
        Left(self) -> itkKdTreeNodeLSVF2
        Left(self) -> itkKdTreeNodeLSVF2
        """
        return _itkKdTreePython.itkKdTreeNodeLSVF2_Left(self, *args)

    def Right(self, *args):
        r"""
        Right(self) -> itkKdTreeNodeLSVF2
        Right(self) -> itkKdTreeNodeLSVF2
        """
        return _itkKdTreePython.itkKdTreeNodeLSVF2_Right(self, *args)

    def Size(self):
        r"""Size(self) -> unsigned int"""
        return _itkKdTreePython.itkKdTreeNodeLSVF2_Size(self)

    def GetWeightedCentroid(self, arg0):
        r"""
        GetWeightedCentroid(self, arg0)

        Parameters
        ----------
        arg0: itkArrayD &

        """
        return _itkKdTreePython.itkKdTreeNodeLSVF2_GetWeightedCentroid(self, arg0)

    def GetCentroid(self, arg0):
        r"""
        GetCentroid(self, arg0)

        Parameters
        ----------
        arg0: itkArrayD &

        """
        return _itkKdTreePython.itkKdTreeNodeLSVF2_GetCentroid(self, arg0)

    def GetInstanceIdentifier(self, arg0):
        r"""
        GetInstanceIdentifier(self, arg0) -> unsigned long

        Parameters
        ----------
        arg0: unsigned long

        """
        return _itkKdTreePython.itkKdTreeNodeLSVF2_GetInstanceIdentifier(self, arg0)

    def AddInstanceIdentifier(self, arg0):
        r"""
        AddInstanceIdentifier(self, arg0)

        Parameters
        ----------
        arg0: unsigned long

        """
        return _itkKdTreePython.itkKdTreeNodeLSVF2_AddInstanceIdentifier(self, arg0)
    __swig_destroy__ = _itkKdTreePython.delete_itkKdTreeNodeLSVF2

# Register itkKdTreeNodeLSVF2 in _itkKdTreePython:
_itkKdTreePython.itkKdTreeNodeLSVF2_swigregister(itkKdTreeNodeLSVF2)
class itkKdTreeNodeLSVF3(object):
    r"""Proxy of C++ itkKdTreeNodeLSVF3 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 - class is abstract")
    __repr__ = _swig_repr

    def IsTerminal(self):
        r"""IsTerminal(self) -> bool"""
        return _itkKdTreePython.itkKdTreeNodeLSVF3_IsTerminal(self)

    def GetParameters(self, arg0, arg1):
        r"""
        GetParameters(self, arg0, arg1)

        Parameters
        ----------
        arg0: unsigned int &
        arg1: float &

        """
        return _itkKdTreePython.itkKdTreeNodeLSVF3_GetParameters(self, arg0, arg1)

    def Left(self, *args):
        r"""
        Left(self) -> itkKdTreeNodeLSVF3
        Left(self) -> itkKdTreeNodeLSVF3
        """
        return _itkKdTreePython.itkKdTreeNodeLSVF3_Left(self, *args)

    def Right(self, *args):
        r"""
        Right(self) -> itkKdTreeNodeLSVF3
        Right(self) -> itkKdTreeNodeLSVF3
        """
        return _itkKdTreePython.itkKdTreeNodeLSVF3_Right(self, *args)

    def Size(self):
        r"""Size(self) -> unsigned int"""
        return _itkKdTreePython.itkKdTreeNodeLSVF3_Size(self)

    def GetWeightedCentroid(self, arg0):
        r"""
        GetWeightedCentroid(self, arg0)

        Parameters
        ----------
        arg0: itkArrayD &

        """
        return _itkKdTreePython.itkKdTreeNodeLSVF3_GetWeightedCentroid(self, arg0)

    def GetCentroid(self, arg0):
        r"""
        GetCentroid(self, arg0)

        Parameters
        ----------
        arg0: itkArrayD &

        """
        return _itkKdTreePython.itkKdTreeNodeLSVF3_GetCentroid(self, arg0)

    def GetInstanceIdentifier(self, arg0):
        r"""
        GetInstanceIdentifier(self, arg0) -> unsigned long

        Parameters
        ----------
        arg0: unsigned long

        """
        return _itkKdTreePython.itkKdTreeNodeLSVF3_GetInstanceIdentifier(self, arg0)

    def AddInstanceIdentifier(self, arg0):
        r"""
        AddInstanceIdentifier(self, arg0)

        Parameters
        ----------
        arg0: unsigned long

        """
        return _itkKdTreePython.itkKdTreeNodeLSVF3_AddInstanceIdentifier(self, arg0)
    __swig_destroy__ = _itkKdTreePython.delete_itkKdTreeNodeLSVF3

# Register itkKdTreeNodeLSVF3 in _itkKdTreePython:
_itkKdTreePython.itkKdTreeNodeLSVF3_swigregister(itkKdTreeNodeLSVF3)

