Skip to content

Commit

Permalink
simd feat
Browse files Browse the repository at this point in the history
  • Loading branch information
strasdat committed Jun 22, 2024
1 parent 237ee0a commit c17b2aa
Show file tree
Hide file tree
Showing 62 changed files with 3,030 additions and 2,635 deletions.
5 changes: 2 additions & 3 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ jobs:
build:
runs-on: ubuntu-20.04

steps:
steps:
- uses: actions/checkout@v3
with:
submodules: "recursive"
Expand All @@ -29,10 +29,9 @@ jobs:
sudo apt-get update -y
sudo apt-get install -y nasm
cargo doc --no-deps
cargo clippy
cargo fmt --check
cargo test --release
- name: Run sccache stat for check after
shell: bash
run: ${SCCACHE_PATH} --show-stats


36 changes: 36 additions & 0 deletions .github/workflows/main_nightly.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
name: main
on:
push:
branches: [main]
pull_request:

workflow_dispatch:
jobs:
build:
runs-on: ubuntu-20.04

steps:
- uses: actions/checkout@v3
with:
submodules: "recursive"
- name: Run sccache-cache
uses: mozilla-actions/[email protected]
- name: Run sccache stat for check before
shell: bash
run: ${SCCACHE_PATH} --show-stats
- uses: actions-rs/toolchain@v1
with:
toolchain: nightly
- name: cargo
env:
SCCACHE_GHA_ENABLED: "true"
RUSTC_WRAPPER: "sccache"
run: |
sudo apt-get update -y
sudo apt-get install -y nasm
cargo doc --no-deps --featues simd
cargo fmt --check --featues simd
cargo test --release --featues simd
- name: Run sccache stat for check after
shell: bash
run: ${SCCACHE_PATH} --show-stats
22 changes: 22 additions & 0 deletions .github/workflows/pre-commit.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
name: pre-commit

on:
push:
branches:
- main
pull_request:
branches:
- main

jobs:
pre-commit-check:
runs-on: ubuntu-latest
steps:
- name: Checkout workspace
uses: actions/checkout@v3
- name: Install pre-commit and install
run: |
pip install pre-commit
pre-commit install
- name: Run pre-commit checks
run: pre-commit run --all-files
17 changes: 17 additions & 0 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v4.1.0
hooks:
- id: trailing-whitespace
- id: end-of-file-fixer
exclude: (thirdparty/.*)|(SOPHUS_VERSION)|(.txt)$
- id: check-yaml
args: ["--unsafe"]
- id: check-json
- repo: https://github.com/codespell-project/codespell
rev: v2.1.0
hooks:
- id: codespell
args:
- --ignore-words-list
- "te,tring,crate"
19 changes: 9 additions & 10 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -21,17 +21,17 @@ include = [
keywords = ["robotics", "optimization"]
license = "MIT OR Apache-2.0"
repository = "https://github.com/farm-ng/sophus-rs/"
version = "0.6.1"
version = "0.7.0"

[workspace.dependencies]
sophus = {path = "crates/sophus", version = "0.6.1"}
sophus_core = {path = "crates/sophus_core", version = "0.6.1"}
sophus_image = {path = "crates/sophus_image", version = "0.6.1"}
sophus_lie = {path = "crates/sophus_lie", version = "0.6.1"}
sophus_opt = {path = "crates/sophus_opt", version = "0.6.1"}
sophus_pyo3 = {path = "crates/sophus_pyo3", version = "0.6.1"}
sophus_sensor = {path = "crates/sophus_sensor", version = "0.6.1"}
sophus_viewer = {path = "crates/sophus_viewer", version = "0.6.1"}
sophus = {path = "crates/sophus", version = "0.7.0"}
sophus_core = {path = "crates/sophus_core", version = "0.7.0"}
sophus_image = {path = "crates/sophus_image", version = "0.7.0"}
sophus_lie = {path = "crates/sophus_lie", version = "0.7.0"}
sophus_opt = {path = "crates/sophus_opt", version = "0.7.0"}
sophus_pyo3 = {path = "crates/sophus_pyo3", version = "0.7.0"}
sophus_sensor = {path = "crates/sophus_sensor", version = "0.7.0"}
sophus_viewer = {path = "crates/sophus_viewer", version = "0.7.0"}

approx = "0.5"
as-any = "0.3"
Expand All @@ -58,7 +58,6 @@ num-traits = "0.2"
numpy = "0.21"
png = "0.17"
rand = "0.8"
sleef = "0.3"
tokio = {version = "1", features = ["full"]}
typenum = {version = "1.17", features = ["const-generics"]}
wgpu = "0.19"
Expand Down
2 changes: 1 addition & 1 deletion LICENSE-MIT
Original file line number Diff line number Diff line change
Expand Up @@ -23,4 +23,4 @@ SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
DEALINGS IN THE SOFTWARE.
DEALINGS IN THE SOFTWARE.
36 changes: 32 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,35 @@
# sophus-rs

This library is in an early development stage - hence API is highly unstable.
sophus-rs is a Rust library for 2d and 3d geometry for Computer Vision and Robotics applications.
It is a spin-off of the [Sophus](https://github.com/strasdat/Sophus) C++ library which
focuses on **Lie groups** (e.g. rotations and transformations in 2d and 3d).

Sophus-rs currently requires rust nightly. The only nightly feature it uses is `portable-simd`.
It is the intention to move to rust stable once `portable-simd` is stabilized. There is no current
plan to depend on other nightly features.
In addition to Lie groups, sophus-rs also includes other geometric/maths concepts such unit vector,
splines, image classes, camera models as well as a other utilities such as a non-linear least
squares optimization.

## Status

This library is in an early development stage - hence API is highly unstable. It is likely that
existing features will be removed or changed in the future.

However, the intend is to stride for correctness, facilitated using a comprehensive test suite.

## Building

sophus-rs builds on stable.

```toml
[dependencies]
sophus = "0.7.0"
```

To allow for batch types, such as BatchScalarF64, the 'simd' feature is required. This feature
depends on [`portable-simd`](https://doc.rust-lang.org/std/simd/index.html), which is currently
only available on [nightly](https://doc.rust-lang.org/book/appendix-07-nightly-rust.html). There
are plans to use any other nightly features.

```toml
[dependencies]
sophus = { version = "0.7.0", features = ["simd"] }
```
10 changes: 10 additions & 0 deletions crates/sophus/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -30,3 +30,13 @@ nalgebra.workspace = true
ndarray.workspace = true
tokio.workspace = true
wgpu.workspace = true

[features]
simd = [
"sophus_core/simd",
"sophus_image/simd",
"sophus_lie/simd",
"sophus_opt/simd",
"sophus_sensor/simd",
"sophus_viewer/simd",
]
2 changes: 1 addition & 1 deletion crates/sophus/src/lib.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
#![feature(portable_simd)]
#![cfg_attr(feature = "simd", feature(portable_simd))]
#![allow(clippy::needless_range_loop)]

pub mod examples;
Expand Down
7 changes: 6 additions & 1 deletion crates/sophus_core/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -17,5 +17,10 @@ concat-arrays.workspace = true
nalgebra.workspace = true
ndarray.workspace = true
num-traits.workspace = true
sleef.workspace = true
typenum.workspace = true

sleef = { version = "0.3", optional = true }


[features]
simd = ["sleef"]
28 changes: 22 additions & 6 deletions crates/sophus_core/src/calculus/dual.rs
Original file line number Diff line number Diff line change
@@ -1,14 +1,30 @@
/// DualScalar matrix.
/// Dual matrix.
pub mod dual_matrix;
pub use crate::calculus::dual::dual_matrix::DualBatchMatrix;
pub use crate::calculus::dual::dual_matrix::DualMatrix;

/// DualScalar scalar.
#[cfg(feature = "simd")]
/// Dual batch matrix.
pub mod dual_batch_matrix;
#[cfg(feature = "simd")]
pub use crate::calculus::dual::dual_batch_matrix::DualBatchMatrix;

/// Dual scalar.
pub mod dual_scalar;
pub use crate::calculus::dual::dual_scalar::DualBatchScalar;
pub use crate::calculus::dual::dual_scalar::DualScalar;

/// DualScalar vector.
#[cfg(feature = "simd")]
/// Dual batch scalar.
pub mod dual_batch_scalar;
#[cfg(feature = "simd")]
pub use crate::calculus::dual::dual_batch_scalar::DualBatchScalar;


/// Dual vector.
pub mod dual_vector;
pub use crate::calculus::dual::dual_vector::DualBatchVector;
pub use crate::calculus::dual::dual_vector::DualVector;

#[cfg(feature = "simd")]
/// Dual batch vector.
pub mod dual_batch_vector;
#[cfg(feature = "simd")]
pub use crate::calculus::dual::dual_batch_vector::DualBatchVector;
Loading

0 comments on commit c17b2aa

Please sign in to comment.