Initial commit

This commit is contained in:
2026-07-03 16:37:12 +07:00
commit 63b8c1ea8b
1931 changed files with 640587 additions and 0 deletions

View File

@@ -0,0 +1,586 @@
# CeresSharp Implementation Progress
## 📋 Tổng Quan
**Mục tiêu**: Implement C# wrapper library cho Ceres Solver 2.2.0 thông qua C API (`libceres_wrapper.so`)
**Target Framework**: .NET 10.0
**Platform**: Linux only
**API Style**: High-level API với classes/objects giống C++ API của Ceres
## 📊 Progress Tracking
### Overall Progress: 100% (15/15 modules)
| Module | Status | Progress | Notes |
|--------|--------|----------|-------|
| **Core Foundation** | ✅ Complete | 100% | Error handling ✅, enums ✅, constants ✅ |
| **Constants** | ✅ Complete | 100% | Default values ✅, mathematical constants ✅ |
| **SafeHandles** | ✅ Complete | 100% | All SafeHandles implemented ✅ |
| **Problem** | ✅ Complete | 100% | Core problem operations ✅ |
| **SolverOptions** | ✅ Complete | 100% | Solver configuration ✅ |
| **SolverSummary** | ✅ Complete | 100% | Solver results ✅ |
| **Cost Functions** | ✅ Complete | 100% | AutoDiff, NumericDiff ✅, memory management ✅, validation ✅ |
| **Loss Functions** | ✅ Complete | 100% | All loss functions ✅ |
| **Manifolds** | ✅ Complete | 100% | All manifolds ✅ |
| **Interpolators** | ✅ Complete | 100% | BiCubic, Cubic ✅ |
| **Problem Options** | ✅ Complete | 100% | Advanced problem config ✅ |
| **Parameter Bounds** | ✅ Complete | 100% | Lower/upper bounds ✅ |
| **Covariance** | ✅ Complete | 100% | Covariance estimation ✅ |
| **Gradient Checker** | ✅ Complete | 100% | Gradient validation ✅ |
| **Context** | ✅ Complete | 100% | Performance optimization ✅ |
| **Callbacks** | ✅ Complete | 100% | Iteration callback ✅, evaluation callback ✅, memory management ✅ |
---
## 🏗️ Architecture
### Design Principles
1. **High-level API**: Classes/objects giống C++ API của Ceres
2. **Exception-based**: Tất cả errors được wrap trong exceptions
3. **Safe Handles**: IDisposable pattern với SafeHandle
4. **Delegates**: Callbacks sử dụng delegates với GCHandle pinning
5. **Type Safety**: Strong typing, nullable reference types
### Project Structure
```
CeresSharp/
├── Core/
│ ├── Problem.cs
│ ├── SolverOptions.cs
│ ├── SolverSummary.cs
│ ├── CostFunction.cs
│ ├── LossFunction.cs
│ ├── Manifold.cs
│ ├── AutoDiffManifold.cs (⭐ NEW)
│ ├── BiCubicInterpolator.cs
│ └── CubicInterpolator.cs
├── Advanced/
│ ├── ProblemOptions.cs
│ ├── Covariance.cs
│ ├── GradientChecker.cs
│ └── Context.cs
├── Native/
│ ├── CeresNative.cs (P/Invoke declarations)
│ └── SafeHandles/
│ ├── ProblemHandle.cs
│ ├── SolverOptionsHandle.cs
│ └── ...
├── Exceptions/
│ └── CeresException.cs
├── Enums/
│ ├── LinearSolverType.cs
│ ├── MinimizerType.cs
│ └── ...
└── IMPLEMENTATION_PROGRESS.md (this file)
```
---
## 📝 Implementation Details
### 1. Core Foundation ✅ (100%)
**Status**: Complete
**Tasks**:
- [x] Error codes enum (CeresErrorCode)
- [x] Custom exceptions (CeresException)
- [x] Core enums (LinearSolverType, MinimizerType, TerminationType, PreconditionerType, NumericDiffMethod)
- [x] Additional enums (TrustRegionStrategyType, DoglegType, LoggingType, LineSearchType, LineSearchDirectionType, NonlinearConjugateGradientType, SparseLinearAlgebraLibraryType, DenseLinearAlgebraLibraryType, CovarianceAlgorithmType)
- [x] Error message mapping (via ceres_wrapper_get_error_message)
**Files**:
- [x] `Exceptions/CeresException.cs` - Custom exception với error codes
- [x] `Enums/LinearSolverType.cs` - 9 solver types
- [x] `Enums/MinimizerType.cs` - Trust Region và Line Search
- [x] `Enums/TerminationType.cs` - 4 termination types
- [x] `Enums/PreconditionerType.cs` - 7 preconditioner types
- [x] `Enums/NumericDiffMethod.cs` - Forward, Central, Ridders
- [x] `Enums/TrustRegionStrategyType.cs` - LevenbergMarquardt, Dogleg
- [x] `Enums/DoglegType.cs` - TraditionalDogleg, SubspaceDogleg
- [x] `Enums/LoggingType.cs` - Silent, PerMinimizerIteration
- [x] `Enums/LineSearchType.cs` - Armijo, Wolfe
- [x] `Enums/LineSearchDirectionType.cs` - 4 direction types
- [x] `Enums/NonlinearConjugateGradientType.cs` - 3 CG types
- [x] `Enums/SparseLinearAlgebraLibraryType.cs` - 5 library types
- [x] `Enums/DenseLinearAlgebraLibraryType.cs` - 3 library types
- [x] `Enums/CovarianceAlgorithmType.cs` - DenseSvd, SparseQr
- [x] `Core/Constants.cs` - Default values và mathematical constants
---
### 2. SafeHandles ✅ (100%)
**Status**: Complete
**Tasks**:
- [x] Base SafeHandle class (BaseSafeHandle)
- [x] ProblemHandle
- [x] SolverOptionsHandle
- [x] SolverSummaryHandle
- [x] CostFunctionHandle
- [x] LossFunctionHandle
- [x] ManifoldHandle
- [x] InterpolatorHandle (BiCubic và Cubic)
- [x] ProblemOptionsHandle
- [x] CovarianceOptionsHandle
- [x] CovarianceHandle
- [x] GradientCheckerOptionsHandle
- [x] GradientCheckerHandle
- [x] ContextHandle
**Files**:
- [x] `Native/SafeHandles/BaseSafeHandle.cs` - Abstract base class với ReleaseNativeHandle
- [x] `Native/SafeHandles/ProblemHandle.cs` - Problem resource management
- [x] `Native/SafeHandles/SolverOptionsHandle.cs` - SolverOptions resource management
- [x] `Native/SafeHandles/SolverSummaryHandle.cs` - SolverSummary resource management
- [x] `Native/SafeHandles/CostFunctionHandle.cs` - CostFunction resource management
- [x] `Native/SafeHandles/LossFunctionHandle.cs` - LossFunction resource management
- [x] `Native/SafeHandles/ManifoldHandle.cs` - Manifold resource management
- [x] `Native/SafeHandles/InterpolatorHandle.cs` - Interpolator resource management (supports both BiCubic và Cubic)
- [x] `Native/SafeHandles/ProblemOptionsHandle.cs` - ProblemOptions resource management
- [x] `Native/SafeHandles/CovarianceOptionsHandle.cs` - CovarianceOptions resource management
- [x] `Native/SafeHandles/CovarianceHandle.cs` - Covariance resource management
- [x] `Native/SafeHandles/GradientCheckerOptionsHandle.cs` - GradientCheckerOptions resource management
- [x] `Native/SafeHandles/GradientCheckerHandle.cs` - GradientChecker resource management
- [x] `Native/SafeHandles/ContextHandle.cs` - Context resource management
- [x] `Native/CeresNative.cs` - Complete P/Invoke declarations (216+ functions)
---
### 3. Problem ✅ (100%)
**Status**: Complete
**Tasks**:
- [x] Problem class với IDisposable
- [x] AddParameterBlock (với error handling)
- [x] SetParameterBlockConstant/Variable
- [x] RemoveParameterBlock
- [x] AddResidualBlock (với CostFunction và LossFunction objects)
- [x] RemoveResidualBlock
- [x] SetManifold (với Manifold object)
- [x] SetParameterBounds (lower/upper)
- [x] GetParameterBounds (lower/upper)
- [x] Query methods (NumParameterBlocks, NumResidualBlocks, NumParameters, NumResiduals)
- [x] HasParameterBlock
- [x] IsParameterBlockConstant
- [x] GetParameterBlockSize
- [x] GetParameterBlockTangentSize
- [x] HasManifold
- [x] GetManifoldHandle
- [x] Solve method (với SolverOptions và returns SolverSummary)
**Files**:
- [x] `Core/Problem.cs` - Complete implementation với 20+ methods
**API Count**: 20+ methods
---
### 4. SolverOptions ✅ (100%)
**Status**: Complete
**Tasks**:
- [x] SolverOptions class với IDisposable
- [x] Linear solver type (getter/setter)
- [x] Minimizer type (getter/setter)
- [x] Iterations (max_num_iterations)
- [x] Threads (num_threads)
- [x] Tolerances (function, gradient, parameter)
- [x] Trust region (initial, max, min radius, strategy type, dogleg type)
- [x] Preconditioner type
- [x] Line search options (type, direction type, NCG type, LBFGS rank, step contractions, etc.)
- [x] LBFGS options (max_lbfgs_rank)
- [x] Linear solver options (sparse/dense library types, max/min iterations, tolerance)
- [x] Inner iterations (use_inner_iterations, tolerance)
- [x] Timing (max_solver_time_in_seconds)
- [x] Validation (IsValid method)
- [x] Other options (use_nonmonotonic_steps, logging_type, etc.)
- [x] Memory management cho iteration callbacks
**Files**:
- [x] `Core/SolverOptions.cs` - Complete implementation với 50+ properties
**API Count**: 50+ properties/methods
---
### 5. SolverSummary ✅ (100%)
**Status**: Complete
**Tasks**:
- [x] SolverSummary class với IDisposable
- [x] Termination type (getter)
- [x] Message (getter với StringBuilder)
- [x] Cost values (initial, final, cost_change)
- [x] Iteration counts (iterations, num_successful_steps, num_unsuccessful_steps, num_inner_iteration_steps)
- [x] Timing information (total, preprocessor, minimizer, postprocessor, linear_solver time)
- [x] Statistics (num_parameter_blocks, num_parameters, num_effective_parameters, num_residual_blocks, num_residuals)
- [x] Full report (getter với StringBuilder)
- [x] Support cho callbacks (temporary handle creation)
**Files**:
- [x] `Core/SolverSummary.cs` - Complete implementation với 20+ properties
**API Count**: 20+ properties
---
### 6. Cost Functions ✅ (100%)
**Status**: Complete
**Tasks**:
- [x] CostFunction base class với IDisposable
- [x] AutoDiffCostFunction (với callback marshalling)
- [x] DynamicAutoDiffCostFunction (với callback marshalling)
- [x] NumericDiffCostFunction (với callback marshalling)
- [x] DynamicNumericDiffCostFunction (với callback marshalling)
- [x] Callback handling với GCHandle pinning
- [x] Memory management (wrapper handles và native callback handles)
- [x] Enhanced validation (parameter block sizes, residuals)
- [x] Error handling và resource cleanup on failure
- [x] Proper exception messages
**Files**:
- [x] `Core/CostFunction.cs` - Complete implementation với all 4 cost function types
**API Count**: 4 cost function types + delegates
---
### 7. Loss Functions ✅ (100%)
**Status**: Complete
**Tasks**:
- [x] LossFunction base class với IDisposable
- [x] TrivialLoss (no parameters)
- [x] HuberLoss (scaling parameter a)
- [x] CauchyLoss (scaling parameter a)
- [x] SoftLOneLoss (scaling parameter a)
- [x] ArctanLoss (scaling parameter a)
- [x] TolerantLoss (scaling parameters a, b)
**Files**:
- [x] `Core/LossFunction.cs` - Complete implementation với all 6 loss function types
**API Count**: 6 loss function types
---
### 8. Manifolds ✅ (100%)
**Status**: Complete
**Tasks**:
- [x] Manifold base class với IDisposable
- [x] QuaternionManifold (for 3D rotations)
- [x] SphereManifold (với dimension parameter)
- [x] LineManifold (với dimension parameter)
- [x] EuclideanManifold (với dimension parameter)
- [x] SubsetManifold (với constant subset indices và ambient size)
- [x] ProductManifold (combine multiple manifolds)
- [x] **AutoDiffManifold** (callback-based custom manifolds) - ⭐ **NEW**
- [x] PlusOperation và MinusOperation delegates
- [x] Callback marshalling (C# delegates → C callbacks)
- [x] Memory management với GCHandle pinning
- [x] Proper validation (ambientSize > 0, tangentSize > 0, tangentSize <= ambientSize)
- [x] Error handling và resource cleanup
- [x] AmbientSize và TangentSize properties
- [x] Proper validation cho parameters
**Files**:
- [x] `Core/Manifold.cs` - Complete implementation với all 6 standard manifold types
- [x] `Core/AutoDiffManifold.cs` - ⭐ **NEW** - AutoDiff manifold với callback-based API
**API Count**: 7 manifold types (6 standard + AutoDiffManifold) + 2 properties + 2 delegates
---
### 9. Interpolators ✅ (100%)
**Status**: Complete
**Tasks**:
- [x] BiCubicInterpolator (2D interpolation)
- [x] CubicInterpolator (1D interpolation)
- [x] Evaluate methods với gradients (out parameters)
- [x] Evaluate methods without gradients (overloads)
- [x] Proper data validation (array sizes, dimensions)
**Files**:
- [x] `Core/BiCubicInterpolator.cs` - 2D cubic interpolation
- [x] `Core/CubicInterpolator.cs` - 1D cubic interpolation
**API Count**: 2 interpolator types + evaluate methods
---
### 10. Problem Options ✅ (100%)
**Status**: Complete
**Tasks**:
- [x] ProblemOptions class với IDisposable
- [x] Ownership settings (cost_function, loss_function, manifold ownership)
- [x] Fast removal (enable_fast_removal)
- [x] Safety checks (disable_all_safety_checks)
- [x] Evaluation callback (SetEvaluationCallback với proper memory management)
- [x] Context (SetContext method)
- [x] Memory management cho evaluation callbacks
**Files**:
- [x] `Advanced/ProblemOptions.cs` - Complete implementation
- [x] `Advanced/EvaluationCallback.cs` - Evaluation callback delegate
**API Count**: 6 properties + 2 methods
---
### 11. Parameter Bounds ✅ (100%)
**Status**: Complete
**Tasks**:
- [x] SetParameterLowerBound (với index validation)
- [x] SetParameterUpperBound (với index validation)
- [x] GetParameterLowerBound (returns -infinity if not set)
- [x] GetParameterUpperBound (returns +infinity if not set)
- [x] Proper validation (null checks, index bounds)
**Files**:
- [x] `Core/Problem.cs` - Methods implemented trong Problem class
**API Count**: 4 methods
---
### 12. Covariance ✅ (100%)
**Status**: Complete
**Tasks**:
- [x] CovarianceOptions class với IDisposable (num_threads, sparse_library_type, algorithm_type, min_reciprocal_condition_number, null_space_rank, apply_loss_function)
- [x] Covariance class với IDisposable (create với/không options)
- [x] Compute method (với Problem, CovarianceOptions, và parameter blocks) - ⭐ **ENHANCED** - Now uses error codes and throws exceptions
- [x] GetCovarianceBlock (between two parameter blocks) - ⭐ **ENHANCED** - Now uses error codes and throws exceptions
- [x] GetCovarianceMatrix (for multiple parameter blocks) - ⭐ **ENHANCED** - Now uses error codes and throws exceptions
- [x] Proper array marshalling với GCHandle pinning
- [x] Error handling với CeresException (error codes + error messages) - ⭐ **NEW**
**Files**:
- [x] `Advanced/CovarianceOptions.cs` - Complete implementation
- [x] `Advanced/Covariance.cs` - Complete implementation với enhanced error handling
**API Count**: 2 classes + 8+ methods/properties
**Recent Updates (2024)**:
- ✅ Enhanced error handling: All methods now use `CeresErrorCode` instead of `bool`
- ✅ Exception-based API: Methods throw `CeresException` on failure instead of returning false
- ✅ Error messages: All methods now provide detailed error messages via StringBuilder
---
### 13. Gradient Checker ✅ (100%)
**Status**: Complete
**Tasks**:
- [x] GradientCheckerOptions class với IDisposable (gradient_check_relative_precision, numeric_derivative_relative_step_size)
- [x] GradientChecker class với IDisposable (create với CostFunction, Manifolds, và Options)
- [x] Probe method (với parameters, relative_precision, và error message output) - ⭐ **ENHANCED** - Now uses error codes internally
- [x] Probe method overload (without error message) - ⭐ **NEW** - Simplified API
- [x] Proper array marshalling với GCHandle pinning
- [x] Support cho null manifolds array
- [x] Error handling với CeresException (error codes + error messages) - ⭐ **NEW**
- [x] Gradient mismatch handling (InvalidParameter = expected, other errors = exceptions) - ⭐ **NEW**
**Files**:
- [x] `Advanced/GradientCheckerOptions.cs` - Complete implementation
- [x] `Advanced/GradientChecker.cs` - Complete implementation với enhanced error handling
**API Count**: 2 classes + 4+ methods/properties (added Probe overload)
**Recent Updates (2024)**:
- ✅ Enhanced error handling: Probe method now uses `CeresErrorCode` internally
- ✅ Exception-based API: Non-gradient-mismatch errors throw `CeresException`
- ✅ Backward compatibility: Maintained `bool` return type with overload for error message
- ✅ Error messages: Detailed error messages available via overload
---
### 14. Context ✅ (100%)
**Status**: Complete
**Tasks**:
- [x] Context class với IDisposable (for performance optimization)
- [x] Integration với ProblemOptions (SetContext method)
- [x] Proper resource management
**Files**:
- [x] `Advanced/Context.cs` - Complete implementation
**API Count**: 1 class + 1 method (SetContext trong ProblemOptions)
---
### 15. Callbacks ✅ (100%)
**Status**: Complete
**Tasks**:
- [x] IterationCallback delegate (trong Callbacks class)
- [x] EvaluationCallback delegate (trong Advanced namespace)
- [x] GCHandle pinning với proper memory management
- [x] Integration với SolverOptions (SetIterationCallback extension method)
- [x] Integration với ProblemOptions (SetEvaluationCallback method)
- [x] Memory management (track và cleanup handles trong Dispose)
- [x] Proper callback marshalling (C# delegates → C callbacks)
**Files**:
- [x] `Core/Callbacks.cs` - IterationCallback delegate và SolverOptionsExtensions
- [x] `Advanced/EvaluationCallback.cs` - EvaluationCallback delegate
- [x] `Advanced/ProblemOptions.cs` - SetEvaluationCallback implementation
**API Count**: 2 delegates + 2 methods
---
### 16. Constants ✅ (100%)
**Status**: Complete
**Tasks**:
- [x] Mathematical constants (Pi)
- [x] SolverOptions default values (tolerances, iterations, trust region, etc.)
- [x] Line search default values
- [x] Trust region default values
- [x] Linear solver default values
- [x] Inner iterations default values
- [x] Covariance default values
- [x] Gradient checker default values
- [x] Numeric diff default values
**Files**:
- [x] `Core/Constants.cs` - Complete constants class với all default values
**API Count**: 30+ constants
---
**Status**: Complete
**Tasks**:
- [x] IterationCallback delegate (trong Callbacks class)
- [x] EvaluationCallback delegate (trong Advanced namespace)
- [x] GCHandle pinning với proper memory management
- [x] Integration với SolverOptions (SetIterationCallback extension method)
- [x] Integration với ProblemOptions (SetEvaluationCallback method)
- [x] Memory management (track và cleanup handles trong Dispose)
- [x] Proper callback marshalling (C# delegates → C callbacks)
**Files**:
- [x] `Core/Callbacks.cs` - IterationCallback delegate và SolverOptionsExtensions
- [x] `Advanced/EvaluationCallback.cs` - EvaluationCallback delegate
- [x] `Advanced/ProblemOptions.cs` - SetEvaluationCallback implementation
**API Count**: 2 delegates + 2 methods
---
## 🔧 Technical Decisions
### Memory Management
- ✅ SafeHandle pattern cho tất cả native resources (14 SafeHandle classes)
- ✅ IDisposable pattern cho high-level classes
- ✅ Automatic cleanup khi object bị dispose
- ✅ GCHandle tracking và cleanup cho callbacks
- ✅ Resource cleanup on creation failure
- ✅ No memory leaks
### Error Handling
- ✅ Tất cả errors → CeresException
- ✅ Error codes được map thành meaningful exceptions
- ✅ Null checks với ArgumentNullException
- ✅ Parameter validation với ArgumentException
- ✅ Specific error messages cho từng failure case
-**Enhanced error handling for advanced features** - ⭐ **NEW**
- ✅ Covariance methods: All use error codes and throw exceptions
- ✅ GradientChecker.Probe: Uses error codes internally, throws exceptions for non-mismatch errors
- ✅ Error messages: All methods provide detailed error messages via StringBuilder
### Callbacks
- ✅ Delegates cho C# callbacks (IterationCallback, EvaluationCallback, AutoDiffCostFunctionCallback, NumericDiffCostFunctionCallback, AutoDiffManifoldPlusOperation, AutoDiffManifoldMinusOperation)
- ✅ GCHandle.Alloc() để pin delegates
- ✅ GCHandle.Free() trong Dispose
- ✅ Proper callback marshalling (C# → C)
- ✅ Memory management cho callback handles (track trong parent objects)
### Type Safety
- ✅ Strong typing với enums (13 enum types)
- ✅ Nullable reference types
- ✅ Parameter validation (null checks, bounds checks, positive number checks)
- ✅ Array size validation
- ✅ Index bounds checking
---
## 📚 Reference
- **C API Header**: `ipc/CeresWrapper/ceres_wrapper.h`
- **C API Implementation**: `ipc/CeresWrapper/ceres_wrapper.cc`
- **C API Tests**: `ipc/CeresWrapper/ceres_wrapper_test.c`
- **Evaluation**: `ipc/CeresWrapper/CSHARP_WRAPPER_FINAL_EVALUATION.md`
---
## 🚀 Next Steps
1. ✅ Create project structure
2. ✅ Implement Core Foundation (Error handling, Enums)
3. ✅ Implement SafeHandles
4. ✅ Implement Problem class
5. ✅ Implement SolverOptions và SolverSummary
6. ✅ Implement Cost Functions
7. ✅ Implement Loss Functions
8. ✅ Implement Manifolds
9. ✅ Implement Interpolators
10. ✅ Implement Advanced features
11. ⏳ Testing và validation
12. ⏳ Performance optimization
13. ⏳ Documentation completion
14. ⏳ Example projects
---
## 📊 Final Statistics
- **Total Files Created**: 50+ C# files
- **Total Lines of Code**: ~5,000+ lines
- **APIs Implemented**: 220+ functions (including AutoDiffManifold)
- **Enums**: 13 types
- **SafeHandles**: 14 classes
- **Core Classes**: 9 classes (added AutoDiffManifold)
- **Advanced Classes**: 6 classes
- **Manifold Types**: 7 types (6 standard + AutoDiffManifold)
- **Build Status**: ✅ **SUCCESS**
---
**Last Updated**: 2024-12-19 (Updated with Error Handling Enhancement)
**Status**: ✅ **100% Complete** - Including AutoDiffManifold + Enhanced Error Handling (Ready for Cartographer Integration)
**Recent Updates (2024)**:
- ✅ Enhanced error handling for Covariance methods (Compute, GetCovarianceBlock, GetCovarianceMatrix)
- ✅ Enhanced error handling for GradientChecker.Probe method
- ✅ All advanced features now have comprehensive error reporting with error codes and messages
- ✅ Exception-based API for better error handling in C# code
- ✅ Backward compatibility maintained for GradientChecker.Probe