pointpca2 0.2.2__tar.gz → 0.3.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {pointpca2-0.2.2 → pointpca2-0.3.1}/Cargo.lock +9 -9
- {pointpca2-0.2.2 → pointpca2-0.3.1}/Cargo.toml +3 -3
- {pointpca2-0.2.2 → pointpca2-0.3.1}/PKG-INFO +5 -5
- {pointpca2-0.2.2 → pointpca2-0.3.1}/README.md +4 -4
- pointpca2-0.3.1/src/lib.rs +53 -0
- pointpca2-0.2.2/src/lib.rs +0 -73
- {pointpca2-0.2.2 → pointpca2-0.3.1}/.gitignore +0 -0
- {pointpca2-0.2.2 → pointpca2-0.3.1}/LICENSE +0 -0
- {pointpca2-0.2.2 → pointpca2-0.3.1}/environment.yml +0 -0
- {pointpca2-0.2.2 → pointpca2-0.3.1}/examples/example_compute_predictors.py +0 -0
- {pointpca2-0.2.2 → pointpca2-0.3.1}/examples/pcs/amphoriskos_vox10.ply +0 -0
- {pointpca2-0.2.2 → pointpca2-0.3.1}/examples/pcs/tmc13_amphoriskos_vox10_dec_geom01_text01_octree-predlift.ply +0 -0
- {pointpca2-0.2.2 → pointpca2-0.3.1}/pyproject.toml +0 -0
- {pointpca2-0.2.2 → pointpca2-0.3.1}/python/pointpca2/__init__.py +0 -0
|
@@ -277,7 +277,7 @@ checksum = "254a5372af8fc138e36684761d3c0cdb758a4410e938babcff1c860ce14ddbfc"
|
|
|
277
277
|
dependencies = [
|
|
278
278
|
"proc-macro2",
|
|
279
279
|
"quote",
|
|
280
|
-
"syn 2.0.
|
|
280
|
+
"syn 2.0.71",
|
|
281
281
|
]
|
|
282
282
|
|
|
283
283
|
[[package]]
|
|
@@ -450,18 +450,18 @@ dependencies = [
|
|
|
450
450
|
|
|
451
451
|
[[package]]
|
|
452
452
|
name = "pointpca2"
|
|
453
|
-
version = "0.
|
|
453
|
+
version = "0.3.1"
|
|
454
454
|
dependencies = [
|
|
455
455
|
"nalgebra",
|
|
456
456
|
"numpy",
|
|
457
|
-
"pointpca2-
|
|
457
|
+
"pointpca2-rs",
|
|
458
458
|
"pyo3",
|
|
459
459
|
]
|
|
460
460
|
|
|
461
461
|
[[package]]
|
|
462
|
-
name = "pointpca2-
|
|
463
|
-
version = "
|
|
464
|
-
source = "git+https://github.com/akaTsunemori/pointpca2-rs.git?tag=v1.
|
|
462
|
+
name = "pointpca2-rs"
|
|
463
|
+
version = "1.3.1"
|
|
464
|
+
source = "git+https://github.com/akaTsunemori/pointpca2-rs.git?tag=v1.3.1#8f328b24261cd90108c612a3643a92bcf221c6ec"
|
|
465
465
|
dependencies = [
|
|
466
466
|
"kd-tree",
|
|
467
467
|
"libm",
|
|
@@ -659,7 +659,7 @@ checksum = "e0cd7e117be63d3c3678776753929474f3b04a43a080c744d6b0ae2a8c28e222"
|
|
|
659
659
|
dependencies = [
|
|
660
660
|
"proc-macro2",
|
|
661
661
|
"quote",
|
|
662
|
-
"syn 2.0.
|
|
662
|
+
"syn 2.0.71",
|
|
663
663
|
]
|
|
664
664
|
|
|
665
665
|
[[package]]
|
|
@@ -720,9 +720,9 @@ dependencies = [
|
|
|
720
720
|
|
|
721
721
|
[[package]]
|
|
722
722
|
name = "syn"
|
|
723
|
-
version = "2.0.
|
|
723
|
+
version = "2.0.71"
|
|
724
724
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
725
|
-
checksum = "
|
|
725
|
+
checksum = "b146dcf730474b4bcd16c311627b31ede9ab149045db4d6088b3becaea046462"
|
|
726
726
|
dependencies = [
|
|
727
727
|
"proc-macro2",
|
|
728
728
|
"quote",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[package]
|
|
2
2
|
name = "pointpca2"
|
|
3
|
-
version = "0.
|
|
3
|
+
version = "0.3.1"
|
|
4
4
|
edition = "2021"
|
|
5
5
|
|
|
6
6
|
[lib]
|
|
@@ -11,9 +11,9 @@ crate-type = ["cdylib"]
|
|
|
11
11
|
nalgebra = "0.32.5"
|
|
12
12
|
numpy = "0.15"
|
|
13
13
|
|
|
14
|
-
[dependencies.pointpca2-
|
|
14
|
+
[dependencies.pointpca2-rs]
|
|
15
15
|
git = "https://github.com/akaTsunemori/pointpca2-rs.git"
|
|
16
|
-
tag = "v1.
|
|
16
|
+
tag = "v1.3.1"
|
|
17
17
|
|
|
18
18
|
[dependencies.pyo3]
|
|
19
19
|
version = "0.15.1"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: pointpca2
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.3.1
|
|
4
4
|
Requires-Dist: numpy >=1.26
|
|
5
5
|
Requires-Dist: toml ==0.10.0
|
|
6
6
|
License-File: LICENSE
|
|
@@ -43,7 +43,7 @@ conda activate pointpca2-pylib
|
|
|
43
43
|
maturin develop -r
|
|
44
44
|
```
|
|
45
45
|
|
|
46
|
-
|
|
46
|
+
## Usage
|
|
47
47
|
```python
|
|
48
48
|
import open3d as o3d
|
|
49
49
|
import numpy as np
|
|
@@ -64,13 +64,13 @@ predictors = pointpca2.compute_pointpca2(
|
|
|
64
64
|
print(*predictors)
|
|
65
65
|
```
|
|
66
66
|
|
|
67
|
-
|
|
67
|
+
## Contributing
|
|
68
68
|
Feel free to open any kind of issues and contributions related to this Python package. Issues related to the Rust implementation should be open on the [pointpca2-rs](https://github.com/akaTsunemori/pointpca2-rs) repository.
|
|
69
69
|
|
|
70
|
-
|
|
70
|
+
## Acknowledgments
|
|
71
71
|
- [pointpca2-rs](https://github.com/akaTsunemori/pointpca2-rs) - An implementation of PointPCA2 in Rust
|
|
72
72
|
|
|
73
|
-
|
|
73
|
+
## License
|
|
74
74
|
MIT License
|
|
75
75
|
|
|
76
76
|
---
|
|
@@ -32,7 +32,7 @@ conda activate pointpca2-pylib
|
|
|
32
32
|
maturin develop -r
|
|
33
33
|
```
|
|
34
34
|
|
|
35
|
-
|
|
35
|
+
## Usage
|
|
36
36
|
```python
|
|
37
37
|
import open3d as o3d
|
|
38
38
|
import numpy as np
|
|
@@ -53,13 +53,13 @@ predictors = pointpca2.compute_pointpca2(
|
|
|
53
53
|
print(*predictors)
|
|
54
54
|
```
|
|
55
55
|
|
|
56
|
-
|
|
56
|
+
## Contributing
|
|
57
57
|
Feel free to open any kind of issues and contributions related to this Python package. Issues related to the Rust implementation should be open on the [pointpca2-rs](https://github.com/akaTsunemori/pointpca2-rs) repository.
|
|
58
58
|
|
|
59
|
-
|
|
59
|
+
## Acknowledgments
|
|
60
60
|
- [pointpca2-rs](https://github.com/akaTsunemori/pointpca2-rs) - An implementation of PointPCA2 in Rust
|
|
61
61
|
|
|
62
|
-
|
|
62
|
+
## License
|
|
63
63
|
MIT License
|
|
64
64
|
|
|
65
65
|
---
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
extern crate nalgebra as na;
|
|
2
|
+
extern crate numpy;
|
|
3
|
+
extern crate pointpca2_rs;
|
|
4
|
+
|
|
5
|
+
use na::DMatrix;
|
|
6
|
+
use numpy::PyArray1;
|
|
7
|
+
use numpy::PyReadonlyArray2;
|
|
8
|
+
use pyo3::prelude::*;
|
|
9
|
+
use pyo3::wrap_pyfunction;
|
|
10
|
+
|
|
11
|
+
fn as_dmatrix<'a, T>(x: &'a PyReadonlyArray2<T>) -> DMatrix<T>
|
|
12
|
+
where
|
|
13
|
+
T: numpy::Element + na::Scalar,
|
|
14
|
+
{
|
|
15
|
+
let data: Vec<T> = x.as_array().iter().cloned().collect();
|
|
16
|
+
DMatrix::from_row_slice(x.shape()[0], x.shape()[1], &data)
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
#[pyfunction]
|
|
20
|
+
fn compute_pointpca2<'py>(
|
|
21
|
+
_py: Python<'py>,
|
|
22
|
+
points_a: PyReadonlyArray2<'py, f64>,
|
|
23
|
+
colors_a: PyReadonlyArray2<'py, u8>,
|
|
24
|
+
points_b: PyReadonlyArray2<'py, f64>,
|
|
25
|
+
colors_b: PyReadonlyArray2<'py, u8>,
|
|
26
|
+
search_size: usize,
|
|
27
|
+
verbose: bool,
|
|
28
|
+
) -> &'py PyArray1<f64> {
|
|
29
|
+
let (points_a, colors_a, points_b, colors_b) = {
|
|
30
|
+
(
|
|
31
|
+
as_dmatrix(&points_a),
|
|
32
|
+
as_dmatrix(&colors_a),
|
|
33
|
+
as_dmatrix(&points_b),
|
|
34
|
+
as_dmatrix(&colors_b),
|
|
35
|
+
)
|
|
36
|
+
};
|
|
37
|
+
let pooled_predictors = pointpca2_rs::compute_pointpca2(
|
|
38
|
+
points_a,
|
|
39
|
+
colors_a,
|
|
40
|
+
points_b,
|
|
41
|
+
colors_b,
|
|
42
|
+
search_size,
|
|
43
|
+
verbose,
|
|
44
|
+
);
|
|
45
|
+
let py_array = PyArray1::from_iter(_py, pooled_predictors.iter().cloned());
|
|
46
|
+
py_array
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
#[pymodule]
|
|
50
|
+
fn pointpca2(_py: Python, m: &PyModule) -> PyResult<()> {
|
|
51
|
+
m.add_function(wrap_pyfunction!(compute_pointpca2, m)?)?;
|
|
52
|
+
Ok(())
|
|
53
|
+
}
|
pointpca2-0.2.2/src/lib.rs
DELETED
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
extern crate nalgebra as na;
|
|
2
|
-
extern crate numpy;
|
|
3
|
-
extern crate pointpca2_rust;
|
|
4
|
-
|
|
5
|
-
use na::DMatrix;
|
|
6
|
-
use numpy::PyArray1;
|
|
7
|
-
use numpy::PyReadonlyArray2;
|
|
8
|
-
use pointpca2_rust::features;
|
|
9
|
-
use pointpca2_rust::knn_search;
|
|
10
|
-
use pointpca2_rust::pooling;
|
|
11
|
-
use pointpca2_rust::predictors;
|
|
12
|
-
use pointpca2_rust::preprocessing;
|
|
13
|
-
use pyo3::prelude::*;
|
|
14
|
-
use pyo3::wrap_pyfunction;
|
|
15
|
-
|
|
16
|
-
fn print_if_verbose<'a>(string: &'a str, verbose: &'a bool) {
|
|
17
|
-
if *verbose {
|
|
18
|
-
println!("{}", string);
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
fn as_dmatrix<'a, T>(x: &'a PyReadonlyArray2<T>) -> DMatrix<T>
|
|
23
|
-
where
|
|
24
|
-
T: numpy::Element + na::Scalar,
|
|
25
|
-
{
|
|
26
|
-
let data: Vec<T> = x.as_array().iter().cloned().collect();
|
|
27
|
-
DMatrix::from_row_slice(x.shape()[0], x.shape()[1], &data)
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
#[pyfunction]
|
|
31
|
-
fn compute_pointpca2<'py>(
|
|
32
|
-
_py: Python<'py>,
|
|
33
|
-
points_a: PyReadonlyArray2<'py, f64>,
|
|
34
|
-
colors_a: PyReadonlyArray2<'py, u8>,
|
|
35
|
-
points_b: PyReadonlyArray2<'py, f64>,
|
|
36
|
-
colors_b: PyReadonlyArray2<'py, u8>,
|
|
37
|
-
search_size: usize,
|
|
38
|
-
verbose: bool,
|
|
39
|
-
) -> &'py PyArray1<f64> {
|
|
40
|
-
let points_a = as_dmatrix(&points_a);
|
|
41
|
-
let colors_a = as_dmatrix(&colors_a);
|
|
42
|
-
let points_b = as_dmatrix(&points_b);
|
|
43
|
-
let colors_b = as_dmatrix(&colors_b);
|
|
44
|
-
print_if_verbose("Preprocessing", &verbose);
|
|
45
|
-
let (points_a, colors_a) = preprocessing::preprocess_point_cloud(&points_a, &colors_a);
|
|
46
|
-
let (points_b, colors_b) = preprocessing::preprocess_point_cloud(&points_b, &colors_b);
|
|
47
|
-
print_if_verbose("Performing knn search", &verbose);
|
|
48
|
-
let knn_indices_a = knn_search::knn_search(&points_a, &points_a, search_size);
|
|
49
|
-
let knn_indices_b = knn_search::knn_search(&points_b, &points_a, search_size);
|
|
50
|
-
print_if_verbose("Computing local features", &verbose);
|
|
51
|
-
let local_features = features::compute_features(
|
|
52
|
-
points_a,
|
|
53
|
-
colors_a,
|
|
54
|
-
points_b,
|
|
55
|
-
colors_b,
|
|
56
|
-
knn_indices_a,
|
|
57
|
-
knn_indices_b,
|
|
58
|
-
search_size,
|
|
59
|
-
);
|
|
60
|
-
print_if_verbose("Computing predictors", &verbose);
|
|
61
|
-
let predictors_result = predictors::compute_predictors(local_features);
|
|
62
|
-
print_if_verbose("Pooling predictors", &verbose);
|
|
63
|
-
let pooled_predictors = pooling::mean_pooling(predictors_result);
|
|
64
|
-
print_if_verbose("Done", &verbose);
|
|
65
|
-
let py_array = PyArray1::from_iter(_py, pooled_predictors.iter().cloned());
|
|
66
|
-
py_array
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
#[pymodule]
|
|
70
|
-
fn pointpca2(_py: Python, m: &PyModule) -> PyResult<()> {
|
|
71
|
-
m.add_function(wrap_pyfunction!(compute_pointpca2, m)?)?;
|
|
72
|
-
Ok(())
|
|
73
|
-
}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|