Работает ли unicode_type / string type для cfunc Нумбы? - PullRequest
0 голосов
/ 16 января 2019

Я видел в документации Numba , что некоторые операции с типом str поддерживаются. Я тестировал его с помощью @jit decorator, и он, безусловно, работает:

In [14]: @numba.jit("boolean(unicode_type, unicode_type)")
...: def compare_str(a, b):
...:     return a == b
...:                  
In [15]: compare_str("a","a")                                                                                                                                                                                    
Out[15]: True

Мне было интересно, доступен ли этот тип также для cfuncs, потому что я хотел бы иметь обратный вызов C ++, который выполняет некоторую операцию со строками, но я не могу успешно протестировать его в Python, хотя на самом деле он компилируется:

In [13]: @numba.cfunc("boolean(unicode_type, unicode_type)")
    ...: def compare_str(a, b):
    ...:     return a == b
    ...:    
In [12]: compare_str.ctypes("a","a")  

TypeError                                 Traceback (most recent call last)
<ipython-input-17-63a3266c663d> in <module>
----> 1 compare_str.ctypes("a", "a")

~/.virtualenvs/py3cpp/lib/python3.6/site-packages/numba/utils.py in __get__(self, instance, type)
    351         if instance is None:
    352             return self
--> 353         res = instance.__dict__[self.name] = self.func(instance)
    354         return res
    355

~/.virtualenvs/py3cpp/lib/python3.6/site-packages/numba/ccallback.py in ctypes(self)
    159         A ctypes function object representing the C callback.
    160         """
--> 161         ctypes_args = [to_ctypes(ty) for ty in self._sig.args]
    162         ctypes_restype = to_ctypes(self._sig.return_type)
    163         functype = ctypes.CFUNCTYPE(ctypes_restype, *ctypes_args)

~/.virtualenvs/py3cpp/lib/python3.6/site-packages/numba/ccallback.py in <listcomp>(.0)
    159         A ctypes function object representing the C callback.
    160         """
--> 161         ctypes_args = [to_ctypes(ty) for ty in self._sig.args]
    162         ctypes_restype = to_ctypes(self._sig.return_type)
    163         functype = ctypes.CFUNCTYPE(ctypes_restype, *ctypes_args)

~/.virtualenvs/py3cpp/lib/python3.6/site-packages/numba/typing/ctypes_utils.py in to_ctypes(ty)
     80     if ctypeobj is None:
     81         raise TypeError("Cannot convert Numba type '%s' to ctypes type"
---> 82                         % (ty,))
     83     return ctypeobj
     84

TypeError: Cannot convert Numba type 'unicode_type' to ctypes type

Я использую numba 0.42.0 и Python 3.6.7. Любые советы будут оценены.

Спасибо!

1 Ответ

0 голосов
/ 08 февраля 2019

Пока не поддерживается.Ответ был дан в публичном обсуждении Numba группы Google

...