mirror of
https://github.com/ceres-solver/ceres-solver.git
synced 2026-08-29 08:34:37 +08:00
Use int32 for parameter block sizes.
CostFunction now uses int32 instead of int16 to store the size of its parameter blocks. This is an API breaking change. Change-Id: I032ea583bc7ea4b3009be25d23a3be143749c73e
This commit is contained in:
@@ -53,11 +53,11 @@ residuals and their derivatives. This is done using
|
||||
virtual bool Evaluate(double const* const* parameters,
|
||||
double* residuals,
|
||||
double** jacobians) = 0;
|
||||
const vector<int16>& parameter_block_sizes();
|
||||
const vector<int32>& parameter_block_sizes();
|
||||
int num_residuals() const;
|
||||
|
||||
protected:
|
||||
vector<int16>* mutable_parameter_block_sizes();
|
||||
vector<int32>* mutable_parameter_block_sizes();
|
||||
void set_num_residuals(int num_residuals);
|
||||
};
|
||||
|
||||
|
||||
@@ -115,7 +115,7 @@ class CostFunction {
|
||||
double* residuals,
|
||||
double** jacobians) const = 0;
|
||||
|
||||
const vector<int16>& parameter_block_sizes() const {
|
||||
const vector<int32>& parameter_block_sizes() const {
|
||||
return parameter_block_sizes_;
|
||||
}
|
||||
|
||||
@@ -124,7 +124,7 @@ class CostFunction {
|
||||
}
|
||||
|
||||
protected:
|
||||
vector<int16>* mutable_parameter_block_sizes() {
|
||||
vector<int32>* mutable_parameter_block_sizes() {
|
||||
return ¶meter_block_sizes_;
|
||||
}
|
||||
|
||||
@@ -135,7 +135,7 @@ class CostFunction {
|
||||
private:
|
||||
// Cost function signature metadata: number of inputs & their sizes,
|
||||
// number of outputs (residuals).
|
||||
vector<int16> parameter_block_sizes_;
|
||||
vector<int32> parameter_block_sizes_;
|
||||
int num_residuals_;
|
||||
CERES_DISALLOW_COPY_AND_ASSIGN(CostFunction);
|
||||
};
|
||||
|
||||
@@ -127,7 +127,7 @@ class CostFunctionToFunctor {
|
||||
<< N3 << ", " << N4 << ", " << N5 << ", " << N6 << ", " << N7 << ", "
|
||||
<< N8 << ", " << N9;
|
||||
|
||||
const vector<int16>& parameter_block_sizes =
|
||||
const vector<int32>& parameter_block_sizes =
|
||||
cost_function->parameter_block_sizes();
|
||||
const int num_parameter_blocks =
|
||||
(N0 > 0) + (N1 > 0) + (N2 > 0) + (N3 > 0) + (N4 > 0) +
|
||||
@@ -679,7 +679,7 @@ class CostFunctionToFunctor {
|
||||
template <typename JetT>
|
||||
bool EvaluateWithJets(const JetT** inputs, JetT* output) const {
|
||||
const int kNumParameters = N0 + N1 + N2 + N3 + N4 + N5 + N6 + N7 + N8 + N9;
|
||||
const vector<int16>& parameter_block_sizes =
|
||||
const vector<int32>& parameter_block_sizes =
|
||||
cost_function_->parameter_block_sizes();
|
||||
const int num_parameter_blocks = parameter_block_sizes.size();
|
||||
const int num_residuals = cost_function_->num_residuals();
|
||||
@@ -732,7 +732,7 @@ class CostFunctionToFunctor {
|
||||
output[i].v.setZero();
|
||||
|
||||
for (int j = 0; j < num_parameter_blocks; ++j) {
|
||||
const int16 block_size = parameter_block_sizes[j];
|
||||
const int32 block_size = parameter_block_sizes[j];
|
||||
for (int k = 0; k < parameter_block_sizes[j]; ++k) {
|
||||
output[i].v +=
|
||||
jacobian_blocks[j][i * block_size + k] * inputs[j][k].v;
|
||||
|
||||
@@ -104,7 +104,7 @@ class DynamicNumericDiffCostFunction : public CostFunction {
|
||||
<< "You must call DynamicNumericDiffCostFunction::SetNumResiduals() "
|
||||
<< "before DynamicNumericDiffCostFunction::Evaluate().";
|
||||
|
||||
const vector<int16>& block_sizes = parameter_block_sizes();
|
||||
const vector<int32>& block_sizes = parameter_block_sizes();
|
||||
CHECK(!block_sizes.empty())
|
||||
<< "You must call DynamicNumericDiffCostFunction::AddParameterBlock() "
|
||||
<< "before DynamicNumericDiffCostFunction::Evaluate().";
|
||||
|
||||
@@ -119,7 +119,7 @@ class GradientChecker {
|
||||
// Do a consistency check between the term and the template parameters.
|
||||
CHECK_EQ(M, term->num_residuals());
|
||||
const int num_residuals = M;
|
||||
const vector<int16>& block_sizes = term->parameter_block_sizes();
|
||||
const vector<int32>& block_sizes = term->parameter_block_sizes();
|
||||
const int num_blocks = block_sizes.size();
|
||||
|
||||
CHECK_LE(num_blocks, 5) << "Unable to test functions that take more "
|
||||
|
||||
@@ -47,7 +47,7 @@ namespace internal {
|
||||
|
||||
class BlockStructureProto;
|
||||
|
||||
typedef int16 BlockSize;
|
||||
typedef int32 BlockSize;
|
||||
|
||||
struct Block {
|
||||
Block() : size(-1), position(-1) {}
|
||||
|
||||
@@ -42,9 +42,9 @@ void ExpectCostFunctionsAreEqual(const CostFunction& cost_function,
|
||||
EXPECT_EQ(cost_function.num_residuals(),
|
||||
actual_cost_function.num_residuals());
|
||||
const int num_residuals = cost_function.num_residuals();
|
||||
const vector<int16>& parameter_block_sizes =
|
||||
const vector<int32>& parameter_block_sizes =
|
||||
cost_function.parameter_block_sizes();
|
||||
const vector<int16>& actual_parameter_block_sizes =
|
||||
const vector<int32>& actual_parameter_block_sizes =
|
||||
actual_cost_function.parameter_block_sizes();
|
||||
EXPECT_EQ(parameter_block_sizes.size(),
|
||||
actual_parameter_block_sizes.size());
|
||||
|
||||
@@ -125,7 +125,7 @@ TEST(CovarianceImpl, ComputeCovarianceSparsity) {
|
||||
class UnaryCostFunction: public CostFunction {
|
||||
public:
|
||||
UnaryCostFunction(const int num_residuals,
|
||||
const int16 parameter_block_size,
|
||||
const int32 parameter_block_size,
|
||||
const double* jacobian)
|
||||
: jacobian_(jacobian, jacobian + num_residuals * parameter_block_size) {
|
||||
set_num_residuals(num_residuals);
|
||||
@@ -158,8 +158,8 @@ class UnaryCostFunction: public CostFunction {
|
||||
class BinaryCostFunction: public CostFunction {
|
||||
public:
|
||||
BinaryCostFunction(const int num_residuals,
|
||||
const int16 parameter_block1_size,
|
||||
const int16 parameter_block2_size,
|
||||
const int32 parameter_block1_size,
|
||||
const int32 parameter_block2_size,
|
||||
const double* jacobian1,
|
||||
const double* jacobian2)
|
||||
: jacobian1_(jacobian1,
|
||||
|
||||
@@ -93,7 +93,7 @@ class GradientCheckingCostFunction : public CostFunction {
|
||||
DO_NOT_TAKE_OWNERSHIP,
|
||||
relative_step_size);
|
||||
|
||||
const vector<int16>& parameter_block_sizes =
|
||||
const vector<int32>& parameter_block_sizes =
|
||||
function->parameter_block_sizes();
|
||||
for (int i = 0; i < parameter_block_sizes.size(); ++i) {
|
||||
finite_diff_cost_function->AddParameterBlock(parameter_block_sizes[i]);
|
||||
@@ -117,7 +117,7 @@ class GradientCheckingCostFunction : public CostFunction {
|
||||
int num_residuals = function_->num_residuals();
|
||||
|
||||
// Make space for the jacobians of the two methods.
|
||||
const vector<int16>& block_sizes = function_->parameter_block_sizes();
|
||||
const vector<int32>& block_sizes = function_->parameter_block_sizes();
|
||||
vector<Matrix> term_jacobians(block_sizes.size());
|
||||
vector<Matrix> finite_difference_jacobians(block_sizes.size());
|
||||
vector<double*> term_jacobian_pointers(block_sizes.size());
|
||||
|
||||
@@ -264,7 +264,7 @@ TEST(GradientCheckingCostFunction, SmokeTest) {
|
||||
// Trivial cost function that accepts a single argument.
|
||||
class UnaryCostFunction : public CostFunction {
|
||||
public:
|
||||
UnaryCostFunction(int num_residuals, int16 parameter_block_size) {
|
||||
UnaryCostFunction(int num_residuals, int32 parameter_block_size) {
|
||||
set_num_residuals(num_residuals);
|
||||
mutable_parameter_block_sizes()->push_back(parameter_block_size);
|
||||
}
|
||||
@@ -284,8 +284,8 @@ class UnaryCostFunction : public CostFunction {
|
||||
class BinaryCostFunction: public CostFunction {
|
||||
public:
|
||||
BinaryCostFunction(int num_residuals,
|
||||
int16 parameter_block1_size,
|
||||
int16 parameter_block2_size) {
|
||||
int32 parameter_block1_size,
|
||||
int32 parameter_block2_size) {
|
||||
set_num_residuals(num_residuals);
|
||||
mutable_parameter_block_sizes()->push_back(parameter_block1_size);
|
||||
mutable_parameter_block_sizes()->push_back(parameter_block2_size);
|
||||
@@ -305,9 +305,9 @@ class BinaryCostFunction: public CostFunction {
|
||||
class TernaryCostFunction: public CostFunction {
|
||||
public:
|
||||
TernaryCostFunction(int num_residuals,
|
||||
int16 parameter_block1_size,
|
||||
int16 parameter_block2_size,
|
||||
int16 parameter_block3_size) {
|
||||
int32 parameter_block1_size,
|
||||
int32 parameter_block2_size,
|
||||
int32 parameter_block3_size) {
|
||||
set_num_residuals(num_residuals);
|
||||
mutable_parameter_block_sizes()->push_back(parameter_block1_size);
|
||||
mutable_parameter_block_sizes()->push_back(parameter_block2_size);
|
||||
|
||||
@@ -224,7 +224,7 @@ ResidualBlock* ProblemImpl::AddResidualBlock(
|
||||
cost_function->parameter_block_sizes().size());
|
||||
|
||||
// Check the sizes match.
|
||||
const vector<int16>& parameter_block_sizes =
|
||||
const vector<int32>& parameter_block_sizes =
|
||||
cost_function->parameter_block_sizes();
|
||||
|
||||
if (!options_.disable_all_safety_checks) {
|
||||
|
||||
@@ -56,7 +56,7 @@ namespace internal {
|
||||
// Trivial cost function that accepts a single argument.
|
||||
class UnaryCostFunction : public CostFunction {
|
||||
public:
|
||||
UnaryCostFunction(int num_residuals, int16 parameter_block_size) {
|
||||
UnaryCostFunction(int num_residuals, int32 parameter_block_size) {
|
||||
set_num_residuals(num_residuals);
|
||||
mutable_parameter_block_sizes()->push_back(parameter_block_size);
|
||||
}
|
||||
@@ -76,8 +76,8 @@ class UnaryCostFunction : public CostFunction {
|
||||
class BinaryCostFunction: public CostFunction {
|
||||
public:
|
||||
BinaryCostFunction(int num_residuals,
|
||||
int16 parameter_block1_size,
|
||||
int16 parameter_block2_size) {
|
||||
int32 parameter_block1_size,
|
||||
int32 parameter_block2_size) {
|
||||
set_num_residuals(num_residuals);
|
||||
mutable_parameter_block_sizes()->push_back(parameter_block1_size);
|
||||
mutable_parameter_block_sizes()->push_back(parameter_block2_size);
|
||||
@@ -97,9 +97,9 @@ class BinaryCostFunction: public CostFunction {
|
||||
class TernaryCostFunction: public CostFunction {
|
||||
public:
|
||||
TernaryCostFunction(int num_residuals,
|
||||
int16 parameter_block1_size,
|
||||
int16 parameter_block2_size,
|
||||
int16 parameter_block3_size) {
|
||||
int32 parameter_block1_size,
|
||||
int32 parameter_block2_size,
|
||||
int32 parameter_block3_size) {
|
||||
set_num_residuals(num_residuals);
|
||||
mutable_parameter_block_sizes()->push_back(parameter_block1_size);
|
||||
mutable_parameter_block_sizes()->push_back(parameter_block2_size);
|
||||
|
||||
@@ -43,9 +43,9 @@ namespace internal {
|
||||
class TernaryCostFunction: public CostFunction {
|
||||
public:
|
||||
TernaryCostFunction(int num_residuals,
|
||||
int16 parameter_block1_size,
|
||||
int16 parameter_block2_size,
|
||||
int16 parameter_block3_size) {
|
||||
int32 parameter_block1_size,
|
||||
int32 parameter_block2_size,
|
||||
int32 parameter_block3_size) {
|
||||
set_num_residuals(num_residuals);
|
||||
mutable_parameter_block_sizes()->push_back(parameter_block1_size);
|
||||
mutable_parameter_block_sizes()->push_back(parameter_block2_size);
|
||||
|
||||
Reference in New Issue
Block a user