def test_non_uniform_grid_lambda_3D(self):
        """ Test creating a non-uniform grid 3D with lambda
        """
        Nx = 4
        Ny = 3
        Nz = 2

        d = ocls.Domain(3)
        d.setMesh(x=Nx,y=Ny,z=Nz)
        data = self.ctx.createData(d,"")

        def I(p):
            return p[0]
        data.set(I)

        for i in range(Nx):
            assert_almost_equal(data[i,0,0], d.toLinspace()[0][i], places=6)

        def I(p):
            return p[1]
        data.set(I)

        for i in range(Ny):
            assert_almost_equal(data[0,i,0], d.toLinspace()[1][i], places=6)

        def I(p):
            return p[2]
        data.set(I)

        for i in range(Nz):
            assert_almost_equal(data[0,0,i], d.toLinspace()[2][i], places=6)
    def test_set_data_3D(self):
        """ Test setting 3D data with numpy np.array()
        """
        d = ocls.Domain(3)
        d.setMesh(x=4,y=4,z=4)
        data = self.ctx.createData(d,"")

        to_set = np.array([
            [[1.0,2.0,3.0,4.0],
            [1.0,2.0,3.0,4.0],
            [1.0,2.0,3.0,4.0],
            [1.0,2.0,3.0,4.0]],

            [[1.0,2.0,3.0,4.0],
            [1.0,2.0,3.0,4.0],
            [1.0,2.0,3.0,4.0],
            [1.0,2.0,3.0,4.0]],

            [[1.0,2.0,3.0,4.0],
            [1.0,2.0,3.0,4.0],
            [1.0,2.0,3.0,4.0],
            [1.0,2.0,3.0,4.0]],

            [[1.0,2.0,3.0,4.0],
            [1.0,2.0,3.0,4.0],
            [1.0,2.0,3.0,4.0],
            [1.0,2.0,3.0,4.0]]
        ]).astype('float32')
        data.set(to_set)

        for i in range(4):
            for j in range(4):
                for k in range(4):
                        assert_equals(data[k,j,i], to_set[i][j][k])
    def test_non_uniform_grid_3D(self):
        """ Test creating a non-uniform grid 3D with numpy array
        """
        Nx = 4
        Ny = 3
        Nz = 2

        d = ocls.Domain(3)
        d.setMesh(x=Nx,y=Ny,z=Nz)
        data = self.ctx.createData(d,"")

        to_set = np.array([
            [[1.0,2.0,3.0,4.0],
            [1.0,2.0,3.0,4.0],
            [1.0,2.0,3.0,4.0]],

            [[1.0,2.0,3.0,4.0],
            [1.0,2.0,3.0,4.0],
            [1.0,2.0,3.0,4.0]]
        ]).astype('float32')
        data.set(to_set)

        for i in range(Nx):
            for j in range(Ny):
                for k in range(Nz):
                    assert_almost_equal(data[i,j,k], to_set[k,j,i], places=6)

        for i in range(Nx):
            for j in range(Ny):
                for k in range(Nz):
                    assert_almost_equal(data[i,j,k], data.toArray()[k,j,i], places=6)
    def test_create_empty_1D(self):
        """ Test creating an zero initialized 1D dataset
        """
        d = ocls.Domain(1)
        d.setMesh(x=4)
        data = self.ctx.createData(d,"")

        # Every cell should be zero initialized
        for i in range(4):
            assert_equals(data[i], 0.0)
    def test_find_min_3D(self):
        """ Test finding minimum value in 3D dataset
        """
        d = ocls.Domain(3)
        d.setMesh(x=100,y=100,z=100)
        data = self.ctx.createData(d,"")

        to_set = np.zeros((100,100,100)).astype('float32')
        to_set[50,50,50] = -1.0
        data.set(to_set)

        assert_equals(data.min(), -1.0)
    def test_find_min_1D(self):
        """ Test finding minimum value in 1D dataset
        """
        d = ocls.Domain(1)
        d.setMesh(x=500)
        data = self.ctx.createData(d,"")

        to_set = np.zeros(500).astype('float32')
        to_set[250] = -1.0
        data.set(to_set)

        assert_equals(data.min(), -1.0)
    def test_find_max_2D(self):
        """ Test finding maximum value in 2D dataset
        """
        d = ocls.Domain(2)
        d.setMesh(x=500,y=500)
        data = self.ctx.createData(d,"")

        to_set = np.zeros((500,500)).astype('float32')
        to_set[250,250] = 1.0
        data.set(to_set)

        assert_equals(data.max(), 1.0)
    def test_set_data_1D(self):
        """ Test setting 1D data with numpy np.array()
        """
        d = ocls.Domain(1)
        d.setMesh(x=4)
        data = self.ctx.createData(d,"")

        to_set = np.array([1.0,2.0,3.0,4.0]).astype('float32')
        data.set(to_set)

        for i in range(4):
            assert_equals(data[i], to_set[i])
    def test_set_data_lambda_1D(self):
        """ Test setting 1D data with python lambda
        """
        d = ocls.Domain(1)
        d.setMesh(x=4)
        data = self.ctx.createData(d,"")


        def I(p):
            return p[0]
        data.set(I)

        for i in range(4):
            assert_almost_equal(data[i], d.toLinspace()[i],places=6)
    def test_set_data_lambda_2D(self):
        """ Test setting 2D data with python lambda
        """
        d = ocls.Domain(2)
        d.setMesh(x=4,y=4)
        data = self.ctx.createData(d,"")


        def I(p):
            return p[0]+p[1]
        data.set(I)

        for i in range(4):
            for j in range(4):
                assert_almost_equal(data[i,j], d.toLinspace()[0][i]+d.toLinspace()[1][j],places=6)
    def test_create_empty_1D_numpy(self):
        """ Test creating an zero initialized 1D dataset (numpy)
        """
        d = ocls.Domain(1)
        d.setMesh(x=4)
        data = self.ctx.createData(d,"")

        numpy_array = data.toArray()
        zero_array = np.zeros(4)

        # Length should be equal to mesh size
        assert_equals(len(numpy_array), 4)

        # Every cell should be zero initialized
        for i in range(4):
            assert_equals(numpy_array[i], zero_array[i])
    def test_copy_data_1D(self):
        """ Test copying data 1D
        """
        d = ocls.Domain(1)
        d.setMesh(x=4)

        this = self.ctx.createData(d,"")
        other = self.ctx.createData(d,"")

        to_set = np.array([1.0,2.0,3.0,4.0]).astype('float32')
        this.set(to_set)

        other.copy(this)

        for i in range(4):
            assert_equals(this[i], other[i])
    def test_create_empty_3D_numpy(self):
        """ Test creating an zero initialized 3D dataset  (numpy)
        """
        d = ocls.Domain(3)
        d.setMesh(x=4,y=4,z=4)
        data = self.ctx.createData(d,"")

        numpy_array = data.toArray()
        zero_array = np.zeros((4,4,4))

        # Length should be equal to mesh size
        assert_equals(len(numpy_array), 4)
        assert_equals(len(numpy_array[0]), 4)
        assert_equals(len(numpy_array[0][0]), 4)

        # Every cell should be zero initialized
        for i in range(4):
            for j in range(4):
                for k in range(4):
                    assert_equals(numpy_array[i][j][k], zero_array[i][j][k])
 def create_data(self, N, d):
     """ N
     """
     d = ocls.Domain(d)
     d.setMesh(x=N,y=N,z=N)
     data = self.ctx.createData(d,"")