Timeit Call висит в скрипте Numba - PullRequest
0 голосов
/ 16 апреля 2020

Я пытался запустить пример сценария , и ни одно из моих усилий по редактированию для отладки не было успешным. Обратите внимание, что вторая f-строка ниже предназначена только для проверки модуля timeit и синтаксиса вызова. Это оператор печати работает нормально, но первый оператор печати над ним просто зависает (значок песочных часов в Atom.) Если я закомментирую первый оператор печати, сценарий будет выполнен с хорошим фрактальным графиком :-)

Возможно, я пропустили что-то очевидное?

Мое окружение: Win10 x64, Atom 1.45, скрипт 3.25, python 3.7.3

Заранее спасибо за ваши мысли ...

# Using numba and fractals (# With/without Numba)

# Libraries
import numpy as np
from numba import jit
from timeit import timeit
import matplotlib.pyplot as plt
from matplotlib.pylab import imshow, ion

# To use numba just add jit with a decorator
# @jit

# Create helper functions
def mandel(x, y, max_iters):
    i = 0
    c = complex(x, y)
    z = 0.0j
    for i in range(max_iters):
        z = z*z + c
        if (z.real * z.real + z.imag * z.imag) >= 4:
        return i
    return 255

def create_fractal(min_x, max_x, min_y, max_y, image, iters):
    height = image.shape[0]
    width = image.shape[1]
    pixel_size_x = (max_x - min_x) / width
    pixel_size_y = (max_y - min_y) / height
    for x in range(width):
        real = min_x + x * pixel_size_x
        for y in range(height):
        imag = min_y + y * pixel_size_y
        color = mandel(real, imag, iters)
        image[y, x] = color
    return image

if __name__ == '__main__':

    image = np.zeros((500 * 2, 750 * 2), dtype=np.uint8)

    # Compare elapsed time between jit and @jit modes
    print(f"Time for 'create_fractal' call: {timeit(stmt='create_fractal(-2.0, 1.0, -1.0, 1.0, image, 20)', setup='from __main__ import create_fractal, image')} seconds")

    img = create_fractal(-2.0, 1.0, -1.0, 1.0, image, 20)

    # print(f"Time for assignment: {timeit(stmt='img', setup='from __main__ import img, create_fractal'):.5f} seconds")

    imshow(img)

    plt.show()
...