"""
This type stub file was generated by pyright.
"""

from .vtkObject import vtkObject

class vtkSortDataArray(vtkObject):
    """
    vtkSortDataArray - provides several methods for sorting VTK arrays.
    
    Superclass: vtkObject
    
    vtkSortDataArray is used to sort data, based on its value, or with an
    associated key, into either ascending or descending order. This is
    useful for operations like selection, or analysis, when evaluating
    and processing data. A variety of sorting functions are provided,
    treating both arrays (i.e., vtkAbstractArray) and id lists
    (vtkIdList). Note that complex arrays like variants and string arrays
    are also handled.
    
    Additional functionality is provided to generate data ordering,
    without necessarily shuffling the data into a final, sorted position.
    Hence, the sorting process is organized into three steps because of
    the complexity of dealing with multiple types and multiple component
    data arrays. The first step involves creating and initializing a
    sorted index array, and then (second step) sorting this array to
    produce a map indicating the sorting order.  In other words, the
    sorting index array is a permutation which can be applied to other,
    associated data to shuffle it (third step) into an order consistent
    with the sorting operation. Note that the generation of the sorted
    index array is useful unto itself (even without the final shuffling
    of data) because it generates an ordered list (from the data values
    of any component in any array). So for example, it is possible to
    find the top N cells with the largest scalar value simply by
    generating the sorting index array from the call scalar values.
    
    @warning
    This class has been threaded with vtkSMPTools. Using TBB or other
    non-sequential type (set in the CMake variable
    VTK_SMP_IMPLEMENTATION_TYPE) may improve performance significantly on
    multi-core machines.
    
    @warning
    The sort methods below are static, hence the sorting methods can be
    used without instantiating the class. All methods are thread safe.
    
    @sa
    vtkSortFieldData
    """
    def GenerateSortIndices(self, p_int, void, p_int_1, p_int_2, p_int_3, *int):
        """
        V.GenerateSortIndices(int, void, int, int, int, [int, ...])
        C++: static void GenerateSortIndices(int dataType, void *dataIn,
            vtkIdType numKeys, int numComp, int k, vtkIdType *idx)
        
        The following are general functions which can be used to produce
        an ordering, and/or sort various types of VTK arrays. Don't use
        these methods unless you really know what you are doing. The
        basic idea is that an initial set of indices
        (InitializeSortIndices() that refer to the data contained in a
        vtkAbstractArray or vtkIdList) are sorted (GenerateSortIndices()
        based on the data values in the array). The result of the sort is
        the creation of a permutation array (the sort array idx) that
        indicates where the data tuples originated (e.g., after the sort,
        idx[0] indicates where in the array the tuple was originally
        located prior to sorting.) This sorted index array can be used to
        shuffle various types of VTK arrays (the types supported
        correspond to the various arrays which are subclasses of
        vtkDataArrayTemplate, use ShuffleArray() or for vtkIdList, use
        ShuffleIdList()). Also, the sort array, being an vtkIdType*
        (i.e., id list), can also be used to identify points or cells in
        sorted order (based on the data in the originating dataIn array).
        Note that sorting is always performed in ascending order, and the
        sorted index array reflects this; however the shuffling of data
        can be specified as either ascending (dir=0) or descending
        (dir=1) order. The user is responsible for taking ownership of
        the sort indices (i.e., free the idx array).
        """
        ...
    
    def GetNumberOfGenerationsFromBase(self, string):
        """
        V.GetNumberOfGenerationsFromBase(string) -> int
        C++: vtkIdType GetNumberOfGenerationsFromBase(const char *type)
            override;
        
        Standard VTK methods for instantiating, managing type, and
        printing information about this class.
        """
        ...
    
    def GetNumberOfGenerationsFromBaseType(self, string):
        """
        V.GetNumberOfGenerationsFromBaseType(string) -> int
        C++: static vtkIdType GetNumberOfGenerationsFromBaseType(
            const char *type)
        
        Standard VTK methods for instantiating, managing type, and
        printing information about this class.
        """
        ...
    
    def InitializeSortIndices(self, p_int):
        """
        V.InitializeSortIndices(int) -> (int, ...)
        C++: static vtkIdType *InitializeSortIndices(vtkIdType numKeys)
        
        The following are general functions which can be used to produce
        an ordering, and/or sort various types of VTK arrays. Don't use
        these methods unless you really know what you are doing. The
        basic idea is that an initial set of indices
        (InitializeSortIndices() that refer to the data contained in a
        vtkAbstractArray or vtkIdList) are sorted (GenerateSortIndices()
        based on the data values in the array). The result of the sort is
        the creation of a permutation array (the sort array idx) that
        indicates where the data tuples originated (e.g., after the sort,
        idx[0] indicates where in the array the tuple was originally
        located prior to sorting.) This sorted index array can be used to
        shuffle various types of VTK arrays (the types supported
        correspond to the various arrays which are subclasses of
        vtkDataArrayTemplate, use ShuffleArray() or for vtkIdList, use
        ShuffleIdList()). Also, the sort array, being an vtkIdType*
        (i.e., id list), can also be used to identify points or cells in
        sorted order (based on the data in the originating dataIn array).
        Note that sorting is always performed in ascending order, and the
        sorted index array reflects this; however the shuffling of data
        can be specified as either ascending (dir=0) or descending
        (dir=1) order. The user is responsible for taking ownership of
        the sort indices (i.e., free the idx array).
        """
        ...
    
    def IsA(self, string):
        """
        V.IsA(string) -> int
        C++: vtkTypeBool IsA(const char *type) override;
        
        Standard VTK methods for instantiating, managing type, and
        printing information about this class.
        """
        ...
    
    def IsTypeOf(self, string):
        """
        V.IsTypeOf(string) -> int
        C++: static vtkTypeBool IsTypeOf(const char *type)
        
        Standard VTK methods for instantiating, managing type, and
        printing information about this class.
        """
        ...
    
    def NewInstance(self):
        """
        V.NewInstance() -> vtkSortDataArray
        C++: vtkSortDataArray *NewInstance()
        
        Standard VTK methods for instantiating, managing type, and
        printing information about this class.
        """
        ...
    
    def SafeDownCast(self, vtkObjectBase):
        """
        V.SafeDownCast(vtkObjectBase) -> vtkSortDataArray
        C++: static vtkSortDataArray *SafeDownCast(vtkObjectBase *o)
        
        Standard VTK methods for instantiating, managing type, and
        printing information about this class.
        """
        ...
    
    def ShuffleArray(self, *int, **kwargs):
        """
        V.ShuffleArray([int, ...], int, int, int, vtkAbstractArray, void,
            int)
        C++: static void ShuffleArray(vtkIdType *idx, int dataType,
            vtkIdType numKeys, int numComp, vtkAbstractArray *arr,
            void *dataIn, int dir)
        
        The following are general functions which can be used to produce
        an ordering, and/or sort various types of VTK arrays. Don't use
        these methods unless you really know what you are doing. The
        basic idea is that an initial set of indices
        (InitializeSortIndices() that refer to the data contained in a
        vtkAbstractArray or vtkIdList) are sorted (GenerateSortIndices()
        based on the data values in the array). The result of the sort is
        the creation of a permutation array (the sort array idx) that
        indicates where the data tuples originated (e.g., after the sort,
        idx[0] indicates where in the array the tuple was originally
        located prior to sorting.) This sorted index array can be used to
        shuffle various types of VTK arrays (the types supported
        correspond to the various arrays which are subclasses of
        vtkDataArrayTemplate, use ShuffleArray() or for vtkIdList, use
        ShuffleIdList()). Also, the sort array, being an vtkIdType*
        (i.e., id list), can also be used to identify points or cells in
        sorted order (based on the data in the originating dataIn array).
        Note that sorting is always performed in ascending order, and the
        sorted index array reflects this; however the shuffling of data
        can be specified as either ascending (dir=0) or descending
        (dir=1) order. The user is responsible for taking ownership of
        the sort indices (i.e., free the idx array).
        """
        ...
    
    def ShuffleIdList(self, *int, **kwargs):
        """
        V.ShuffleIdList([int, ...], int, vtkIdList, [int, ...], int)
        C++: static void ShuffleIdList(vtkIdType *idx, vtkIdType sze,
            vtkIdList *arrayIn, vtkIdType *dataIn, int dir)
        
        The following are general functions which can be used to produce
        an ordering, and/or sort various types of VTK arrays. Don't use
        these methods unless you really know what you are doing. The
        basic idea is that an initial set of indices
        (InitializeSortIndices() that refer to the data contained in a
        vtkAbstractArray or vtkIdList) are sorted (GenerateSortIndices()
        based on the data values in the array). The result of the sort is
        the creation of a permutation array (the sort array idx) that
        indicates where the data tuples originated (e.g., after the sort,
        idx[0] indicates where in the array the tuple was originally
        located prior to sorting.) This sorted index array can be used to
        shuffle various types of VTK arrays (the types supported
        correspond to the various arrays which are subclasses of
        vtkDataArrayTemplate, use ShuffleArray() or for vtkIdList, use
        ShuffleIdList()). Also, the sort array, being an vtkIdType*
        (i.e., id list), can also be used to identify points or cells in
        sorted order (based on the data in the originating dataIn array).
        Note that sorting is always performed in ascending order, and the
        sorted index array reflects this; however the shuffling of data
        can be specified as either ascending (dir=0) or descending
        (dir=1) order. The user is responsible for taking ownership of
        the sort indices (i.e., free the idx array).
        """
        ...
    
    def Sort(self, vtkIdList):
        """
        V.Sort(vtkIdList)
        C++: static void Sort(vtkIdList *keys)
        V.Sort(vtkAbstractArray)
        C++: static void Sort(vtkAbstractArray *keys)
        V.Sort(vtkIdList, int)
        C++: static void Sort(vtkIdList *keys, int dir)
        V.Sort(vtkAbstractArray, int)
        C++: static void Sort(vtkAbstractArray *keys, int dir)
        V.Sort(vtkAbstractArray, vtkAbstractArray)
        C++: static void Sort(vtkAbstractArray *keys,
            vtkAbstractArray *values)
        V.Sort(vtkAbstractArray, vtkIdList)
        C++: static void Sort(vtkAbstractArray *keys, vtkIdList *values)
        V.Sort(vtkAbstractArray, vtkAbstractArray, int)
        C++: static void Sort(vtkAbstractArray *keys,
            vtkAbstractArray *values, int dir)
        V.Sort(vtkAbstractArray, vtkIdList, int)
        C++: static void Sort(vtkAbstractArray *keys, vtkIdList *values,
            int dir)
        
        Sorts the given array in ascending order. For this method, the
        keys must be single-component tuples.
        """
        ...
    
    def SortArrayByComponent(self, vtkAbstractArray, p_int):
        """
        V.SortArrayByComponent(vtkAbstractArray, int)
        C++: static void SortArrayByComponent(vtkAbstractArray *arr,
            int k)
        V.SortArrayByComponent(vtkAbstractArray, int, int)
        C++: static void SortArrayByComponent(vtkAbstractArray *arr,
            int k, int dir)
        
        Sorts the given data array using the specified component as a
        key. Think of the array as a 2-D grid with each tuple
        representing a row. Tuples are swapped until the k-th column of
        the grid is monotonically increasing. Where two tuples have the
        same value for the k-th component, their order in the final
        result is unspecified.
        """
        ...
    
    def __delattr__(self, *args, **kwargs):
        """ Implement delattr(self, name). """
        ...
    
    def __getattribute__(self, *args, **kwargs):
        """ Return getattr(self, name). """
        ...
    
    def __init__(self, *args, **kwargs) -> None:
        ...
    
    @staticmethod
    def __new__(*args, **kwargs):
        """ Create and return a new object.  See help(type) for accurate signature. """
        ...
    
    def __repr__(self, *args, **kwargs):
        """ Return repr(self). """
        ...
    
    def __setattr__(self, *args, **kwargs):
        """ Implement setattr(self, name, value). """
        ...
    
    def __str__(self, *args, **kwargs) -> str:
        """ Return str(self). """
        ...
    
    __this__ = ...
    __dict__ = ...
    __vtkname__ = ...


