Есть ли способ включить строковые атрибуты в Numba Jitclass? - PullRequest
1 голос
/ 04 апреля 2019

Я понимаю, что строки теперь поддерживаются numba, но не смог найти никакой документации о том, как использовать строки с jitclass, и не смог понять это.

Как создать строковые атрибуты с помощью jitclass?

(Этот хак был до-строковым и довольно грязным: Как передать строковый тип в классе в numba jitclass python? )

Я пробовал unicode_type, char, char [:], uint8, str - в основном все, что я могу придумать.

COND_SPEC = [
    ('feature',nb.unicode_type),
    ('val', nb.unicode_type)
]

@jitclass(COND_SPEC)
class Cond:
    """ Class implementing conditional. """

    def __init__(self, feature, val):
        self.feature = feature
        self.val = val

Класс компилируется, но объявляется экземпляркласса выдает ошибку:

c = Cond('education','HS-grad')
numba.errors.LoweringError: Failed in nopython mode pipeline (step: nopython mode backend)
Cannot cast unicode_type to int8: %".37" = load {i8*, i64, i32, i64, i8*, i8*}, {i8*, i64, i32, i64, i8*, i8*}* %"feature"

File "<ipython-input-19-aaeb1c1955cb>", line 12:
    def __init__(self, feature, val):
        self.feature = feature
        ^

[1] During: lowering "(self).feature = feature" at <ipython-input-19-aaeb1c1955cb> (12)
[2] During: resolving callee type: jitclass.Cond#7f9c36758a18<feature:int8,val:int8>
[3] During: typing of call at <string> (3)

--%<----------------------------------------------------------------------------


File "<string>", line 3:
<source missing, REPL/exec in use?>

1 Ответ

2 голосов
/ 04 апреля 2019

Я считаю, что это numba.types.string:

import numba as nb
from numba import jitclass

COND_SPEC = [
    ('feature',nb.types.string),
    ('val', nb.types.string)
]

@jitclass(COND_SPEC)
class Cond:
    """ Class implementing conditional. """

    def __init__(self, feature, val):
        self.feature = feature
        self.val = val

c = Cond('Hello', 'world')
print(c.feature, c.val)

>>>Hello world
...