from math import factorial
from numpy import linspace, exp, pi
import matplotlib.pyplot as plt


def f(thin, z):
    return sum(z ** thin(n) / thin(n) for n in range(1, 12))


theta = linspace(0, 2 * pi, 1000)

for r in [0.5, 0.75, 0.875, 1]:
    z = f(factorial, r * exp(1j * theta))
    plt.plot(z.real, z.imag)
plt.axes().set_aspect(1)
plt.title("f(z)")
plt.show()
plt.close()

for n in range(8):
    r = (n + 1) / 8
    z = f(lambda n: 2**n, r * exp(1j * theta))
    plt.plot(z.real, z.imag)
plt.title("g(z)")
plt.axes().set_aspect(1)
plt.show()


# https://www.johndcook.com/blog/2020/08/08/images-of-concentric-circles/
