from pca import PCA

if __name__ == '__main__':
    resman.start('junk', diary=True)
    datasets = loadUpsonData('../data/upson_rovio_1/train_15_50000.pkl.gz',
                             '../data/upson_rovio_1/test_15_50000.pkl.gz')

    #meanTrain = mean(datasets[0][0])
    #stdTrain  = std(datasets[0][0])
    #datasets[0][0] = (datasets[0][0] - meanTrain) / stdTrain
    #datasets[2][0] = (datasets[2][0] - meanTrain) / stdTrain

    pca = PCA(datasets[0][0])
    datasets[0][0] = pca.toZca(datasets[0][0], None, epsilon=.1)
    datasets[2][0] = pca.toZca(datasets[2][0], None, epsilon=.1)

    print 'done loading.'

    test_rbm(
        datasets=datasets,
        training_epochs=45,
        img_dim=15,  # must match actual size of training data
        n_hidden=int(sys.argv[1]),
        learning_rate=float(sys.argv[2]),
        output_dir=resman.rundir,
        quickHack=False,
        visibleModel='real',
        initWfactor=.01,
        pcaDims=None)
    resman.stop()
    print 'done loading.'

    for useXY in [False, True]:
        for size in sizes:
            print 'useXY', useXY, ', Size:', size
            thisDir = os.path.join(resman.rundir, '%s_size_%05d' % ('xy' if useXY else 'x', size))
            os.mkdir(thisDir)
            if useXY:
                thisDataset = (sizedDatasetsXY[size], (array([]), None), testDatasetXY)
            else:
                thisDataset = (sizedDatasetsX[size],  (array([]), None), testDatasetX)

            # this automatically saves the RBM to the given directory
            rbm, meanCosts = test_rbm(datasets = thisDataset,
                                      training_epochs = 45,
                                      img_dim = img_dim,
                                      n_hidden = 400, 
                                      learning_rate = .002, 
                                      output_dir = thisDir,
                                      quickHack = False,
                                      initWfactor = .02, 
                                      imgPlotFunction = lambda xx: xx[:,0:img_dim*img_dim],  # HACK: plot first slice
                                      )


if __name__ == '__main__':
    resman.start('junk', diary = True)
    main()
    resman.stop()