From 13fc24f6b6e783c9fd4d7ffbb8c4cd760574bb31 Mon Sep 17 00:00:00 2001 From: Sergey Pokhodenko Date: Tue, 22 Sep 2020 07:31:17 -0500 Subject: [PATCH 1/5] Rename import from dppl to dpctl --- numba/dppl/compiler.py | 2 +- numba/dppl/dppl_host_fn_call_gen.py | 2 +- numba/dppl/dppl_lowerer.py | 2 +- numba/dppl/examples/dppy_func.py | 2 +- numba/dppl/examples/matmul.py | 2 +- numba/dppl/examples/pairwise_distance.py | 2 +- numba/dppl/examples/sum-hybrid.py | 2 +- numba/dppl/examples/sum.py | 2 +- numba/dppl/examples/sum2D.py | 2 +- numba/dppl/examples/sum_ndarray.py | 2 +- numba/dppl/examples/sum_reduction.py | 2 +- numba/dppl/examples/sum_reduction_ocl.py | 2 +- numba/dppl/examples/sum_reduction_recursive_ocl.py | 2 +- numba/dppl/tests/dppl/test_arg_accessor.py | 2 +- numba/dppl/tests/dppl/test_arg_types.py | 2 +- numba/dppl/tests/dppl/test_atomic_op.py | 2 +- numba/dppl/tests/dppl/test_barrier.py | 2 +- numba/dppl/tests/dppl/test_black_scholes.py | 2 +- numba/dppl/tests/dppl/test_caching.py | 2 +- numba/dppl/tests/dppl/test_device_array_args.py | 2 +- numba/dppl/tests/dppl/test_dppl_fallback.py | 2 +- numba/dppl/tests/dppl/test_dppl_func.py | 2 +- numba/dppl/tests/dppl/test_math_functions.py | 2 +- numba/dppl/tests/dppl/test_numpy_bit_twiddling_functions.py | 2 +- numba/dppl/tests/dppl/test_numpy_comparison_functions.py | 2 +- numba/dppl/tests/dppl/test_numpy_floating_functions.py | 2 +- numba/dppl/tests/dppl/test_numpy_math_functions.py | 2 +- numba/dppl/tests/dppl/test_numpy_trigonomteric_functions.py | 2 +- numba/dppl/tests/dppl/test_prange.py | 2 +- numba/dppl/tests/dppl/test_print.py | 2 +- numba/dppl/tests/dppl/test_pydppl_api.py | 2 +- numba/dppl/tests/dppl/test_sum_reduction.py | 2 +- numba/dppl/tests/dppl/test_vectorize.py | 2 +- 33 files changed, 33 insertions(+), 33 deletions(-) diff --git a/numba/dppl/compiler.py b/numba/dppl/compiler.py index a507a1627a4..e0f83ecf1e4 100644 --- a/numba/dppl/compiler.py +++ b/numba/dppl/compiler.py @@ -10,7 +10,7 @@ from types import FunctionType from inspect import signature -import dppl.ocldrv as driver +import dpctl.ocldrv as driver from . import spirv_generator import os diff --git a/numba/dppl/dppl_host_fn_call_gen.py b/numba/dppl/dppl_host_fn_call_gen.py index f56002e0e2d..91f99f736e9 100644 --- a/numba/dppl/dppl_host_fn_call_gen.py +++ b/numba/dppl/dppl_host_fn_call_gen.py @@ -1,6 +1,6 @@ from __future__ import print_function, division, absolute_import -import dppl.ocldrv as driver +import dpctl.ocldrv as driver import llvmlite.llvmpy.core as lc import llvmlite.ir.values as liv import llvmlite.ir as lir diff --git a/numba/dppl/dppl_lowerer.py b/numba/dppl/dppl_lowerer.py index a799ed88895..2322bdffecd 100644 --- a/numba/dppl/dppl_lowerer.py +++ b/numba/dppl/dppl_lowerer.py @@ -40,7 +40,7 @@ from .target import SPIR_GENERIC_ADDRSPACE from .dufunc_inliner import dufunc_inliner from . import dppl_host_fn_call_gen as dppl_call_gen -import dppl.ocldrv as driver +import dpctl.ocldrv as driver from numba.dppl.target import DPPLTargetContext diff --git a/numba/dppl/examples/dppy_func.py b/numba/dppl/examples/dppy_func.py index 2640e6e3e51..e6f844d16e9 100644 --- a/numba/dppl/examples/dppy_func.py +++ b/numba/dppl/examples/dppy_func.py @@ -3,7 +3,7 @@ from numba import dppl import math -import dppl.ocldrv as ocldrv +import dpctl.ocldrv as ocldrv @dppl.func diff --git a/numba/dppl/examples/matmul.py b/numba/dppl/examples/matmul.py index c076a2ba020..7483772a3ac 100644 --- a/numba/dppl/examples/matmul.py +++ b/numba/dppl/examples/matmul.py @@ -5,7 +5,7 @@ import sys import numpy as np from numba import dppl -import dppl.ocldrv as ocldrv +import dpctl.ocldrv as ocldrv @dppl.kernel diff --git a/numba/dppl/examples/pairwise_distance.py b/numba/dppl/examples/pairwise_distance.py index 00711c770df..6c08afb1438 100644 --- a/numba/dppl/examples/pairwise_distance.py +++ b/numba/dppl/examples/pairwise_distance.py @@ -7,7 +7,7 @@ import timeit from numba import dppl -import dppl.ocldrv as ocldrv +import dpctl.ocldrv as ocldrv parser = argparse.ArgumentParser(description='Program to compute pairwise distance') diff --git a/numba/dppl/examples/sum-hybrid.py b/numba/dppl/examples/sum-hybrid.py index 04d367f4f05..d88c6ba349d 100644 --- a/numba/dppl/examples/sum-hybrid.py +++ b/numba/dppl/examples/sum-hybrid.py @@ -5,7 +5,7 @@ import sys import numpy as np from numba import dppl -import dppl.ocldrv as ocldrv +import dpctl.ocldrv as ocldrv @dppl.kernel diff --git a/numba/dppl/examples/sum.py b/numba/dppl/examples/sum.py index b06acf3a036..7aff683c66d 100644 --- a/numba/dppl/examples/sum.py +++ b/numba/dppl/examples/sum.py @@ -5,7 +5,7 @@ import sys import numpy as np from numba import dppl -import dppl.ocldrv as ocldrv +import dpctl.ocldrv as ocldrv @dppl.kernel diff --git a/numba/dppl/examples/sum2D.py b/numba/dppl/examples/sum2D.py index 0ff945c5ed8..d23f75f5cb9 100644 --- a/numba/dppl/examples/sum2D.py +++ b/numba/dppl/examples/sum2D.py @@ -5,7 +5,7 @@ import sys import numpy as np from numba import dppl -import dppl.ocldrv as ocldrv +import dpctl.ocldrv as ocldrv @dppl.kernel diff --git a/numba/dppl/examples/sum_ndarray.py b/numba/dppl/examples/sum_ndarray.py index 9f3e0a97a9a..c5e4e7c4630 100644 --- a/numba/dppl/examples/sum_ndarray.py +++ b/numba/dppl/examples/sum_ndarray.py @@ -5,7 +5,7 @@ import sys import numpy as np from numba import dppl -import dppl.ocldrv as ocldrv +import dpctl.ocldrv as ocldrv @dppl.kernel(access_types={"read_only": ['a', 'b'], "write_only": ['c'], "read_write": []}) diff --git a/numba/dppl/examples/sum_reduction.py b/numba/dppl/examples/sum_reduction.py index 271ad806018..0e53c0e27d7 100644 --- a/numba/dppl/examples/sum_reduction.py +++ b/numba/dppl/examples/sum_reduction.py @@ -5,7 +5,7 @@ import time from numba import dppl -import dppl.ocldrv as ocldrv +import dpctl.ocldrv as ocldrv @dppl.kernel diff --git a/numba/dppl/examples/sum_reduction_ocl.py b/numba/dppl/examples/sum_reduction_ocl.py index e6a404db042..ce6ef2534ff 100644 --- a/numba/dppl/examples/sum_reduction_ocl.py +++ b/numba/dppl/examples/sum_reduction_ocl.py @@ -3,7 +3,7 @@ from numba import dppl, int32 import math -import dppl.ocldrv as ocldrv +import dpctl.ocldrv as ocldrv def sum_reduction_device_plus_host(): diff --git a/numba/dppl/examples/sum_reduction_recursive_ocl.py b/numba/dppl/examples/sum_reduction_recursive_ocl.py index bdb71495e39..c0d3a8d56cb 100644 --- a/numba/dppl/examples/sum_reduction_recursive_ocl.py +++ b/numba/dppl/examples/sum_reduction_recursive_ocl.py @@ -3,7 +3,7 @@ from numba import dppl, int32 import math -import dppl.ocldrv as ocldrv +import dpctl.ocldrv as ocldrv def recursive_reduction(size, group_size, diff --git a/numba/dppl/tests/dppl/test_arg_accessor.py b/numba/dppl/tests/dppl/test_arg_accessor.py index e6dddbfac0d..bbf0ecbf09f 100644 --- a/numba/dppl/tests/dppl/test_arg_accessor.py +++ b/numba/dppl/tests/dppl/test_arg_accessor.py @@ -5,7 +5,7 @@ from numba import dppl from numba.dppl.testing import unittest from numba.dppl.testing import DPPLTestCase -import dppl.ocldrv as ocldrv +import dpctl.ocldrv as ocldrv @dppl.kernel(access_types={"read_only": ['a', 'b'], "write_only": ['c'], "read_write": []}) diff --git a/numba/dppl/tests/dppl/test_arg_types.py b/numba/dppl/tests/dppl/test_arg_types.py index 834f6b6e35b..68196b98bdc 100644 --- a/numba/dppl/tests/dppl/test_arg_types.py +++ b/numba/dppl/tests/dppl/test_arg_types.py @@ -5,7 +5,7 @@ from numba import dppl from numba.dppl.testing import unittest from numba.dppl.testing import DPPLTestCase -import dppl.ocldrv as ocldrv +import dpctl.ocldrv as ocldrv @dppl.kernel diff --git a/numba/dppl/tests/dppl/test_atomic_op.py b/numba/dppl/tests/dppl/test_atomic_op.py index 6c20e944e7c..1135a41db78 100644 --- a/numba/dppl/tests/dppl/test_atomic_op.py +++ b/numba/dppl/tests/dppl/test_atomic_op.py @@ -6,7 +6,7 @@ from numba import dppl from numba.dppl.testing import unittest from numba.dppl.testing import DPPLTestCase -import dppl.ocldrv as ocldrv +import dpctl.ocldrv as ocldrv def atomic_add(ary): diff --git a/numba/dppl/tests/dppl/test_barrier.py b/numba/dppl/tests/dppl/test_barrier.py index 1efb5fa83e4..1d899fb5e8b 100644 --- a/numba/dppl/tests/dppl/test_barrier.py +++ b/numba/dppl/tests/dppl/test_barrier.py @@ -5,7 +5,7 @@ from numba.dppl.testing import unittest from numba.dppl.testing import DPPLTestCase from numba import dppl, float32 -import dppl.ocldrv as ocldrv +import dpctl.ocldrv as ocldrv @unittest.skipUnless(ocldrv.has_gpu_device, 'test only on GPU system') diff --git a/numba/dppl/tests/dppl/test_black_scholes.py b/numba/dppl/tests/dppl/test_black_scholes.py index b707791784e..0c95c521f08 100644 --- a/numba/dppl/tests/dppl/test_black_scholes.py +++ b/numba/dppl/tests/dppl/test_black_scholes.py @@ -7,7 +7,7 @@ from numba import dppl from numba.dppl.testing import unittest from numba.dppl.testing import DPPLTestCase -import dppl.ocldrv as ocldrv +import dpctl.ocldrv as ocldrv RISKFREE = 0.02 diff --git a/numba/dppl/tests/dppl/test_caching.py b/numba/dppl/tests/dppl/test_caching.py index fff48418e1f..0b66f05fc77 100644 --- a/numba/dppl/tests/dppl/test_caching.py +++ b/numba/dppl/tests/dppl/test_caching.py @@ -4,7 +4,7 @@ import sys import numpy as np from numba import dppl -import dppl.ocldrv as ocldrv +import dpctl.ocldrv as ocldrv from numba.dppl.testing import unittest from numba.dppl.testing import DPPLTestCase diff --git a/numba/dppl/tests/dppl/test_device_array_args.py b/numba/dppl/tests/dppl/test_device_array_args.py index 3c1e04ea8f9..fa2dd362edc 100644 --- a/numba/dppl/tests/dppl/test_device_array_args.py +++ b/numba/dppl/tests/dppl/test_device_array_args.py @@ -5,7 +5,7 @@ import sys import numpy as np from numba import dppl -import dppl.ocldrv as ocldrv +import dpctl.ocldrv as ocldrv from numba.dppl.testing import unittest from numba.dppl.testing import DPPLTestCase diff --git a/numba/dppl/tests/dppl/test_dppl_fallback.py b/numba/dppl/tests/dppl/test_dppl_fallback.py index 38842e90274..a6af309ba84 100644 --- a/numba/dppl/tests/dppl/test_dppl_fallback.py +++ b/numba/dppl/tests/dppl/test_dppl_fallback.py @@ -6,7 +6,7 @@ from numba import dppl from numba.dppl.testing import unittest from numba.dppl.testing import DPPLTestCase -import dppl.ocldrv as ocldrv +import dpctl.ocldrv as ocldrv import sys import io diff --git a/numba/dppl/tests/dppl/test_dppl_func.py b/numba/dppl/tests/dppl/test_dppl_func.py index ec27f3ffa7e..0f475de5cf3 100644 --- a/numba/dppl/tests/dppl/test_dppl_func.py +++ b/numba/dppl/tests/dppl/test_dppl_func.py @@ -5,7 +5,7 @@ from numba import dppl from numba.dppl.testing import unittest from numba.dppl.testing import DPPLTestCase -import dppl.ocldrv as ocldrv +import dpctl.ocldrv as ocldrv @unittest.skipUnless(ocldrv.has_gpu_device, 'test only on GPU system') diff --git a/numba/dppl/tests/dppl/test_math_functions.py b/numba/dppl/tests/dppl/test_math_functions.py index 5a1cb6c1649..2adbce4300d 100644 --- a/numba/dppl/tests/dppl/test_math_functions.py +++ b/numba/dppl/tests/dppl/test_math_functions.py @@ -5,7 +5,7 @@ import sys import numpy as np from numba import dppl -import dppl.ocldrv as ocldrv +import dpctl.ocldrv as ocldrv from numba.dppl.testing import unittest from numba.dppl.testing import DPPLTestCase import math diff --git a/numba/dppl/tests/dppl/test_numpy_bit_twiddling_functions.py b/numba/dppl/tests/dppl/test_numpy_bit_twiddling_functions.py index f8afe1e7190..c979fd6a686 100644 --- a/numba/dppl/tests/dppl/test_numpy_bit_twiddling_functions.py +++ b/numba/dppl/tests/dppl/test_numpy_bit_twiddling_functions.py @@ -8,7 +8,7 @@ from numba.dppl.testing import unittest from numba.dppl.testing import DPPLTestCase -import dppl.ocldrv as ocldrv +import dpctl.ocldrv as ocldrv class TestNumpy_bit_twiddling_functions(DPPLTestCase): diff --git a/numba/dppl/tests/dppl/test_numpy_comparison_functions.py b/numba/dppl/tests/dppl/test_numpy_comparison_functions.py index 185d99ca829..171707fb4c5 100644 --- a/numba/dppl/tests/dppl/test_numpy_comparison_functions.py +++ b/numba/dppl/tests/dppl/test_numpy_comparison_functions.py @@ -8,7 +8,7 @@ from numba.dppl.testing import unittest from numba.dppl.testing import DPPLTestCase -import dppl.ocldrv as ocldrv +import dpctl.ocldrv as ocldrv class TestNumpy_comparison_functions(DPPLTestCase): a = np.array([4,5,6]) diff --git a/numba/dppl/tests/dppl/test_numpy_floating_functions.py b/numba/dppl/tests/dppl/test_numpy_floating_functions.py index 31f83bb4e32..856b3333fc5 100644 --- a/numba/dppl/tests/dppl/test_numpy_floating_functions.py +++ b/numba/dppl/tests/dppl/test_numpy_floating_functions.py @@ -7,7 +7,7 @@ from numba.dppl.testing import unittest from numba.dppl.testing import DPPLTestCase -import dppl.ocldrv as ocldrv +import dpctl.ocldrv as ocldrv class TestNumpy_floating_functions(DPPLTestCase): def test_isfinite(self): diff --git a/numba/dppl/tests/dppl/test_numpy_math_functions.py b/numba/dppl/tests/dppl/test_numpy_math_functions.py index 985fed047ec..cd992e6f362 100644 --- a/numba/dppl/tests/dppl/test_numpy_math_functions.py +++ b/numba/dppl/tests/dppl/test_numpy_math_functions.py @@ -8,7 +8,7 @@ from numba.dppl.testing import unittest from numba.dppl.testing import DPPLTestCase -import dppl.ocldrv as ocldrv +import dpctl.ocldrv as ocldrv class TestNumpy_math_functions(DPPLTestCase): N = 10 diff --git a/numba/dppl/tests/dppl/test_numpy_trigonomteric_functions.py b/numba/dppl/tests/dppl/test_numpy_trigonomteric_functions.py index cc5d2b36251..946b6d66f95 100644 --- a/numba/dppl/tests/dppl/test_numpy_trigonomteric_functions.py +++ b/numba/dppl/tests/dppl/test_numpy_trigonomteric_functions.py @@ -8,7 +8,7 @@ from numba.dppl.testing import unittest from numba.dppl.testing import DPPLTestCase -import dppl.ocldrv as ocldrv +import dpctl.ocldrv as ocldrv class TestNumpy_math_functions(DPPLTestCase): N = 10 diff --git a/numba/dppl/tests/dppl/test_prange.py b/numba/dppl/tests/dppl/test_prange.py index afa1efa7821..f4fe3809dd2 100644 --- a/numba/dppl/tests/dppl/test_prange.py +++ b/numba/dppl/tests/dppl/test_prange.py @@ -8,7 +8,7 @@ from numba.dppl.testing import unittest from numba.dppl.testing import DPPLTestCase -import dppl.ocldrv as ocldrv +import dpctl.ocldrv as ocldrv class TestPrange(DPPLTestCase): diff --git a/numba/dppl/tests/dppl/test_print.py b/numba/dppl/tests/dppl/test_print.py index 83f8457c169..4780a3906d9 100644 --- a/numba/dppl/tests/dppl/test_print.py +++ b/numba/dppl/tests/dppl/test_print.py @@ -8,7 +8,7 @@ from numba.dppl.testing import unittest from numba.dppl.testing import DPPLTestCase -import dppl.ocldrv as ocldrv +import dpctl.ocldrv as ocldrv @unittest.skipUnless(ocldrv.has_gpu_device, 'test only on GPU system') diff --git a/numba/dppl/tests/dppl/test_pydppl_api.py b/numba/dppl/tests/dppl/test_pydppl_api.py index ae1091d6c16..a66d067f2a8 100644 --- a/numba/dppl/tests/dppl/test_pydppl_api.py +++ b/numba/dppl/tests/dppl/test_pydppl_api.py @@ -4,7 +4,7 @@ from numba.dppl.testing import unittest from numba.dppl.testing import DPPLTestCase -import dppl.ocldrv as ocldrv +import dpctl.ocldrv as ocldrv @unittest.skipUnless(ocldrv.has_gpu_device, 'test only on GPU system') diff --git a/numba/dppl/tests/dppl/test_sum_reduction.py b/numba/dppl/tests/dppl/test_sum_reduction.py index c2edb5a44c2..95a58a58af4 100644 --- a/numba/dppl/tests/dppl/test_sum_reduction.py +++ b/numba/dppl/tests/dppl/test_sum_reduction.py @@ -7,7 +7,7 @@ from numba import dppl from numba.dppl.testing import unittest from numba.dppl.testing import DPPLTestCase -import dppl.ocldrv as ocldrv +import dpctl.ocldrv as ocldrv @dppl.kernel def reduction_kernel(A, R, stride): diff --git a/numba/dppl/tests/dppl/test_vectorize.py b/numba/dppl/tests/dppl/test_vectorize.py index c54b859ae53..722d06f5fab 100644 --- a/numba/dppl/tests/dppl/test_vectorize.py +++ b/numba/dppl/tests/dppl/test_vectorize.py @@ -8,7 +8,7 @@ from numba.dppl.testing import unittest from numba.dppl.testing import DPPLTestCase -import dppl.ocldrv as ocldrv +import dpctl.ocldrv as ocldrv class TestVectorize(DPPLTestCase): From 032e551a51c852d15f991018c254e66c22fbe134 Mon Sep 17 00:00:00 2001 From: Sergey Pokhodenko Date: Tue, 22 Sep 2020 07:32:25 -0500 Subject: [PATCH 2/5] Rename to --- numba/dppl/device_init.py | 2 +- numba/dppl_config.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/numba/dppl/device_init.py b/numba/dppl/device_init.py index 277f900776f..d5f461654c8 100644 --- a/numba/dppl/device_init.py +++ b/numba/dppl/device_init.py @@ -23,7 +23,7 @@ from . import initialize from .decorators import kernel, func, autojit -from dppl.ocldrv import runtime +from dpctl.ocldrv import runtime from . import target diff --git a/numba/dppl_config.py b/numba/dppl_config.py index ae9bfd0e4ec..570cc7e83ca 100644 --- a/numba/dppl_config.py +++ b/numba/dppl_config.py @@ -1,7 +1,7 @@ dppl_present = False try: - from dppl.ocldrv import * + from dpctl.ocldrv import * except: pass else: From 77d1a7ee537445782da770205d446805b5a481a5 Mon Sep 17 00:00:00 2001 From: Sergey Pokhodenko Date: Tue, 22 Sep 2020 07:41:11 -0500 Subject: [PATCH 3/5] Rename in meta.yaml pydppl to dpctl --- buildscripts/condarecipe.pydppl/meta.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/buildscripts/condarecipe.pydppl/meta.yaml b/buildscripts/condarecipe.pydppl/meta.yaml index d25343b2d1e..aed8fa25411 100644 --- a/buildscripts/condarecipe.pydppl/meta.yaml +++ b/buildscripts/condarecipe.pydppl/meta.yaml @@ -35,14 +35,14 @@ requirements: - llvmlite >=0.31.* # TBB devel version is to match TBB libs - tbb-devel >=2019.5 # [not ((armv6l or armv7l or aarch64) or (win and py27))] - - pydppl + - dpctl run: - python >=3.6 - numpy >=1.17 - setuptools # On channel https://anaconda.org/numba/ - llvmlite >=0.31.* - - pydppl + - dpctl - spirv-tools - llvm-spirv run_constrained: From ddb0fba1682ece90f9c6bd24ed5e4692f269524c Mon Sep 17 00:00:00 2001 From: Sergey Pokhodenko Date: Tue, 22 Sep 2020 07:44:00 -0500 Subject: [PATCH 4/5] Rename dependant package in readme from pydppl to dpCtl --- README.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.rst b/README.rst index e05ea4ace04..311a2ccf513 100644 --- a/README.rst +++ b/README.rst @@ -45,10 +45,10 @@ Make sure the following dependencies of NUMBA-PyDPPL are installed in your conda environemtn: - llvmlite =0.33 -- pydppl =0.2 - spirv-tools - llvm-spirv - llvmdev +- dpCtl =0.3 Make sure the dependencies are installed with consistent version of LLVM 10. From 209ef717e45a203f1b433cc7378db5dc37f9f876 Mon Sep 17 00:00:00 2001 From: Sergey Pokhodenko Date: Tue, 22 Sep 2020 07:46:54 -0500 Subject: [PATCH 5/5] Rename backend in readme from PyDPPL to dpCtl --- README.rst | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/README.rst b/README.rst index 311a2ccf513..463e66f0113 100644 --- a/README.rst +++ b/README.rst @@ -52,11 +52,10 @@ in your conda environemtn: Make sure the dependencies are installed with consistent version of LLVM 10. -Install PyDPPL backend -*********************** -NUMBA-PyDPPL also depend on PyDPPL backend. It can be found `here `_. -Please run `build_for_develop.sh` to install PyDPPL backend in development mode -or install PyDPPL from package. +Install dpCtl backend +********************* +NUMBA-PyDPPL also depend on dpCtl backend. It can be found `here `_. +Please install dpCtl from package. Install NUMBA-PyDPPL ********************