Source code for topo.misc.pyxhandler
"""
Support for optional Cython .pyx files.
"""
# CEBENHANCEMENT: If we begin using Cython components, consider adding
# more features of inlinec.py (ie: test of Cython compilation, control
# over warnings).
# CEBALERT: currently, need to do something like
# "export C_INCLUDE_PATH=lib/python2.6/site-packages/numpy/core/include/"
# for cython to find numpy headers. Might need to fix pyximport to look
# in the right place (it's possible to ask numpy for the location).
import __main__
import_pyx = __main__.__dict__.get('import_pyx',False)
pyximported = False
if import_pyx:
try:
import pyximport
pyximport.install()
pyximported = True
except:
pass
# JABALERT: As for the version in inlinec, I can't see any reason why
# this function accepts names rather than the more pythonic option of
# accepting objects, from which names can be extracted if necessary.
[docs]def provide_unoptimized_equivalent_cy(optimized_name, unoptimized_name, local_dict):
"""
Replace the optimized Cython component with its unoptimized
equivalent if pyximport is not available.
If import_pyx is True, warns about the unavailable component.
"""
if not pyximported:
local_dict[optimized_name] = local_dict[unoptimized_name]
if import_pyx:
print '%s: Cython components not available; using %s instead of %s.' \
% (local_dict['__name__'], unoptimized_name, optimized_name)