import numpy as np
import matplotlib.pyplot as plt
from PIL import Image

def load_and_normalize(f):
    img = Image.open(f).convert('RGB')
    img_array = np.array(img).astype(np.float32)
    normalized_array = (img_array[:, :, 0] + img_array[:, :, 1] * 256) / 256
    return normalized_array

a = load_and_normalize("hello_grad.png")

# Gradient magnitude
plt.figure(figsize=(6, 4))
plt.imshow(a, cmap='viridis')
plt.colorbar()
plt.title('Magnitude of gradient')
plt.xticks([])
plt.yticks([])
plt.savefig('grad_mag@2x.png', bbox_inches='tight', dpi=220, transparent=True)

interval = load_and_normalize("hello_len_interval.png") * 256
pseudo = load_and_normalize("hello_len_pseudo.png") * 256
m = max(np.max(interval.ravel()), np.max(pseudo.ravel()))
plt.figure(figsize=(6, 2.3))
ax1 = plt.subplot(121)
plt.title("Interval")
plt.imshow(interval, vmin=0, vmax=m);
plt.xticks([])
plt.yticks([])
ax2 = plt.subplot(122)
plt.title("Pseudo-interval")
plt.imshow(pseudo, vmin=0, vmax=m);
plt.xticks([])
plt.yticks([])
plt.colorbar(label="Clauses", ax=[ax1, ax2])
plt.savefig('tape_lens@2x.png', bbox_inches='tight', dpi=220, transparent=True)
