Numba JIT дает LoweringError, хотя в противном случае код работает нормально - PullRequest
1 голос
/ 22 марта 2019

У меня есть следующий код в python для вычисления множества Мандельброта.Он работает нормально, но когда я пытаюсь скомпилировать его с JIT, добавив @jit декоратор перед функцией def, он больше не работает.Кто-нибудь может сказать мне, почему?Я был бы признателен, если бы вы не критиковали мои вычисления Мандельброта (полагаю, их можно было бы оптимизировать) и просто дайте мне знать, почему JIT не работает с этой функцией.Кстати, код отступает после определения.Это просто не выглядело так, когда я вставил его сюда.

def mandelbrot(xmin,xmax,ymin,ymax,width,height,maxiter):
points=[]
x=np.linspace(xmin,xmax,width)
y=np.linspace(ymin,ymax,height)
for ix,re in enumerate(x):
    points.append([])
    for iy,im in enumerate(y):
        cx=re
        cy=im
        zx=0
        zy=0
        for n in range(maxiter):
            if zx*zx+zy*zy>4.0:
                iters=n
                break
            else:
                oldzx=zx
                oldzy=zy
                zy = 2*oldzx*oldzy+cy
                zx = oldzx*oldzx-oldzy*oldzy+cx  
                iters=n
        points[ix].append(int(iters))
return points

Я получаю следующий отчет об ошибке с последней строкой: LoweringError

runfile ('D: /python Programs / mandelbrot / mandelbrot.py ', wdir =' D: / python Programs / mandelbrot ') Traceback (последний вызов был последним):

File "", строка 1, в runfile (' D: /программы на python / mandelbrot / mandelbrot.py ', wdir =' D: / python Programs / mandelbrot ')

Файл "C: \ Users \ Matthew \ Anaconda3 \ lib \ site-packages \ spyder_kernels \ customize \ spydercustomize.py ", строка 786, в исполняемом файле исполняемого файла (имя файла, пространство имен)

Файл" C: \ Users \ Matthew \ Anaconda3 \ lib \ site-packages \ spyder_kernels \ customize \ spydercustomize.py ", строка 110,в execfile exec (compile (f.read (), filename, 'exec'), пространство имен)

Файл "D: / python Programs / mandelbrot / mandelbrot.py", строка 41, в mandelbrot_set = mandelbrot (-2.0,1.0, -1.5,1.5,500,500,50)

Файл "C: \ Users \ Matthew \ Anaconda3 \ lib \ site-packages \ numba \ dispatcher.py", строка 368, в _compile_for_args поднять e

Файл "C: \ Users \ Matthew \ Anaconda3 \ lib \ site-packages \ numba \ dispatcher.py", строка 325, в _compile_for_args возвращает self.compile (кортеж (argtypes))

Файл "C: \ Users \ Matthew \ Anaconda3 \ lib \ site-packages \ numba \ dispatcher.py", строка 653, в компиляции cres = self._compiler.compile (args, return_type)

Файл "C: \ Users \ Matthew \ Anaconda3 \ lib \ site-packages \ numba \ dispatcher.py", строка 83, в компиляции pipe_class = self.pipeline_class)

Файл "C: \ Users \ Matthew\ Anaconda3 \ lib \ site-packages \ numba \ compiler.py ", строка 873, в compile_extra, возвращать pipe.compile_extra (func)

Файл" C: \ Users \ Matthew \ Anaconda3 \ lib \ site-packages "\ numba \ compiler.py ", строка 367, в compile_extra возвращает self._compile_bytecode ()

Файл" C: \ Users \ Matthew \ Anaconda3 \ lib \ site-packages \ numba \ compiler.py ", строка804, в _compile_bytecode возвращает self._compile_core ()

Файл "C: \ Users \ Matthew \ Anaconda3 \ lib \ site-packages \ numba \ compiler.py", строка 791, в _compile_core res = pm.run (self.status)

Файл "C: \ Users \ Matthew \ Anaconda3 \ lib \ site-packages \ numba \ compiler.py", строка 253, в ходе выполнения поднять patched_exception

Файл "C: \ Users \ Matthew \ Anaconda3 \ lib \ site-packages \ numba \ compiler.py", строка 245, в стадии выполнения ()

Файл "C: \ Users \ Matthew\ Anaconda3 \ lib \ site-packages \ numba \ compiler.py ", строка 438, в stage_objectmode_frontend cres = self.frontend_looplift ()

Файл" C: \ Users \ Matthew \ Anaconda3 \ lib \ site-packages "\ numba \ compiler.py ", строка 428, в frontend_looplift поднял = кортеж (циклы), поднял_от = нет)

Файл" C: \ Users \ Matthew \ Anaconda3 \ lib \ site-packages \ numba \ compiler ".py ", строка 887, в compile_ir lifted_from = lifted_from)

Файл" C: \ Users \ Matthew \ Anaconda3 \ lib \ site-packages \ numba \ compiler.py ", строка 375, в compile_ir возвращает self._compile_ir ()

Файл "C: \ Users \ Matthew \ Anaconda3 \ lib \ site-packages \ numba \ compiler.py", строка 811, в _compile_ir возвращает self._compile_core ()

Файл "C: \ Users \ Matthew \ Anaconda3 \ lib \ site-packages \ numba \ compiler.py ", строка 791, в _compile_core res = pm.run (self.status)

Файл" C: \ Users \ Matthew \ Anaconda3\ lib \ site-packages \ numba \ compiler.py ", строка 253, в запускеповысить patched_exception

Файл Строка "C: \ Users \ Matthew \ Anaconda3 \ lib \ site-packages \ numba \ compiler.py" 245, в бегах этап ()

Файл Строка "C: \ Users \ Matthew \ Anaconda3 \ lib \ site-packages \ numba \ compiler.py" 652, в stage_objectmode_backend self._backend (lowerfn, objectmode = True)

Файл Строка "C: \ Users \ Matthew \ Anaconda3 \ lib \ site-packages \ numba \ compiler.py" 628, в _backend пониженный = lowerfn ()

Файл Строка "C: \ Users \ Matthew \ Anaconda3 \ lib \ site-packages \ numba \ compiler.py" 601, в backend_object_mode self.flags)

Файл Строка "C: \ Users \ Matthew \ Anaconda3 \ lib \ site-packages \ numba \ compiler.py" 1018, в py_lowering_stage lower.lower ()

Файл Строка "C: \ Users \ Matthew \ Anaconda3 \ lib \ site-packages \ numba \ lowering.py" 173, в нижнем self.lower_normal_function (self.fndesc)

Файл Строка "C: \ Users \ Matthew \ Anaconda3 \ lib \ site-packages \ numba \ lowering.py" 214, в нижней_нормальной_функции entry_block_tail = self.lower_function_body ()

Файл Строка "C: \ Users \ Matthew \ Anaconda3 \ lib \ site-packages \ numba \ lowering.py" 239, в Lower_function_body self.lower_block (блок) * +1066 *

Файл Строка "C: \ Users \ Matthew \ Anaconda3 \ lib \ site-packages \ numba \ lowering.py" 254, в нижнем блоке self.lower_inst (инст)

Файл "C: \ Users \ Matthew \ Anaconda3 \ lib \ contextlib.py", строка 130, в выход self.gen.throw (тип, значение, обратная связь)

Файл "C: \ Users \ Matthew \ Anaconda3 \ lib \ site-packages \ numba \ errors.py", строка 585, в new_error_context six.reraise (тип (newerr), newerr, tb)

Файл "C: \ Users \ Matthew \ Anaconda3 \ lib \ site-packages \ numba \ six.py", линия 659, в ререйзе повысить значение

LoweringError: iters

Файл "mandelbrot.py", строка 17: def Мандельброт (Xmin, Xmax, Ymin, уты, ширина, высота, MaxIter): для ix, перечислите (x): points.append ([]) ^

1 Ответ

0 голосов
/ 22 марта 2019

Я решил проблему. Кажется, мне нужно инициализировать переменную 'iters' в 0 в начале цикла. Так что это работает, когда я ставлю @jit перед ним. Кто-нибудь знает почему?

def mandelbrot(xmin,xmax,ymin,ymax,width,height,maxiter):
points=[]
x=np.linspace(xmin,xmax,width)
y=np.linspace(ymin,ymax,height)
for ix,re in enumerate(x):
    points.append([])
    for iy,im in enumerate(y):
        iters=0
        cx=re
        cy=im
        zx=0
        zy=0
        for n in range(maxiter):
            if zx*zx+zy*zy>4.0:
                iters=n
                break
            else:
                oldzx=zx
                oldzy=zy
                zy = 2*oldzx*oldzy+cy
                zx = oldzx*oldzx-oldzy*oldzy+cx  
                iters=n
        points[ix].append(iters)
return points
...