Commit ac6c463b authored by Robert Bradshaw's avatar Robert Bradshaw

cython.inline type inference

parent efe9d6a9
...@@ -51,7 +51,14 @@ def unbound_symbols(code, context=None): ...@@ -51,7 +51,14 @@ def unbound_symbols(code, context=None):
unbound.append(name) unbound.append(name)
return unbound return unbound
def get_type(arg, context=None): def unsafe_type(arg, context=None):
py_type = type(arg)
if py_type is int:
return 'long'
else:
return safe_type(arg, context)
def safe_type(arg, context=None):
py_type = type(arg) py_type = type(arg)
if py_type in [list, tuple, dict, str]: if py_type in [list, tuple, dict, str]:
return py_type.__name__ return py_type.__name__
...@@ -61,8 +68,6 @@ def get_type(arg, context=None): ...@@ -61,8 +68,6 @@ def get_type(arg, context=None):
return 'double' return 'double'
elif py_type is bool: elif py_type is bool:
return 'bint' return 'bint'
elif py_type is int:
return 'long'
elif 'numpy' in sys.modules and isinstance(arg, sys.modules['numpy'].ndarray): elif 'numpy' in sys.modules and isinstance(arg, sys.modules['numpy'].ndarray):
return 'numpy.ndarray[numpy.%s_t, ndim=%s]' % (arg.dtype.name, arg.ndim) return 'numpy.ndarray[numpy.%s_t, ndim=%s]' % (arg.dtype.name, arg.ndim)
else: else:
...@@ -77,12 +82,14 @@ def get_type(arg, context=None): ...@@ -77,12 +82,14 @@ def get_type(arg, context=None):
return 'object' return 'object'
def cython_inline(code, def cython_inline(code,
types='aggressive', get_type=unsafe_type,
lib_dir=os.path.expanduser('~/.cython/inline'), lib_dir=os.path.expanduser('~/.cython/inline'),
cython_include_dirs=['.'], cython_include_dirs=['.'],
locals=None, locals=None,
globals=None, globals=None,
**kwds): **kwds):
if get_type is None:
get_type = lambda x: 'object'
code, literals = strip_string_literals(code) code, literals = strip_string_literals(code)
code = strip_common_indent(code) code = strip_common_indent(code)
ctx = Context(include_dirs, default_options) ctx = Context(include_dirs, default_options)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment