{"id":14992112,"url":"https://github.com/light-curve/ceres-solver-rs","last_synced_at":"2025-12-12T12:07:01.692Z","repository":{"id":65365550,"uuid":"590650788","full_name":"light-curve/ceres-solver-rs","owner":"light-curve","description":"Rust bindings for Ceres Solver","archived":false,"fork":false,"pushed_at":"2025-11-03T18:01:33.000Z","size":166,"stargazers_count":27,"open_issues_count":6,"forks_count":6,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-11-14T03:26:13.426Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/light-curve.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE-APACHE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2023-01-18T22:14:28.000Z","updated_at":"2025-11-06T12:35:18.000Z","dependencies_parsed_at":"2023-05-17T09:45:37.846Z","dependency_job_id":"3368b2bb-4c12-42b3-a460-e76effad9dd6","html_url":"https://github.com/light-curve/ceres-solver-rs","commit_stats":{"total_commits":71,"total_committers":2,"mean_commits":35.5,"dds":"0.014084507042253502","last_synced_commit":"05332341fc8f51ab787602311ad2d13eff8d47b6"},"previous_names":[],"tags_count":27,"template":false,"template_full_name":null,"purl":"pkg:github/light-curve/ceres-solver-rs","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/light-curve%2Fceres-solver-rs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/light-curve%2Fceres-solver-rs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/light-curve%2Fceres-solver-rs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/light-curve%2Fceres-solver-rs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/light-curve","download_url":"https://codeload.github.com/light-curve/ceres-solver-rs/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/light-curve%2Fceres-solver-rs/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":27682509,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-12-12T02:00:06.775Z","response_time":129,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-09-24T15:00:44.533Z","updated_at":"2025-12-12T12:07:01.646Z","avatar_url":"https://github.com/light-curve.png","language":"Rust","funding_links":[],"categories":["Scientific Computation"],"sub_categories":[],"readme":"# `ceres-solver-rs`\n## Rust bindings for [Ceres Solver](http://ceres-solver.org)\n\n[![Test](https://github.com/light-curve/ceres-solver-rs/actions/workflows/test.yml/badge.svg)](https://github.com/light-curve/ceres-solver-rs/actions/workflows/test.yml)\n[![pre-commit.ci status](https://results.pre-commit.ci/badge/github/light-curve/ceres-solver-rs/master.svg)](https://results.pre-commit.ci/latest/github/light-curve/ceres-solver-rs/master)\n![docs.rs](https://img.shields.io/docsrs/ceres-solver)\n![Crates.io](https://img.shields.io/crates/v/ceres-solver)\n\n```shell\ncargo add ceres-solver --features=source\n```\n\nCeres Solver is a C++ library for large optimization problems.\nIt can be used to solve Non-linear Least Squares problems with constraints and general optimization problems.\nHere we provide a Rust binding for this library.\n\nThe bindings require Ceres Solver version 2.2, but the bindings may work with older or new versions.\nPlease submit an issue if you need a support of other versions.\n\nThis project consists of three crates:\n- `ceres-solver` is a safe Rust bindings\n- `ceres-solver-sys` is an unsafe Rust bindings written with the usage of [`cxx`](https://lib.rs/crates/cxx)\n- `ceres-solver-src` is an optional no-code crate to build and distribute a minimal static Ceres Solver library\n\nTo build Ceres Solver statically and link it to your project, use `source` Cargo feature, which would add `ceres-solver-src` dependency into your project.\n\n### Status of the binding support\n\nCurrent implementation of the binding is not complete.\nThe following list shows the status of the binding support:\n\n- Non-linear Least squares\n  - [x] `Problem` - basic class for NLLS, supports adding residual blocks, setting boundary conditions, marking parameter blocks to be constant/variable, and solving the problem\n  - [x] `CostFunction` - user provides both residual and Jacobian\n  - [ ] `SizedCostFunction` - same but with the residual vector shape is known at compile time\n  - [ ] `AutoDiffCostFunction` - user provides residual and Jacobian is computed by automatic differentiation\n  - [ ] `DynamicAutoDiffCostFunction` - same but with the residual vector shape is unknown at compile time\n  - [ ] `NumericDiffCostFunction` - user provides residual and Jacobian is computed by numerical differentiation\n  - [ ] `CostFunctionToFunctor` and `DynamicCostFunctionToFunctor` - adapter to use `CostFunction` as a mix of all other cost functions\n  - [ ] `ConditionedCostFunction` - adapter to use `CostFunction` with different conditioning\n  - [ ] `GradientChecker` - helper class to check the correctness of the Jacobian\n  - [ ] `NormalPrior` - changes a cost function to use a covariance matrix instead of a simple scalar product\n  - [x] `LossFunction` - a function applied to the squared norm of the residual vector, both custom and Ceres stack loss functions are supported\n  - [ ] `Manifold`, `AutoDiffManifold`\n  - [ ] `EvaluationCallback`\n- Solver - `Solver` class itself is not implemented, but the following nested classes are supported:\n  - `Solver::Options`\n    - [x] Minimizer options\n    - [x] Line search options\n    - [x] Trust region options\n    - [x] Linear solver options\n    - [x] Preconditioner options\n    - [x] Sparse and dense linear algebra library selection\n    - [x] Setting of the number of threads\n    - [ ] Bundle adjustment options\n    - [x] Logging options\n    - [x] Validation of the options\n    - [ ] Callbacks\n  - `Solver::Summary`\n    - [x] Brief and full reports\n    - [x] Cost function evaluation statistics\n    - [ ] Time statistics\n- [ ] Jets\n- [ ] Covariance estimation\n- [ ] General unconstrained minimization\n\nPlease don't hesitate to create an issue to request prioritization of any functionality you need.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flight-curve%2Fceres-solver-rs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flight-curve%2Fceres-solver-rs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flight-curve%2Fceres-solver-rs/lists"}