#!/usr/bin/env python3

import matplotlib.pyplot as plt
import numpy as np

uncompr_text = """
default        : 010f52ef
dspi-8         : 008dc82f
dspi-7         : 008d6d63
dspi-6         : 008d1297
dspi-5         : 008cb7cb
dspi-4         : 008c5cff
dspi-3         : 008c0233
dspi-2         : 008ba767
dspi-1         : 008b4c9b
dspi-crm-8     : 008af1cf
dspi-crm-7     : 008a9703
dspi-crm-6     : 008a3c37
dspi-crm-5     : 0089e16b
dspi-crm-4     : 0089869f
dspi-crm-3     : 00892bd3
dspi-crm-2     : 0088d107
dspi-crm-1     : 0088763b
qspi-8         : 004a2c6f
qspi-7         : 0049d1a3
qspi-6         : 004976d7
qspi-5         : 00491c0b
qspi-4         : 0048c13f
qspi-3         : 00486673
qspi-2         : 00480ba7
qspi-1         : 0047b0db
qspi-crm-8     : 0047560f
qspi-crm-7     : 0046fb43
qspi-crm-6     : 0046a077
qspi-crm-5     : 004645ab
qspi-crm-4     : 0045eadf
qspi-crm-3     : 00459013
qspi-crm-2     : 00453547
qspi-crm-1     : 0044da7b
qspi-ddr-8     : 00288bf5
qspi-ddr-7     : 00283129
qspi-ddr-6     : 0027d65d
qspi-ddr-5     : 00277b91
qspi-ddr-4     : 002720c5
qspi-ddr-3     : 0026c5f9
qspi-ddr-2     : 00266b2d
qspi-ddr-1     : 00261061
qspi-ddr-crm-8 : 0025b595
qspi-ddr-crm-7 : 00255ac9
qspi-ddr-crm-6 : 0024fffd
qspi-ddr-crm-5 : 0024a531
qspi-ddr-crm-4 : 00244a65
qspi-ddr-crm-3 : 0023ef99
qspi-ddr-crm-2 : 002394cd
qspi-ddr-crm-1 : 00233a01
instns         : 0003df2d
"""

compr_text = """
default        : 00f3d36d
dspi-8         : 008008ad
dspi-7         : 007fade1
dspi-6         : 007f5315
dspi-5         : 007ef849
dspi-4         : 007e9d7d
dspi-3         : 007e42b1
dspi-2         : 007de7e5
dspi-1         : 007d8d19
dspi-crm-8     : 007d324d
dspi-crm-7     : 007cd781
dspi-crm-6     : 007c7cb5
dspi-crm-5     : 007c21e9
dspi-crm-4     : 007bc71d
dspi-crm-3     : 007b6c51
dspi-crm-2     : 007b1185
dspi-crm-1     : 007ab6b9
qspi-8         : 00434ced
qspi-7         : 0042f221
qspi-6         : 00429755
qspi-5         : 00423c89
qspi-4         : 0041e1bd
qspi-3         : 004186f1
qspi-2         : 00412c25
qspi-1         : 0040d159
qspi-crm-8     : 0040768d
qspi-crm-7     : 00401bc1
qspi-crm-6     : 003fc0f5
qspi-crm-5     : 003f6629
qspi-crm-4     : 003f0b5d
qspi-crm-3     : 003eb091
qspi-crm-2     : 003e55c5
qspi-crm-1     : 003dfaf9
qspi-ddr-8     : 00255d87
qspi-ddr-7     : 002502bb
qspi-ddr-6     : 0024a7ef
qspi-ddr-5     : 00244d23
qspi-ddr-4     : 0023f257
qspi-ddr-3     : 0023978b
qspi-ddr-2     : 00233cbf
qspi-ddr-1     : 0022e1f3
qspi-ddr-crm-8 : 00228727
qspi-ddr-crm-7 : 00222c5b
qspi-ddr-crm-6 : 0021d18f
qspi-ddr-crm-5 : 002176c3
qspi-ddr-crm-4 : 00211bf7
qspi-ddr-crm-3 : 0020c12b
qspi-ddr-crm-2 : 0020665f
qspi-ddr-crm-1 : 00200b93
instns         : 0003df2d
"""

labels = list()
uncompr_values = list()
compr_values = list()

for line in uncompr_text.split("\n"):
    if line != "":
        line = line.split()
        if line[0] == "instns":
            for i in range(len(uncompr_values)):
                uncompr_values[i] = int(line[2], 16) / uncompr_values[i]
        else:
            labels.append(line[0])
            uncompr_values.append(int(line[2], 16))

for line in compr_text.split("\n"):
    if line != "":
        line = line.split()
        if line[0] == "instns":
            for i in range(len(compr_values)):
                compr_values[i] = int(line[2], 16) / compr_values[i]
        else:
            compr_values.append(int(line[2], 16))

print(np.array(compr_values) / np.array(uncompr_values))

values = list()
for i in range(len(compr_values)):
    values.append(uncompr_values[i] / uncompr_values[0])
    # values.append(compr_values[i] / compr_values[0])

values = np.array(values)
print(values)

plt.figure(figsize=(10, 5))
plt.title("Performance comparison for different PicoSoC SPI flash configurations")
plt.plot(range(len(labels)), values)
plt.xticks(range(len(labels)), labels, rotation=80)

for color, x1, x2 in [["black", 0, 0], ["red", 1, 8], ["green", 9, 16],
        ["red", 17, 24], ["green", 25, 32], ["red", 33, 40], ["green", 41, 48]]:
    for t in plt.axes().xaxis.get_ticklabels()[x1:x2+1]:
        t.set_color(color)
    plt.plot([x1, x1], [0, values[x1] - 0.2], color=color)
    plt.plot([x2, x2], [0, values[x2] - 0.2], color=color)
    plt.plot([x1], [values[x1]], "k.")
    plt.plot([x2], [values[x2]], "k.")

plt.xlim(-1, len(labels))
plt.ylim(0, 9)
plt.grid()

plt.gcf().subplots_adjust(bottom=0.3)
plt.savefig("performance.png")
# plt.show()