'Generate training dataset.  Produce random (integer) sequences X, and corresponding
expected output sequences Y = generate_output_sequence(X).
Return xy_data, y_data (both of type uint32)
xy_data = numpy array of shape [num_points, in_seq_len + out_seq_len], with each point being X + Y
y_data  = numpy array of shape [num_points, out_seq_len]'

def generate_trainig_data(self, num_points):

    x_data = np.random.randint(0, self.in_max_int, size=(num_points, self.in_seq_len))
    x_data = x_data.astype(np.uint32)
    y_data = [self.sequence_pattern.generate_output_sequence(x) for x in x_data]
    y_data = np.array(y_data)
    xy_data = np.append(x_data, y_data, axis=1)
    return (xy_data, y_data)
