#odometry = np.column_stack((odometry_velocity.getAxis(0), odometry_velocity.getAxis(1), odometry_velocity.getAxis(2)))

gp_odometry = np.column_stack((gp_odometry_position.getAxis(0), gp_odometry_position.getAxis(1), gp_odometry_position.getAxis(2)))
#gp_odometry = np.column_stack((gp_odometry_velocity.getAxis(0), gp_odometry_velocity.getAxis(1), gp_odometry_velocity.getAxis(2)))


##################
## Block Filter ##
##################
sampling_frequency = 1.0/mean(reference_position.delta[0:100])
size_block = 4 * sampling_frequency
number_blocks = int(len(reference_position.delta)/size_block)


# Split inertia (one axis info per column)
inertia, inertiastd = data.input_reduction(inertia, number_blocks)

# Split orientation (one axis info per column)
orient, orientstd = data.input_reduction(orient, number_blocks)

# Split reference (one axis info per column)
reference, referencestd = data.input_reduction(reference, number_blocks)

# Split odometry (one axis info per column)
odometry, odometrystd = data.input_reduction(odometry, number_blocks)


# Split odometry (one axis info per column)
gp_odometry, gp_odometrystd = data.input_reduction(gp_odometry, number_blocks)

#reference = np.column_stack((reference_position.getAxis(0), reference_position.getAxis(1), reference_position.getAxis(2)))
reference = np.column_stack((reference_velocity.getAxis(0), reference_velocity.getAxis(1), reference_velocity.getAxis(2)))

#odometry = np.column_stack((odometry_position.getAxis(0), odometry_position.getAxis(1), odometry_position.getAxis(2)))
odometry = np.column_stack((odometry_velocity.getAxis(0), odometry_velocity.getAxis(1), odometry_velocity.getAxis(2)))


#########################
## SPLIT INPUT TEST    ##
#########################
sampling_frequency = 1.0/mean(reference_velocity.delta[0:100])
size_block = 5 * sampling_frequency
number_blocks = int(len(reference_velocity.delta)/size_block)

# Split joints (one joint info per column)
joints, jointstd = data.input_reduction(joints, number_blocks)

# Split inertia (one axis info per column)
inertia, inertiastd = data.input_reduction(inertia, number_blocks)

# Split orientation (one axis info per column)
orient, orientstd = data.input_reduction(orient, number_blocks)

# Split reference (one axis info per column)
reference, referencestd = data.input_reduction(reference, number_blocks)

# Split odometry (one axis info per column)
odometry, odometrystd = data.input_reduction(odometry, number_blocks)

error = np.absolute(reference - odometry)
## LOAD OUTPUT   ##
###################
variance = np.column_stack(
    (gp_odometry_velocity.var[:, 0], gp_odometry_velocity.var[:, 1], gp_odometry_velocity.var[:, 2])
)
std_deviation = np.column_stack((np.sqrt(variance[:, 0]), np.sqrt(variance[:, 1]), np.sqrt(variance[:, 2])))

#########################
## SPLIT INPUT TEST    ##
#########################
sampling_frequency = 1.0 / mean(gp_odometry_velocity.delta[0:100])
size_block = 4 * sampling_frequency
number_blocks = int(len(gp_odometry_velocity.delta) / size_block)

# Split joints (one joint info per column)
joints, jointstd = data.input_reduction(joints, number_blocks)

# Split inertia (one axis info per column)
inertia, inertiastd = data.input_reduction(inertia, number_blocks)

# Split orientation (one axis info per column)
orient, orientstd = data.input_reduction(orient, number_blocks)

# Split std deviation (one axis info per column)
deviation, deviationstd = data.input_reduction(std_deviation, number_blocks)

#########################
## GAUSSIAN PROCESS    ##
#########################

# GP Multidimensional Input