text: import os
  import struct
  import numpy as np
  
  
  class MNISTLoader(object):
      def __init__(self, path='./data'):
          self.path = path
  
          self.test_img_fname = 't10k-images-idx3-ubyte'
          self.test_lbl_fname = 't10k-labels-idx1-ubyte'
  
          self.train_img_fname = 'train-images-idx3-ubyte'
          self.train_lbl_fname = 'train-labels-idx1-ubyte'
  
      def load_testing(self):
          images, labels = self.load(os.path.join(self.path, self.test_img_fname),
                                  os.path.join(self.path, self.test_lbl_fname))
          return images, labels
  
      def load_training(self):
          images, labels = self.load(os.path.join(self.path, self.train_img_fname),
                                  os.path.join(self.path, self.train_lbl_fname))
          return images, labels
  
      @classmethod
      def load(cls, path_img, path_lbl):
          with open(path_lbl, 'rb') as file:
              magic, size = struct.unpack(">II", file.read(8))
              if magic != 2049:
                  raise ValueError('Magic number mismatch, expected 2049,'
                                   'got {}'.format(magic))
              labels = np.fromfile(file, dtype=np.uint8)
  
          with open(path_img, 'rb') as file:
              magic, size, rows, cols = struct.unpack(">IIII", file.read(16))
              if magic != 2051:
                  raise ValueError('Magic number mismatch, expected 2051,'
                                   'got {}'.format(magic))
              image_data = np.fromfile(file, dtype=np.uint8)
  
          images = [0] * size
          for i in range(size):
              images[i] = image_data[i * rows * cols:(i + 1) * rows * cols]
  
          return images, labels
  
      @classmethod
      def display(cls, img, width=28, threshold=200):
          render = ''
          for i in range(len(img)):
              if i % width == 0:
                  render += '\n'
              if img[i] > threshold:
                  render += '@'
              else:
                  render += '.'
          return render
  