[SciPy-dev] Cython / python policy
Sturla Molden
sturla at molden.no
Fri Mar 6 20:55:09 EST 2009
Matthew Brett wrote:
> I was just thinking of doing some Cython.
> Do we think that, in general, scipy code should have both C(ython)
> _and_ python implementations of the same thing, with different names,
> as for Anne's spatial package?y-dev
>
I think SciPy should adopt the same policy as Python 3. That is, first
import a Python module, then try to import a C module on top of that,
replacing names.
Having two versions with similar functionality but different name in
Python and C (e.g. pickle and cPickle, profile and cProfile, KDTree and
cKDTree) is not a good idea. SciPy will move to Python 3 at some point
anyway, and doing this differently from other Python packages would be
confusing. It is less messy this way as well, as we avoid subtle
differences between the C and Python objects - any difference would be
considered a bug. It would also mean that anything is prototyped in
Python first, before migration to C. Hopefully it would also limit the
use of C to the parts that really benefit from migration, as the working
Python code is always written first.
To use Anne's kd-tree as an example, a tentative organization of the
code would be a Python module kdtree.py with a full Python
implementation of teh kd-tree, and a Cython file ckdtree.pyx with a
partial Cython re-implementation.
In kdtree.py:
class baseKDTree(object):
# full python implementation here
try:
from ckdtree import KDTree
except ImportError:
class KDTree(baseKDTree):
pass
__all__ = ['KDTree']
In ckdtree.pyx:
from kdtree import baseKDTree
class KDTree(baseKDTree):
# Cython re-implementation of the slowest
# parts of the base class, the rest we keep
# in Python.
Sturla Molden
More information about the SciPy-Dev
mailing list