def concat_generate(genargs=[{}], input_seq_len=10, output_seq_len=10, savedir='out'):
    # make output directory
    if not os.path.isdir(savedir):
        os.makedirs(savedir)

    seqs = [None for i in genargs]
    for i,args in enumerate(genargs):
        print('--------------------------')
        print('Generating for dataset {0}'.format(i))
        print('--------------------------')

        seqs[i] = generator(**args)

    seqs = numpy.concatenate(seqs, axis=0)
    seqnum = seqs.shape[0]
    zmins, zmaxs = normalize(seqs)

    if savedir is not '':
        for i in xrange(100):
            for d in xrange(seqs.shape[2]):
                outfile = savedir + "/" + str(i) + "-" + str(d) + ".gif"
                gifmaker.save_gif(seqs[i, :, d, :, :], outfile)
                print('  --> saved to {0}'.format(outfile))

    if savedir is not '':
        cut1 = int(seqnum*0.8)
        cut2 = int(seqnum*0.9)
        save_to_numpy_format(seqs[:cut1], input_seq_len, output_seq_len, zmaxs, zmins, savedir + "/dataset-train.npz")
        save_to_numpy_format(seqs[cut1:cut2], input_seq_len, output_seq_len, zmaxs, zmins, savedir + "/dataset-valid.npz")
        save_to_numpy_format(seqs[cut2:], input_seq_len, output_seq_len, zmaxs, zmins, savedir + "/dataset-test.npz")
    else:
        return zmins, zmaxs, seqs
def generate(seqnum=15000, seqdim=(20, 2, 120, 120), offset=(0,0,0), begin='201408010000', end='201408312330', step=30, input_seq_len=10, output_seq_len=10, mode='grayscale', savedir='out'):
    # make output directory
    if not os.path.isdir(savedir):
        os.makedirs(savedir)

    seqs = generator(**locals())
    seqnum = seqs.shape[0]
    zmins, zmaxs = normalize(seqs)

    if savedir is not '':
        for i in xrange(100):
            for d in xrange(seqdim[1]):
                outfile = savedir + "/" + str(i) + "-" + str(d) + ".gif"
                gifmaker.save_gif(seqs[i, :, d, :, :], outfile)
                print('  --> saved to {0}'.format(outfile))

    if savedir is not '':
        cut1 = int(seqnum*0.8)
        cut2 = int(seqnum*0.9)
        save_to_numpy_format(seqs[:cut1], input_seq_len, output_seq_len, zmaxs, zmins, savedir + "/dataset-train.npz")
        save_to_numpy_format(seqs[cut1:cut2], input_seq_len, output_seq_len, zmaxs, zmins, savedir + "/dataset-valid.npz")
        save_to_numpy_format(seqs[cut2:], input_seq_len, output_seq_len, zmaxs, zmins, savedir + "/dataset-test.npz")
    else:
        return zmins, zmaxs, seqs