[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [50655] trunk/blender/extern/libmv: Ceres: upgrade to version 1.3.0

Sergey Sharybin sergey.vfx at gmail.com
Sun Sep 16 14:24:37 CEST 2012


Revision: 50655
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=50655
Author:   nazgul
Date:     2012-09-16 12:24:37 +0000 (Sun, 16 Sep 2012)
Log Message:
-----------
Ceres: upgrade to version 1.3.0

This should contain real fixes for Windows, making it more robost and hopefully
faster (due to proper collection port) on that platform.

Also hack to fix Eigen alignment shouldn't be needed anymore.

Also on platforms which have got broken TR1 collections it's better to define
CERES_NO_TR1 instead of using Boost hacks. Made changes to Scons and CMake,
but can not check if this indeed works since i don't have OSX here.

Modified Paths:
--------------
    trunk/blender/extern/libmv/libmv/tracking/track_region.cc
    trunk/blender/extern/libmv/third_party/ceres/CMakeLists.txt
    trunk/blender/extern/libmv/third_party/ceres/ChangeLog
    trunk/blender/extern/libmv/third_party/ceres/SConscript
    trunk/blender/extern/libmv/third_party/ceres/bundle.sh
    trunk/blender/extern/libmv/third_party/ceres/files.txt
    trunk/blender/extern/libmv/third_party/ceres/include/ceres/autodiff_cost_function.h
    trunk/blender/extern/libmv/third_party/ceres/include/ceres/cost_function.h
    trunk/blender/extern/libmv/third_party/ceres/include/ceres/internal/fixed_array.h
    trunk/blender/extern/libmv/third_party/ceres/include/ceres/internal/macros.h
    trunk/blender/extern/libmv/third_party/ceres/include/ceres/internal/manual_constructor.h
    trunk/blender/extern/libmv/third_party/ceres/include/ceres/internal/port.h
    trunk/blender/extern/libmv/third_party/ceres/include/ceres/iteration_callback.h
    trunk/blender/extern/libmv/third_party/ceres/include/ceres/jet.h
    trunk/blender/extern/libmv/third_party/ceres/include/ceres/loss_function.h
    trunk/blender/extern/libmv/third_party/ceres/include/ceres/numeric_diff_cost_function.h
    trunk/blender/extern/libmv/third_party/ceres/include/ceres/problem.h
    trunk/blender/extern/libmv/third_party/ceres/include/ceres/rotation.h
    trunk/blender/extern/libmv/third_party/ceres/include/ceres/solver.h
    trunk/blender/extern/libmv/third_party/ceres/include/ceres/types.h
    trunk/blender/extern/libmv/third_party/ceres/internal/ceres/block_evaluate_preparer.cc
    trunk/blender/extern/libmv/third_party/ceres/internal/ceres/block_evaluate_preparer.h
    trunk/blender/extern/libmv/third_party/ceres/internal/ceres/block_jacobi_preconditioner.cc
    trunk/blender/extern/libmv/third_party/ceres/internal/ceres/block_jacobian_writer.cc
    trunk/blender/extern/libmv/third_party/ceres/internal/ceres/block_random_access_dense_matrix.cc
    trunk/blender/extern/libmv/third_party/ceres/internal/ceres/block_random_access_dense_matrix.h
    trunk/blender/extern/libmv/third_party/ceres/internal/ceres/block_random_access_matrix.h
    trunk/blender/extern/libmv/third_party/ceres/internal/ceres/block_random_access_sparse_matrix.cc
    trunk/blender/extern/libmv/third_party/ceres/internal/ceres/block_random_access_sparse_matrix.h
    trunk/blender/extern/libmv/third_party/ceres/internal/ceres/block_sparse_matrix.cc
    trunk/blender/extern/libmv/third_party/ceres/internal/ceres/block_sparse_matrix.h
    trunk/blender/extern/libmv/third_party/ceres/internal/ceres/block_structure.cc
    trunk/blender/extern/libmv/third_party/ceres/internal/ceres/canonical_views_clustering.cc
    trunk/blender/extern/libmv/third_party/ceres/internal/ceres/cgnr_solver.h
    trunk/blender/extern/libmv/third_party/ceres/internal/ceres/collections_port.h
    trunk/blender/extern/libmv/third_party/ceres/internal/ceres/compressed_row_jacobian_writer.cc
    trunk/blender/extern/libmv/third_party/ceres/internal/ceres/compressed_row_sparse_matrix.cc
    trunk/blender/extern/libmv/third_party/ceres/internal/ceres/compressed_row_sparse_matrix.h
    trunk/blender/extern/libmv/third_party/ceres/internal/ceres/conditioned_cost_function.cc
    trunk/blender/extern/libmv/third_party/ceres/internal/ceres/conjugate_gradients_solver.cc
    trunk/blender/extern/libmv/third_party/ceres/internal/ceres/conjugate_gradients_solver.h
    trunk/blender/extern/libmv/third_party/ceres/internal/ceres/corrector.cc
    trunk/blender/extern/libmv/third_party/ceres/internal/ceres/dense_qr_solver.cc
    trunk/blender/extern/libmv/third_party/ceres/internal/ceres/dense_qr_solver.h
    trunk/blender/extern/libmv/third_party/ceres/internal/ceres/dense_sparse_matrix.cc
    trunk/blender/extern/libmv/third_party/ceres/internal/ceres/dense_sparse_matrix.h
    trunk/blender/extern/libmv/third_party/ceres/internal/ceres/detect_structure.cc
    trunk/blender/extern/libmv/third_party/ceres/internal/ceres/detect_structure.h
    trunk/blender/extern/libmv/third_party/ceres/internal/ceres/evaluator.cc
    trunk/blender/extern/libmv/third_party/ceres/internal/ceres/evaluator.h
    trunk/blender/extern/libmv/third_party/ceres/internal/ceres/file.cc
    trunk/blender/extern/libmv/third_party/ceres/internal/ceres/gradient_checking_cost_function.cc
    trunk/blender/extern/libmv/third_party/ceres/internal/ceres/graph.h
    trunk/blender/extern/libmv/third_party/ceres/internal/ceres/implicit_schur_complement.cc
    trunk/blender/extern/libmv/third_party/ceres/internal/ceres/implicit_schur_complement.h
    trunk/blender/extern/libmv/third_party/ceres/internal/ceres/iterative_schur_complement_solver.cc
    trunk/blender/extern/libmv/third_party/ceres/internal/ceres/linear_least_squares_problems.cc
    trunk/blender/extern/libmv/third_party/ceres/internal/ceres/linear_solver.cc
    trunk/blender/extern/libmv/third_party/ceres/internal/ceres/linear_solver.h
    trunk/blender/extern/libmv/third_party/ceres/internal/ceres/local_parameterization.cc
    trunk/blender/extern/libmv/third_party/ceres/internal/ceres/loss_function.cc
    trunk/blender/extern/libmv/third_party/ceres/internal/ceres/matrix_proto.h
    trunk/blender/extern/libmv/third_party/ceres/internal/ceres/minimizer.h
    trunk/blender/extern/libmv/third_party/ceres/internal/ceres/mutex.h
    trunk/blender/extern/libmv/third_party/ceres/internal/ceres/normal_prior.cc
    trunk/blender/extern/libmv/third_party/ceres/internal/ceres/parameter_block.h
    trunk/blender/extern/libmv/third_party/ceres/internal/ceres/partitioned_matrix_view.cc
    trunk/blender/extern/libmv/third_party/ceres/internal/ceres/problem_impl.cc
    trunk/blender/extern/libmv/third_party/ceres/internal/ceres/problem_impl.h
    trunk/blender/extern/libmv/third_party/ceres/internal/ceres/program.cc
    trunk/blender/extern/libmv/third_party/ceres/internal/ceres/program.h
    trunk/blender/extern/libmv/third_party/ceres/internal/ceres/program_evaluator.h
    trunk/blender/extern/libmv/third_party/ceres/internal/ceres/random.h
    trunk/blender/extern/libmv/third_party/ceres/internal/ceres/residual_block.cc
    trunk/blender/extern/libmv/third_party/ceres/internal/ceres/residual_block_utils.cc
    trunk/blender/extern/libmv/third_party/ceres/internal/ceres/residual_block_utils.h
    trunk/blender/extern/libmv/third_party/ceres/internal/ceres/runtime_numeric_diff_cost_function.cc
    trunk/blender/extern/libmv/third_party/ceres/internal/ceres/schur_complement_solver.cc
    trunk/blender/extern/libmv/third_party/ceres/internal/ceres/schur_complement_solver.h
    trunk/blender/extern/libmv/third_party/ceres/internal/ceres/schur_eliminator_impl.h
    trunk/blender/extern/libmv/third_party/ceres/internal/ceres/schur_ordering.cc
    trunk/blender/extern/libmv/third_party/ceres/internal/ceres/solver.cc
    trunk/blender/extern/libmv/third_party/ceres/internal/ceres/solver_impl.cc
    trunk/blender/extern/libmv/third_party/ceres/internal/ceres/solver_impl.h
    trunk/blender/extern/libmv/third_party/ceres/internal/ceres/sparse_matrix.h
    trunk/blender/extern/libmv/third_party/ceres/internal/ceres/sparse_normal_cholesky_solver.cc
    trunk/blender/extern/libmv/third_party/ceres/internal/ceres/sparse_normal_cholesky_solver.h
    trunk/blender/extern/libmv/third_party/ceres/internal/ceres/stringprintf.h
    trunk/blender/extern/libmv/third_party/ceres/internal/ceres/suitesparse.cc
    trunk/blender/extern/libmv/third_party/ceres/internal/ceres/suitesparse.h
    trunk/blender/extern/libmv/third_party/ceres/internal/ceres/triplet_sparse_matrix.cc
    trunk/blender/extern/libmv/third_party/ceres/internal/ceres/triplet_sparse_matrix.h
    trunk/blender/extern/libmv/third_party/ceres/internal/ceres/types.cc
    trunk/blender/extern/libmv/third_party/ceres/internal/ceres/visibility.cc
    trunk/blender/extern/libmv/third_party/ceres/internal/ceres/visibility_based_preconditioner.cc
    trunk/blender/extern/libmv/third_party/ceres/internal/ceres/visibility_based_preconditioner.h
    trunk/blender/extern/libmv/third_party/ceres/patches/collections_port.h.mingw.patch
    trunk/blender/extern/libmv/third_party/ceres/patches/series

Added Paths:
-----------
    trunk/blender/extern/libmv/third_party/ceres/include/ceres/crs_matrix.h
    trunk/blender/extern/libmv/third_party/ceres/include/ceres/fpclassify.h
    trunk/blender/extern/libmv/third_party/ceres/internal/ceres/array_utils.cc
    trunk/blender/extern/libmv/third_party/ceres/internal/ceres/array_utils.h
    trunk/blender/extern/libmv/third_party/ceres/internal/ceres/cxsparse.cc
    trunk/blender/extern/libmv/third_party/ceres/internal/ceres/cxsparse.h
    trunk/blender/extern/libmv/third_party/ceres/internal/ceres/dense_normal_cholesky_solver.cc
    trunk/blender/extern/libmv/third_party/ceres/internal/ceres/dense_normal_cholesky_solver.h
    trunk/blender/extern/libmv/third_party/ceres/internal/ceres/dogleg_strategy.cc
    trunk/blender/extern/libmv/third_party/ceres/internal/ceres/dogleg_strategy.h
    trunk/blender/extern/libmv/third_party/ceres/internal/ceres/generate_eliminator_specialization.py
    trunk/blender/extern/libmv/third_party/ceres/internal/ceres/levenberg_marquardt_strategy.cc
    trunk/blender/extern/libmv/third_party/ceres/internal/ceres/levenberg_marquardt_strategy.h
    trunk/blender/extern/libmv/third_party/ceres/internal/ceres/polynomial_solver.cc
    trunk/blender/extern/libmv/third_party/ceres/internal/ceres/polynomial_solver.h
    trunk/blender/extern/libmv/third_party/ceres/internal/ceres/split.h
    trunk/blender/extern/libmv/third_party/ceres/internal/ceres/trust_region_minimizer.cc
    trunk/blender/extern/libmv/third_party/ceres/internal/ceres/trust_region_minimizer.h
    trunk/blender/extern/libmv/third_party/ceres/internal/ceres/trust_region_strategy.cc
    trunk/blender/extern/libmv/third_party/ceres/internal/ceres/trust_region_strategy.h

Removed Paths:
-------------
    trunk/blender/extern/libmv/third_party/ceres/internal/ceres/levenberg_marquardt.cc
    trunk/blender/extern/libmv/third_party/ceres/internal/ceres/levenberg_marquardt.h
    trunk/blender/extern/libmv/third_party/ceres/patches/msvc_isfinite.patch

Modified: trunk/blender/extern/libmv/libmv/tracking/track_region.cc
===================================================================
--- trunk/blender/extern/libmv/libmv/tracking/track_region.cc	2012-09-16 12:23:00 UTC (rev 50654)
+++ trunk/blender/extern/libmv/libmv/tracking/track_region.cc	2012-09-16 12:24:37 UTC (rev 50655)
@@ -41,6 +41,80 @@
 #include "libmv/multiview/homography.h"
 #include "libmv/numeric/numeric.h"
 
+namespace ceres {
+// A jet traits class to make it easier to work with mixed auto / numeric diff.
+template<typename T>
+struct JetOps {
+  static bool IsScalar() {
+    return true;
+  }
+  static T GetScalar(const T& t) {
+    return t;
+  }
+  static void SetScalar(const T& scalar, T* t) {
+    *t = scalar;
+  }
+  static void ScaleDerivative(double scale_by, T *value) {
+    // For double, there is no derivative to scale.
+  }
+};
+
+template<typename T, int N>
+struct JetOps<Jet<T, N> > {
+  static bool IsScalar() {
+    return false;
+  }
+  static T GetScalar(const Jet<T, N>& t) {
+    return t.a;
+  }
+  static void SetScalar(const T& scalar, Jet<T, N>* t) {
+    t->a = scalar;
+  }
+  static void ScaleDerivative(double scale_by, Jet<T, N> *value) {
+    value->v *= scale_by;
+  }
+};
+
+template<typename FunctionType, int kNumArgs, typename ArgumentType>
+struct Chain {
+  static ArgumentType Rule(const FunctionType &f,
+                           const FunctionType dfdx[kNumArgs],
+                           const ArgumentType x[kNumArgs]) {
+    // In the default case of scalars, there's nothing to do since there are no
+    // derivatives to propagate. 
+    return f;
+  }
+};
+
+// XXX Add documentation here!
+template<typename FunctionType, int kNumArgs, typename T, int N>
+struct Chain<FunctionType, kNumArgs, Jet<T, N> > {
+  static Jet<T, N> Rule(const FunctionType &f,
+                        const FunctionType dfdx[kNumArgs],
+                        const Jet<T, N> x[kNumArgs]) {
+    // x is itself a function of another variable ("z"); what this function
+    // needs to return is "f", but with the derivative with respect to z
+    // attached to the jet. So combine the derivative part of x's jets to form
+    // a Jacobian matrix between x and z (i.e. dx/dz).
+    Eigen::Matrix<T, kNumArgs, N> dxdz;
+    for (int i = 0; i < kNumArgs; ++i) {
+      dxdz.row(i) = x[i].v.transpose();
+    }
+
+    // Map the input gradient dfdx into an Eigen row vector.
+    Eigen::Map<const Eigen::Matrix<FunctionType, 1, kNumArgs> >
+        vector_dfdx(dfdx, 1, kNumArgs);
+
+    // Now apply the chain rule to obtain df/dz. Combine the derivative with
+    // the scalar part to obtain f with full derivative information.
+    Jet<T, N> jet_f;
+    jet_f.a = f;
+    jet_f.v = vector_dfdx.template cast<T>() * dxdz;  // Also known as dfdz.
+    return jet_f;
+  }
+};
+}
+
 namespace libmv {
 
 using ceres::Jet;

Modified: trunk/blender/extern/libmv/third_party/ceres/CMakeLists.txt
===================================================================
--- trunk/blender/extern/libmv/third_party/ceres/CMakeLists.txt	2012-09-16 12:23:00 UTC (rev 50654)
+++ trunk/blender/extern/libmv/third_party/ceres/CMakeLists.txt	2012-09-16 12:24:37 UTC (rev 50655)
@@ -38,6 +38,7 @@
 )
 
 set(SRC
+	internal/ceres/array_utils.cc
 	internal/ceres/block_evaluate_preparer.cc
 	internal/ceres/block_jacobian_writer.cc
 	internal/ceres/block_jacobi_preconditioner.cc
@@ -53,16 +54,19 @@
 	internal/ceres/conditioned_cost_function.cc
 	internal/ceres/conjugate_gradients_solver.cc
 	internal/ceres/corrector.cc
+	internal/ceres/cxsparse.cc
+	internal/ceres/dense_normal_cholesky_solver.cc
 	internal/ceres/dense_qr_solver.cc
 	internal/ceres/dense_sparse_matrix.cc
 	internal/ceres/detect_structure.cc
+	internal/ceres/dogleg_strategy.cc
 	internal/ceres/evaluator.cc
 	internal/ceres/file.cc
 	internal/ceres/generated/schur_eliminator_d_d_d.cc
 	internal/ceres/gradient_checking_cost_function.cc
 	internal/ceres/implicit_schur_complement.cc
 	internal/ceres/iterative_schur_complement_solver.cc
-	internal/ceres/levenberg_marquardt.cc
+	internal/ceres/levenberg_marquardt_strategy.cc
 	internal/ceres/linear_least_squares_problems.cc
 	internal/ceres/linear_operator.cc
 	internal/ceres/linear_solver.cc
@@ -70,6 +74,7 @@
 	internal/ceres/loss_function.cc
 	internal/ceres/normal_prior.cc
 	internal/ceres/partitioned_matrix_view.cc
+	internal/ceres/polynomial_solver.cc
 	internal/ceres/problem.cc
 	internal/ceres/problem_impl.cc
 	internal/ceres/program.cc
@@ -88,6 +93,8 @@
 	internal/ceres/stringprintf.cc
 	internal/ceres/suitesparse.cc
 	internal/ceres/triplet_sparse_matrix.cc
+	internal/ceres/trust_region_minimizer.cc
+	internal/ceres/trust_region_strategy.cc
 	internal/ceres/types.cc
 	internal/ceres/visibility_based_preconditioner.cc
 	internal/ceres/visibility.cc
@@ -96,6 +103,8 @@
 	include/ceres/ceres.h
 	include/ceres/conditioned_cost_function.h
 	include/ceres/cost_function.h
+	include/ceres/crs_matrix.h
+	include/ceres/fpclassify.h
 	include/ceres/internal/autodiff.h
 	include/ceres/internal/eigen.h
 	include/ceres/internal/fixed_array.h
@@ -114,6 +123,7 @@
 	include/ceres/sized_cost_function.h
 	include/ceres/solver.h
 	include/ceres/types.h
+	internal/ceres/array_utils.h
 	internal/ceres/block_evaluate_preparer.h
 	internal/ceres/block_jacobian_writer.h
 	internal/ceres/block_jacobi_preconditioner.h
@@ -131,10 +141,13 @@
 	internal/ceres/compressed_row_sparse_matrix.h
 	internal/ceres/conjugate_gradients_solver.h
 	internal/ceres/corrector.h
+	internal/ceres/cxsparse.h
 	internal/ceres/dense_jacobian_writer.h
+	internal/ceres/dense_normal_cholesky_solver.h
 	internal/ceres/dense_qr_solver.h
 	internal/ceres/dense_sparse_matrix.h
 	internal/ceres/detect_structure.h
+	internal/ceres/dogleg_strategy.h
 	internal/ceres/evaluator.h
 	internal/ceres/file.h
 	internal/ceres/gradient_checking_cost_function.h
@@ -143,7 +156,7 @@
 	internal/ceres/implicit_schur_complement.h
 	internal/ceres/integral_types.h
 	internal/ceres/iterative_schur_complement_solver.h
-	internal/ceres/levenberg_marquardt.h
+	internal/ceres/levenberg_marquardt_strategy.h
 	internal/ceres/linear_least_squares_problems.h
 	internal/ceres/linear_operator.h
 	internal/ceres/linear_solver.h
@@ -153,6 +166,7 @@
 	internal/ceres/mutex.h
 	internal/ceres/parameter_block.h
 	internal/ceres/partitioned_matrix_view.h
+	internal/ceres/polynomial_solver.h
 	internal/ceres/problem_impl.h
 	internal/ceres/program_evaluator.h
 	internal/ceres/program.h
@@ -168,10 +182,13 @@
 	internal/ceres/solver_impl.h
 	internal/ceres/sparse_matrix.h
 	internal/ceres/sparse_normal_cholesky_solver.h
+	internal/ceres/split.h
 	internal/ceres/stl_util.h
 	internal/ceres/stringprintf.h
 	internal/ceres/suitesparse.h
 	internal/ceres/triplet_sparse_matrix.h
+	internal/ceres/trust_region_minimizer.h
+	internal/ceres/trust_region_strategy.h
 	internal/ceres/visibility_based_preconditioner.h
 	internal/ceres/visibility.h
 )
@@ -217,8 +234,17 @@
 	-D"CERES_HASH_NAMESPACE_START=namespace std { namespace tr1 {"
 	-D"CERES_HASH_NAMESPACE_END=}}"
 	-DCERES_NO_SUITESPARSE
-	-DCERES_DONT_HAVE_PROTOCOL_BUFFERS
+	-DCERES_NO_CXSPARSE
+	-DCERES_NO_PROTOCOL_BUFFERS
 	-DCERES_RESTRICT_SCHUR_SPECIALIZATION
 )
 
+if(APPLE)
+	if( STREQUAL "10.5")
+		add_definitions(
+			-DCERES_NO_TR1
+		)
+	endif()
+endif()
+
 blender_add_lib(extern_ceres "${SRC}" "${INC}" "${INC_SYS}")

Modified: trunk/blender/extern/libmv/third_party/ceres/ChangeLog
===================================================================
--- trunk/blender/extern/libmv/third_party/ceres/ChangeLog	2012-09-16 12:23:00 UTC (rev 50654)
+++ trunk/blender/extern/libmv/third_party/ceres/ChangeLog	2012-09-16 12:24:37 UTC (rev 50655)
@@ -1,324 +1,524 @@
-commit ca72152362ae1f4b9928c012e74b4d49d094a4ca
-Merge: d297f8d 0a04199
-Author: Keir Mierle <mierle at gmail.com>
-Date:   Wed May 9 13:10:59 2012 -0700
+commit 552f9f85bba89f00ca307bc18fbda1dff23bd0e4
+Author: Sameer Agarwal <sameeragarwal at google.com>
+Date:   Fri Aug 31 07:27:22 2012 -0700
 
-    Merge branch 'master' into windows
+    Various minor bug fixes to the solver logic.
+    
+    1. CostFunction returning false is handled better.
+    If only the cost is being evaluated, it is possible to
+    use the false value as an infinite value signal/outside
+    a region of validity. This allows a weak form of constraint
+    handling. Useful for example in handling infinities.
+    
+    2. Changed the way how the slop around zero when model_cost
+    is larger than the current cost. Relative instead of absolute
+    tolerances are used. The same logic is propagated how the
+    corresponding clamping of the model_cost is done.
+    
+    3. Fixed a minor indexing bug in nist.cc.
+    
+    4. Some minor logging fixes to nist.cc to make it more
+    compatible with the rest of ceres.
+    
+    Together these changes, take the successful solve count from
+    41/54 to 46/54 and eliminate all NUMERICAL_FAILURE problems.
+    
+    Change-Id: If94170ea4731af5b243805c0200963dd31aa94a7
 
-commit 0a04199ef279cc9ea97f665fed8e7fae717813c3
-Merge: fdeb577 f2571f1
-Author: Keir Mierle <mierle at gmail.com>
-Date:   Wed May 9 12:54:56 2012 -0700
+commit 0b776b5cc9634d3b88d623905b96006f7647ce3e
+Author: Sameer Agarwal <sameeragarwal at google.com>
+Date:   Thu Aug 30 15:26:17 2012 -0700
 
-    Merge branch 'master' of https://code.google.com/p/ceres-solver
+    Update docs.
+    
+    Change-Id: I69d50bcd37aed3bea2190ca614f023e83172901b
 
-commit fdeb5772cc5eeebca4d776d220d80cc91b6d0f74
-Author: Keir Mierle <mierle at gmail.com>
-Date:   Wed May 9 07:38:07 2012 -0700
+commit 2d7176ad7c8fb7238ca8abd6de73415d95877494
+Author: Petter Strandmark <petter.strandmark at gmail.com>
+Date:   Thu Aug 30 19:51:24 2012 -0700
 
-    Support varying numbers of residuals in autodiff.
+    max_consecutive_nonmonotonic_steps should be int
     
-    This commit modifies the only function in autodiff that takes a
-    templated number of outputs (i.e. residuals) and makes that
-    template parameter a normal parameter. With that change, it
-    is a trivial matter to support a dynamic number of residuals.
+    Found via Visual Studio warning.
     
-    The API for dynamic residuals is to pass a fake number of
-    residuals as the second template argument to
-    AutoDiffCostFunction, and to pass the real number of
-    parameters as a second constructor argument.
+    Change-Id: Id2cd7de562dfc8cd35df5d5f5220dd2d7350eb2c
 

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list