pyfmaps 1.0.0__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.
Files changed (39) hide show
  1. pyfmaps-1.0.0/LICENSE +21 -0
  2. pyfmaps-1.0.0/MANIFEST.in +7 -0
  3. pyfmaps-1.0.0/PKG-INFO +89 -0
  4. pyfmaps-1.0.0/README.md +58 -0
  5. pyfmaps-1.0.0/data/cat-00.off +21619 -0
  6. pyfmaps-1.0.0/data/landmarks.txt +20 -0
  7. pyfmaps-1.0.0/data/lion-00.off +14998 -0
  8. pyfmaps-1.0.0/data/lion2cat +5000 -0
  9. pyfmaps-1.0.0/pyFM/FMN/FMN.py +678 -0
  10. pyfmaps-1.0.0/pyFM/FMN/__init__.py +1 -0
  11. pyfmaps-1.0.0/pyFM/__init__.py +0 -0
  12. pyfmaps-1.0.0/pyFM/eval/__init__.py +1 -0
  13. pyfmaps-1.0.0/pyFM/eval/evaluate.py +78 -0
  14. pyfmaps-1.0.0/pyFM/functional.py +611 -0
  15. pyfmaps-1.0.0/pyFM/mesh/__init__.py +1 -0
  16. pyfmaps-1.0.0/pyFM/mesh/file_utils.py +405 -0
  17. pyfmaps-1.0.0/pyFM/mesh/geometry.py +872 -0
  18. pyfmaps-1.0.0/pyFM/mesh/laplacian.py +164 -0
  19. pyfmaps-1.0.0/pyFM/mesh/trimesh.py +1029 -0
  20. pyfmaps-1.0.0/pyFM/optimize/__init__.py +1 -0
  21. pyfmaps-1.0.0/pyFM/optimize/base_functions.py +233 -0
  22. pyfmaps-1.0.0/pyFM/refine/__init__.py +2 -0
  23. pyfmaps-1.0.0/pyFM/refine/icp.py +124 -0
  24. pyfmaps-1.0.0/pyFM/refine/zoomout.py +183 -0
  25. pyfmaps-1.0.0/pyFM/signatures/HKS_functions.py +100 -0
  26. pyfmaps-1.0.0/pyFM/signatures/WKS_functions.py +116 -0
  27. pyfmaps-1.0.0/pyFM/signatures/__init__.py +2 -0
  28. pyfmaps-1.0.0/pyFM/spectral/__init__.py +3 -0
  29. pyfmaps-1.0.0/pyFM/spectral/convert.py +193 -0
  30. pyfmaps-1.0.0/pyFM/spectral/nn_utils.py +31 -0
  31. pyfmaps-1.0.0/pyFM/spectral/projection_utils.py +932 -0
  32. pyfmaps-1.0.0/pyFM/spectral/shape_difference.py +83 -0
  33. pyfmaps-1.0.0/pyfmaps.egg-info/PKG-INFO +89 -0
  34. pyfmaps-1.0.0/pyfmaps.egg-info/SOURCES.txt +38 -0
  35. pyfmaps-1.0.0/pyfmaps.egg-info/dependency_links.txt +1 -0
  36. pyfmaps-1.0.0/pyfmaps.egg-info/requires.txt +5 -0
  37. pyfmaps-1.0.0/pyfmaps.egg-info/top_level.txt +1 -0
  38. pyfmaps-1.0.0/setup.cfg +43 -0
  39. pyfmaps-1.0.0/setup.py +6 -0
pyfmaps-1.0.0/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2020 Robin Magnet
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the Software), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, andor sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,7 @@
1
+ include LICENSE
2
+ include README.md
3
+
4
+ include data/*
5
+
6
+ recursive-exclude * __pycache__
7
+ recursive-exclude * *.py[co]
pyfmaps-1.0.0/PKG-INFO ADDED
@@ -0,0 +1,89 @@
1
+ Metadata-Version: 2.1
2
+ Name: pyfmaps
3
+ Version: 1.0.0
4
+ Summary: Python bindings for functional maps
5
+ Author: Robin Magnet
6
+ License: MIT License
7
+ Project-URL: Bug Tracker, https://github.com/RobinMagnet/pyFM/issues
8
+ Project-URL: Documentation, https://github.com/RobinMagnet/pyFM/blob/master/example_notebook.ipynb
9
+ Project-URL: Source Code, https://github.com/RobinMagnet/pyFM
10
+ Project-URL: User Support, https://github.com/RobinMagnet/pyFM/issues
11
+ Classifier: Development Status :: 2 - Pre-Alpha
12
+ Classifier: Intended Audience :: Developers
13
+ Classifier: License :: OSI Approved :: MIT License
14
+ Classifier: Operating System :: OS Independent
15
+ Classifier: Programming Language :: Python
16
+ Classifier: Programming Language :: Python :: 3
17
+ Classifier: Programming Language :: Python :: 3 :: Only
18
+ Classifier: Programming Language :: Python :: 3.7
19
+ Classifier: Programming Language :: Python :: 3.8
20
+ Classifier: Programming Language :: Python :: 3.9
21
+ Classifier: Programming Language :: Python :: 3.10
22
+ Classifier: Topic :: Software Development :: Testing
23
+ Requires-Python: >=3.7
24
+ Description-Content-Type: text/markdown
25
+ License-File: LICENSE
26
+ Requires-Dist: numpy
27
+ Requires-Dist: scipy
28
+ Requires-Dist: potpourri3d
29
+ Requires-Dist: robust_laplacian
30
+ Requires-Dist: tqdm
31
+
32
+ ## V 1.0 is coming very soon, with release on PyPi
33
+ ## Expected pyFM.torch version
34
+
35
+ # pyFM - Python bindings for functional maps
36
+ pyFM is a pure python implementation of multiple tools used for Functional Maps computations. Namely, it implements shape signatures, functional map optimization and refinement algorithm, and above all an easy-to-use interface for using functional maps.
37
+
38
+ ## Features
39
+
40
+ * A TriMesh class incuding many standard geometric measures with python code, including geodesic distances (using the [heat method](https://www.cs.cmu.edu/~kmcrane/Projects/HeatMethod/)), normals, projection on the LBO basis, export of .off or .obj files with textures.
41
+ * A pure Python (fast) implementation of Laplace-Beltrami Operator.
42
+ * Implementation of [HKS](http://www.lix.polytechnique.fr/~maks/papers/hks.pdf) and [WKS](http://imagine.enpc.fr/~aubrym/projects/wks/index.html) (and their version for landmarks) with multiple level of automation for parameters selection (from full automatic to total control)
43
+ * Implementation of icp and [ZoomOut](https://arxiv.org/abs/1904.07865) on Python
44
+ * *Fast* conversion from Functional Map to vertex to vertex map or [precise map](https://www.cs.technion.ac.il/~mirela/publications/p2p_recovery.pdf) using p-dimensional [vertex to mesh projection](https://github.com/RobinMagnet/pyFM/blob/master/pyFM/spectral/projection_utils.py)
45
+ * A FunctionalMapping class for straightforward computation of Functional Maps mixing all the previous features
46
+ * Functions for evaluating functional maps.
47
+ * Support for Functional Map Networks : Consistent Latent Basis, Canonical Consistent Latent Basis, consistency weights, Consistent ZoomOut
48
+
49
+
50
+ In particular this codebade contains python implementations of the following papers :
51
+ * [The Heat Method for Distance Computation](https://www.cs.cmu.edu/~kmcrane/Projects/HeatMethod/)
52
+ * [A Concise and Provably Informative Multi-Scale Signature Based on Heat Diffusion](http://www.lix.polytechnique.fr/~maks/papers/hks.pdf)
53
+ * [The Wave Kernel Signature: A Quantum Mechanical Approach To Shape Analysis](http://imagine.enpc.fr/~aubrym/projects/wks/index.html)
54
+ * [ZoomOut: Spectral Upsampling for Efficient Shape Correspondence](https://arxiv.org/abs/1904.07865), with MatLab implementation [here](https://github.com/llorz/SGA19_zoomOut)
55
+ * [Deblurring and Denoising of Maps between Shapes](https://www.cs.technion.ac.il/~mirela/publications/p2p_recovery.pdf), with Matlab implementation [here](https://mirela.net.technion.ac.il/publications/)
56
+ * [Functional Maps: A Flexible Representation of Maps Between Shapes](http://www.lix.polytechnique.fr/~maks/papers/obsbg_fmaps.pdf)
57
+ * [Informative Descriptor Preservation via Commutativity for Shape Matching](http://www.lix.polytechnique.fr/~maks/papers/fundescEG17.pdf)
58
+ * [Continuous and Orientation-preserving Correspondences via Functional Maps](https://arxiv.org/abs/1806.04455), only the orientation preserving / reversing term, matlab implementation can be found [here](https://github.com/llorz/SGA18_orientation_BCICP_code)
59
+ * [Map-Based Exploration of Intrinsic Shape Differences and Variability](https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.642.4287&rep=rep1&type=pdf)
60
+ * [An Optimization Approach to Improving Collections of Shape Maps](http://fodava.gatech.edu/files/reports/FODAVA-11-22.pdf)
61
+ * [Limit Shapes – A Tool for Understanding Shape Differences and Variability in 3D Model Collections](http://www.lix.polytechnique.fr/~maks/papers/limit_shapes_SGP19.pdf)
62
+ * [CONSISTENT ZOOMOUT: Efficient Spectral Map Synchronization](http://www.lix.polytechnique.fr/~maks/papers/ConsistentZoomOut_SGP2020.pdf), with Matlab implementation [here](https://github.com/llorz/SGA19_zoomOut)
63
+
64
+ ## Incoming features
65
+ Python code for [Discrete Optimization](http://www.lix.polytechnique.fr/~maks/papers/SGP21_DiscMapOpt.pdf) and [Reversible Harmonic Map](https://www.cs.technion.ac.il/~mirela/publications/rhm.pdf) should be released soon.
66
+ Don't hesitate to reach out at <rmagnet@> <lix.polytechnique.fr> for requests.
67
+
68
+ ## Dependencies
69
+
70
+ Hard dependencies are `numpy`, `scipy`, `tqdm`, `scikit-learn` for its KDTree implementation.
71
+
72
+ The main non-standard (optional) dependencies are [`potpourri3d`](https://github.com/nmwsharp/potpourri3d) for its robust geodesic distance computation and [`robust_laplacian`](https://github.com/nmwsharp/robust-laplacians-py) which provide an implementation of both intrinsic delaunay and tufted Laplacian. If these functionalities are not needed one can remove the imports [here](https://github.com/RobinMagnet/pyFM/blob/master/pyFM/mesh/trimesh.py) and [here](https://github.com/RobinMagnet/pyFM/blob/master/pyFM/mesh/geometry.py).
73
+
74
+ I did not build on the [trimesh](https://github.com/mikedh/trimesh) package which has some strange behaviour with vertex reordering.
75
+
76
+ ## Remark on Code notations
77
+
78
+ In the whole codebase, we consider pairs of meshes `mesh1` and `mesh2`. Functional maps always go **from** `mesh1` **to** `mesh2` (denoted `FM_12`) and pointwise maps always **from** `mesh2` **to** `mesh1` (denoted `p2p_21`)
79
+
80
+ ## Example Code
81
+
82
+ Running the [example notebook](https://github.com/RobinMagnet/pyFM/blob/master/example_notebook.ipynb) gives you an overview of the package functions.
83
+ Note that this notebook requires the [`meshplot` package](https://skoch9.github.io/meshplot/), which is an easy to use interface for `pythreejs`, which allows to display mesh in an easy fashion on notebooks.
84
+
85
+ All functions in the package are documented, with a descriptions of parameters and output.
86
+
87
+ ## Example Code for shape matching
88
+
89
+ See the [Example Notebook](https://github.com/RobinMagnet/pyFM/blob/master/example_notebook.ipynb) for example of code.
@@ -0,0 +1,58 @@
1
+ ## V 1.0 is coming very soon, with release on PyPi
2
+ ## Expected pyFM.torch version
3
+
4
+ # pyFM - Python bindings for functional maps
5
+ pyFM is a pure python implementation of multiple tools used for Functional Maps computations. Namely, it implements shape signatures, functional map optimization and refinement algorithm, and above all an easy-to-use interface for using functional maps.
6
+
7
+ ## Features
8
+
9
+ * A TriMesh class incuding many standard geometric measures with python code, including geodesic distances (using the [heat method](https://www.cs.cmu.edu/~kmcrane/Projects/HeatMethod/)), normals, projection on the LBO basis, export of .off or .obj files with textures.
10
+ * A pure Python (fast) implementation of Laplace-Beltrami Operator.
11
+ * Implementation of [HKS](http://www.lix.polytechnique.fr/~maks/papers/hks.pdf) and [WKS](http://imagine.enpc.fr/~aubrym/projects/wks/index.html) (and their version for landmarks) with multiple level of automation for parameters selection (from full automatic to total control)
12
+ * Implementation of icp and [ZoomOut](https://arxiv.org/abs/1904.07865) on Python
13
+ * *Fast* conversion from Functional Map to vertex to vertex map or [precise map](https://www.cs.technion.ac.il/~mirela/publications/p2p_recovery.pdf) using p-dimensional [vertex to mesh projection](https://github.com/RobinMagnet/pyFM/blob/master/pyFM/spectral/projection_utils.py)
14
+ * A FunctionalMapping class for straightforward computation of Functional Maps mixing all the previous features
15
+ * Functions for evaluating functional maps.
16
+ * Support for Functional Map Networks : Consistent Latent Basis, Canonical Consistent Latent Basis, consistency weights, Consistent ZoomOut
17
+
18
+
19
+ In particular this codebade contains python implementations of the following papers :
20
+ * [The Heat Method for Distance Computation](https://www.cs.cmu.edu/~kmcrane/Projects/HeatMethod/)
21
+ * [A Concise and Provably Informative Multi-Scale Signature Based on Heat Diffusion](http://www.lix.polytechnique.fr/~maks/papers/hks.pdf)
22
+ * [The Wave Kernel Signature: A Quantum Mechanical Approach To Shape Analysis](http://imagine.enpc.fr/~aubrym/projects/wks/index.html)
23
+ * [ZoomOut: Spectral Upsampling for Efficient Shape Correspondence](https://arxiv.org/abs/1904.07865), with MatLab implementation [here](https://github.com/llorz/SGA19_zoomOut)
24
+ * [Deblurring and Denoising of Maps between Shapes](https://www.cs.technion.ac.il/~mirela/publications/p2p_recovery.pdf), with Matlab implementation [here](https://mirela.net.technion.ac.il/publications/)
25
+ * [Functional Maps: A Flexible Representation of Maps Between Shapes](http://www.lix.polytechnique.fr/~maks/papers/obsbg_fmaps.pdf)
26
+ * [Informative Descriptor Preservation via Commutativity for Shape Matching](http://www.lix.polytechnique.fr/~maks/papers/fundescEG17.pdf)
27
+ * [Continuous and Orientation-preserving Correspondences via Functional Maps](https://arxiv.org/abs/1806.04455), only the orientation preserving / reversing term, matlab implementation can be found [here](https://github.com/llorz/SGA18_orientation_BCICP_code)
28
+ * [Map-Based Exploration of Intrinsic Shape Differences and Variability](https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.642.4287&rep=rep1&type=pdf)
29
+ * [An Optimization Approach to Improving Collections of Shape Maps](http://fodava.gatech.edu/files/reports/FODAVA-11-22.pdf)
30
+ * [Limit Shapes – A Tool for Understanding Shape Differences and Variability in 3D Model Collections](http://www.lix.polytechnique.fr/~maks/papers/limit_shapes_SGP19.pdf)
31
+ * [CONSISTENT ZOOMOUT: Efficient Spectral Map Synchronization](http://www.lix.polytechnique.fr/~maks/papers/ConsistentZoomOut_SGP2020.pdf), with Matlab implementation [here](https://github.com/llorz/SGA19_zoomOut)
32
+
33
+ ## Incoming features
34
+ Python code for [Discrete Optimization](http://www.lix.polytechnique.fr/~maks/papers/SGP21_DiscMapOpt.pdf) and [Reversible Harmonic Map](https://www.cs.technion.ac.il/~mirela/publications/rhm.pdf) should be released soon.
35
+ Don't hesitate to reach out at <rmagnet@> <lix.polytechnique.fr> for requests.
36
+
37
+ ## Dependencies
38
+
39
+ Hard dependencies are `numpy`, `scipy`, `tqdm`, `scikit-learn` for its KDTree implementation.
40
+
41
+ The main non-standard (optional) dependencies are [`potpourri3d`](https://github.com/nmwsharp/potpourri3d) for its robust geodesic distance computation and [`robust_laplacian`](https://github.com/nmwsharp/robust-laplacians-py) which provide an implementation of both intrinsic delaunay and tufted Laplacian. If these functionalities are not needed one can remove the imports [here](https://github.com/RobinMagnet/pyFM/blob/master/pyFM/mesh/trimesh.py) and [here](https://github.com/RobinMagnet/pyFM/blob/master/pyFM/mesh/geometry.py).
42
+
43
+ I did not build on the [trimesh](https://github.com/mikedh/trimesh) package which has some strange behaviour with vertex reordering.
44
+
45
+ ## Remark on Code notations
46
+
47
+ In the whole codebase, we consider pairs of meshes `mesh1` and `mesh2`. Functional maps always go **from** `mesh1` **to** `mesh2` (denoted `FM_12`) and pointwise maps always **from** `mesh2` **to** `mesh1` (denoted `p2p_21`)
48
+
49
+ ## Example Code
50
+
51
+ Running the [example notebook](https://github.com/RobinMagnet/pyFM/blob/master/example_notebook.ipynb) gives you an overview of the package functions.
52
+ Note that this notebook requires the [`meshplot` package](https://skoch9.github.io/meshplot/), which is an easy to use interface for `pythreejs`, which allows to display mesh in an easy fashion on notebooks.
53
+
54
+ All functions in the package are documented, with a descriptions of parameters and output.
55
+
56
+ ## Example Code for shape matching
57
+
58
+ See the [Example Notebook](https://github.com/RobinMagnet/pyFM/blob/master/example_notebook.ipynb) for example of code.