#!/usr/bin/env python3
import sys
import numpy as np
from random import randrange
from matplotlib import pyplot as plt
from matplotlib import image
from scipy.special import expit
import gzip
import struct
HIDDEN = 200
files = [
"../t10k-images-idx3-ubyte.gz",
"../train-images-idx3-ubyte.gz",
"../t10k-labels-idx1-ubyte.gz",
"../train-labels-idx1-ubyte.gz"
]
def train():
with gzip.open(files[1],'rb') as fd:
all = fd.read()
eoh = 16
header = struct.unpack('>iiii',all[:eoh])
print("header " + str(header))
imagesize = header[2]*header[3]
#imagesize = 28*28 # 784 pixels
print("imagesize " + str(imagesize) )
#initializing
pixno = 0
startpos = eoh + imagesize * pixno
endpos = startpos + imagesize
trainImages = np.empty([60000, 28, 28])
for i in range(0, header[1]):
a1 = all[startpos:endpos]
a2 = struct.unpack('784B', a1)
a3 = np.array(a2).reshape(28,28)
trainImages[i] = a3
startpos = endpos + 1
endpos = startpos + imagesize
# print("count = =" + str(count))
IyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwoKaW1wb3J0IHN5cwppbXBvcnQgbnVtcHkgYXMgbnAKZnJvbSByYW5kb20gaW1wb3J0IHJhbmRyYW5nZQpmcm9tIG1hdHBsb3RsaWIgaW1wb3J0IHB5cGxvdCBhcyBwbHQKZnJvbSBtYXRwbG90bGliIGltcG9ydCBpbWFnZQpmcm9tIHNjaXB5LnNwZWNpYWwgaW1wb3J0IGV4cGl0CmltcG9ydCBnemlwCmltcG9ydCBzdHJ1Y3QKCkhJRERFTiA9IDIwMAoKZmlsZXMgPSBbCiAgICAiLi4vdDEway1pbWFnZXMtaWR4My11Ynl0ZS5neiIsCiAgICAiLi4vdHJhaW4taW1hZ2VzLWlkeDMtdWJ5dGUuZ3oiLAogICAgIi4uL3QxMGstbGFiZWxzLWlkeDEtdWJ5dGUuZ3oiLAogICAgIi4uL3RyYWluLWxhYmVscy1pZHgxLXVieXRlLmd6IgpdCgpkZWYgdHJhaW4oKToKCiAgICB3aXRoIGd6aXAub3BlbihmaWxlc1sxXSwncmInKSBhcyBmZDoKICAgICAgICBhbGwgPSBmZC5yZWFkKCkKCiAgICBlb2ggPSAxNgogICAgaGVhZGVyID0gc3RydWN0LnVucGFjaygnPmlpaWknLGFsbFs6ZW9oXSkKICAgIHByaW50KCJoZWFkZXIgIiArIHN0cihoZWFkZXIpKQoKICAgIGltYWdlc2l6ZSA9IGhlYWRlclsyXSpoZWFkZXJbM10KICAgICNpbWFnZXNpemUgPSAyOCoyOCAgIyA3ODQgcGl4ZWxzCiAgICBwcmludCgiaW1hZ2VzaXplICIgKyBzdHIoaW1hZ2VzaXplKSApCgoKICAgICNpbml0aWFsaXppbmcKICAgIHBpeG5vID0gMAogICAgc3RhcnRwb3MgPSBlb2ggKyBpbWFnZXNpemUgKiBwaXhubwogICAgZW5kcG9zID0gc3RhcnRwb3MgKyBpbWFnZXNpemUKICAgIHRyYWluSW1hZ2VzID0gbnAuZW1wdHkoWzYwMDAwLCAyOCwgMjhdKQoKCiAgICBmb3IgaSBpbiByYW5nZSgwLCBoZWFkZXJbMV0pOgogICAgICAgIGExID0gYWxsW3N0YXJ0cG9zOmVuZHBvc10KICAgICAgICBhMiA9IHN0cnVjdC51bnBhY2soJzc4NEInLCBhMSkKICAgICAgICBhMyA9IG5wLmFycmF5KGEyKS5yZXNoYXBlKDI4LDI4KQogICAgICAgIHRyYWluSW1hZ2VzW2ldID0gYTMKICAgICAgICBzdGFydHBvcyA9IGVuZHBvcyArIDEKICAgICAgICBlbmRwb3MgPSBzdGFydHBvcyArIGltYWdlc2l6ZQogICAgICAgIyBwcmludCgiY291bnQgPSA9IiArIHN0cihjb3VudCkp