Basic Example
==============

Important: 
Be sure to initialize Kokkos before setting up any objects from this library,
by created a scoped KokkosParser object, i.e:

.. code-block:: python

    import numpy as np
    src_coords = np.array([[-1,-1],[-1,0],[-1,1],[0,-1],[0,0],[0,1],[1,-1],[1,0],[1,1],[2,-1],[2,0],[2,1]], dtype='f8')
    trg_coords = np.array([[-1,-1],[-1,0],[-1,1],[0,-1],[0,0],[0,1],[1,-1],[1,0],[1,1]], dtype='f8')
    data       = np.array([[-1],[-1],[-1],[0],[0],[0],[1],[1],[1]], dtype='f8')
    
    import pycompadre
    
    # initialize kokkos
    kp = pycompadre.KokkosParser()
    
    # parameters
    poly_order = 3
    dimension = 2
    epsilon_multiplier = 1.5
    number_of_batches = 2
    
    # set up GMLS class
    gmls_obj = pycompadre.GMLS(poly_order, dimension)
    # set up ParticleHelper class
    gmls_helper = pycompadre.ParticleHelper(gmls_obj)
    
    # build Kd-Tree
    gmls_helper.generateKDTree(src_coords)
    # do neighbor search
    gmls_helper.generateNeighborListsFromKNNSearchAndSet(trg_coords, poly_order, dimension, epsilon_multiplier)
    
    # set target operation
    gmls_obj.addTargets(pycompadre.TargetOperation.ScalarPointEvaluation)
    # generate stencil with number of batches set to 2, and not keeping coefficients
    gmls_obj.generateAlphas(number_of_batches, keep_coefficients=False)
    
    # apply stencil to sample data for all targets
    computed_point_values = gmls_helper.applyStencil(data, pycompadre.TargetOperation.ScalarPointEvaluation)
    
    # clean up objects in order of dependency
    del gmls_obj
    del gmls_helper
    del kp