import numpy as np


# ResNet-18, 5 classes, 25,000 images, 100 linear probing epochs, classical
def results():
    accs = np.array(
        [(31.26, (0, 0)), (36.82, (0, 13)), (38.36, (0, 26)), (38.92, (0, 39)), (40.38, (0, 52)), (40.44, (0, 65)),
         (40.46, (0, 78)), (39.36, (0, 91)), (37.32, (1, 0)), (41.32, (1, 13)), (41.44, (1, 26)), (43.14, (1, 39)),
         (44.3, (1, 52)), (45.88, (1, 65)), (44.7, (1, 78)), (45.36, (1, 91))])

    return accs


# ResNet-18, 5 classes, 25,000 images, 100 linear probing epochs, classical, sigmoid, bounded {π/2,3π/2} before testnet
def results_sigmoid_bounded():
    accs = np.array(
        [(27.6, (0, 0)), (32.82, (0, 13)), (35.32, (0, 26)), (35.46, (0, 39)), (34.36, (0, 52)), (39.42, (0, 65)),
         (39.0, (0, 78)), (39.26, (0, 91))])

    return accs


# ResNet-18, 5 classes, 25,000 images, 100 linear probing epochs, classical, sigmoid, bounded {0,π} before testnet
def results_sigmoid_bounded_fixed():
    accs = np.array([[(29.74, (0, 0)), (32.68, (0, 13)), (33.52, (0, 26)), (35.92, (0, 39)), (36.68, (0, 52)),
                      (40.72, (0, 65)), (41.44, (0, 78)), (40.7, (0, 91))],
                     [(28.7, (0, 0)), (33.2, (0, 13)), (34.84, (0, 26)), (36.84, (0, 39)), (36.54, (0, 52)),
                      (39.3, (0, 65)), (39.86, (0, 78)), (41.98, (0, 91))],
                     [(26.86, (0, 0)), (37.56, (0, 13)), (36.2, (0, 26)), (37.84, (0, 39)), (39.34, (0, 52)),
                      (40.68, (0, 65)), (42.08, (0, 78)), (42.12, (0, 91))]])
    return accs


# Repeat of above, to be assured that classical performance has not changed since fixing quantum gradients.
def results_sigmoid_bounded_fixed_2():
    accs = np.array([
        [(29.2, (0, 0)), (36.64, (0, 13)), (37.74, (0, 26)), (38.74, (0, 39)), (38.36, (0, 52)), (38.94, (0, 65)),
         (42.08, (0, 78)), (42.38, (0, 91)), (42.88, (1, 0)), (44.04, (1, 13)), (45.18, (1, 26)), (44.9, (1, 39)),
         (46.56, (1, 52)), (45.02, (1, 65)), (45.68, (1, 78)), (45.84, (1, 91))],
        [(29.16, (0, 0)), (35.1, (0, 13)), (35.56, (0, 26)), (36.88, (0, 39)), (38.66, (0, 52)), (39.2, (0, 65)),
         (41.26, (0, 78)), (43.08, (0, 91)), (43.04, (1, 0)), (43.0, (1, 13)), (43.54, (1, 26)), (44.34, (1, 39)),
         (43.58, (1, 52)), (45.78, (1, 65)), (44.52, (1, 78)), (45.62, (1, 91))],
        [(32.0, (0, 0)), (37.08, (0, 13)), (35.34, (0, 26)), (33.04, (0, 39)), (35.8, (0, 52)), (35.34, (0, 65)),
         (35.24, (0, 78)), (37.08, (0, 91)), (38.7, (1, 0)), (38.44, (1, 13)), (41.46, (1, 26)), (41.58, (1, 39)),
         (43.06, (1, 52)), (42.04, (1, 65)), (42.68, (1, 78)), (40.86, (1, 91))],
        [(28.5, (0, 0)), (30.86, (0, 13)), (32.66, (0, 26)), (34.54, (0, 39)), (34.14, (0, 52)), (33.86, (0, 65)),
         (34.14, (0, 78)), (34.44, (0, 91)), (35.26, (1, 0)), (36.58, (1, 13)), (37.56, (1, 26)), (40.68, (1, 39)),
         (42.12, (1, 52)), (41.52, (1, 65)), (41.84, (1, 78)), (42.62, (1, 91))],
        [(30.84, (0, 0)), (35.7, (0, 13)), (34.58, (0, 26)), (36.46, (0, 39)), (37.44, (0, 52)), (39.26, (0, 65)),
         (39.12, (0, 78)), (41.14, (0, 91)), (41.38, (1, 0)), (40.26, (1, 13)), (42.98, (1, 26)), (40.06, (1, 39)),
         (40.84, (1, 52)), (40.42, (1, 65)), (42.5, (1, 78)), (43.1, (1, 91))],
        [(29.78, (0, 0)), (30.38, (0, 13)), (34.28, (0, 26)), (35.9, (0, 39)), (35.04, (0, 52)), (36.42, (0, 65)),
         (38.48, (0, 78)), (39.32, (0, 91)), (38.62, (1, 0)), (39.74, (1, 13)), (41.48, (1, 26)), (38.78, (1, 39)),
         (40.36, (1, 52)), (41.66, (1, 65)), (43.7, (1, 78)), (43.52, (1, 91))]])
    return accs


# ResNet-18, 5 classes, 25,000 images, 100 linear probing epochs, classical, sigmoid, bounded {0,π} before testnet
def results_sigmoid_bounded_fixed_batchnorm():
    accs = np.array([(31.16, (0, 0)), (35.84, (0, 10)), (34.28, (0, 20)), (32.74, (0, 30)), (35.14, (0, 40)),
                     (36.24, (0, 50)), (36.76, (0, 60)), (36.62, (0, 70)), (22.6, (0, 80)), (30.56, (0, 90))])
    return accs
