From 03ff113ac48f21956247b164a83000b5f6ab311d Mon Sep 17 00:00:00 2001 From: Willem Jan Palenstijn Date: Tue, 25 Sep 2018 18:24:57 +0200 Subject: Add support for checking features at run-time --- python/astra/__init__.py | 2 +- python/astra/astra.py | 14 ++++++++++++++ python/astra/astra_c.pyx | 8 +++++++- 3 files changed, 22 insertions(+), 2 deletions(-) (limited to 'python') diff --git a/python/astra/__init__.py b/python/astra/__init__.py index 1a7f444..ae35316 100644 --- a/python/astra/__init__.py +++ b/python/astra/__init__.py @@ -27,7 +27,7 @@ from . import matlab as m from .creators import astra_dict,create_vol_geom, create_proj_geom, create_backprojection, create_sino, create_reconstruction, create_projector,create_sino3d_gpu, create_backprojection3d_gpu from .functions import data_op, add_noise_to_sino, clear, move_vol_geom, geom_size, geom_2vec, geom_postalignment from .extrautils import clipCircle -from .astra import set_gpu_index, get_gpu_info, use_cuda +from .astra import set_gpu_index, get_gpu_info, use_cuda, has_feature from . import data2d from . import astra from . import data3d diff --git a/python/astra/astra.py b/python/astra/astra.py index ef46db1..e74d29a 100644 --- a/python/astra/astra.py +++ b/python/astra/astra.py @@ -54,6 +54,20 @@ def get_gpu_info(idx=-1): """ return a.get_gpu_info(idx) +def has_feature(feature): + """Check a feature flag. + + These are used to check if certain functionality has been + enabled at compile time, if new functionality is present, or if + a backward-incompatible change is present. + + See include/astra/Features.h for a list. + + :param feature: The name of the feature + :type feature: :class:`str` + :returns: :class:`bool` -- The presence of the feature + """ + return a.has_feature(feature) def delete(ids): """Delete an astra object. diff --git a/python/astra/astra_c.pyx b/python/astra/astra_c.pyx index 65dbf28..69909b5 100644 --- a/python/astra/astra_c.pyx +++ b/python/astra/astra_c.pyx @@ -28,7 +28,7 @@ include "config.pxi" import six -from .utils import wrap_from_bytes +from .utils import wrap_from_bytes, wrap_to_bytes from libcpp.string cimport string from libcpp.vector cimport vector @@ -40,6 +40,9 @@ cdef extern from "astra/Globals.h" namespace "astra": bool cudaEnabled() bool cudaAvailable() +cdef extern from "astra/Features.h" namespace "astra": + bool hasFeature(string) + IF HAVE_CUDA==True: cdef extern from "astra/cuda/2d/astra.h" namespace "astraCUDA": bool setGPUIndex(int) @@ -120,3 +123,6 @@ def info(ids): if ptr: s = ptr.getType() + six.b("\t") + ptr.getInfo(i) six.print_(wrap_from_bytes(s)) + +def has_feature(feature): + return hasFeature(wrap_to_bytes(feature)) -- cgit v1.2.3