Improve mesh_to_tensor and configure pytest in VS Code
#47
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR improves performance of
mesh_to_tensorindatasetand configures pytest in VS Code to make debugging easier.Tested performance of new and old
mesh_to_tensor:Profiling mesh_to_tensor_old: 24332857 function calls in 9.498 seconds Profiling mesh_to_tensor: 21965 function calls (21737 primitive calls) in 0.305 secondsFull log
Loaded 76 meshes. Profiling mesh_to_tensor: 21965 function calls (21737 primitive calls) in 0.305 seconds Ordered by: cumulative time ncalls tottime percall cumtime percall filename:lineno(function) 76 0.001 0.000 0.304 0.004 /Users/martinnormark/Dev/neural-mesh-simplification/src/neural_mesh_simplification/data/dataset.py:78(mesh_to_tensor) 304/76 0.001 0.000 0.278 0.004 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/trimesh/caching.py:121(get_cached) 76 0.017 0.000 0.277 0.004 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/trimesh/base.py:913(edges_unique) 76 0.001 0.000 0.211 0.003 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/trimesh/grouping.py:431(unique_rows) 76 0.000 0.000 0.189 0.002 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/numpy/lib/_arraysetops_impl.py:144(unique) 76 0.031 0.000 0.188 0.002 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/numpy/lib/_arraysetops_impl.py:342(_unique1d) 76 0.144 0.002 0.144 0.002 {method 'argsort' of 'numpy.ndarray' objects} 76 0.000 0.000 0.046 0.001 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/trimesh/base.py:962(edges_sorted) 76 0.000 0.000 0.025 0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/numpy/_core/fromnumeric.py:915(sort) 76 0.022 0.000 0.022 0.000 {method 'sort' of 'numpy.ndarray' objects} 76 0.014 0.000 0.022 0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/trimesh/grouping.py:160(hashable_rows) 76 0.000 0.000 0.021 0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/trimesh/base.py:884(edges) 76 0.006 0.000 0.020 0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/trimesh/geometry.py:92(faces_to_edges) 76 0.000 0.000 0.012 0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/numpy/_core/fromnumeric.py:2609(cumsum) 76 0.012 0.000 0.012 0.000 {method 'contiguous' of 'torch._C.TensorBase' objects} 380 0.012 0.000 0.012 0.000 {method 'reshape' of 'numpy.ndarray' objects} 76 0.000 0.000 0.012 0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/numpy/_core/fromnumeric.py:51(_wrapfunc) 76 0.012 0.000 0.012 0.000 {method 'cumsum' of 'numpy.ndarray' objects} 228 0.008 0.000 0.008 0.000 {built-in method torch.tensor} 76 0.004 0.000 0.004 0.000 {method 'astype' of 'numpy.ndarray' objects} 532 0.000 0.000 0.003 0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/trimesh/caching.py:364(verify) 76 0.003 0.000 0.003 0.000 {method 'copy' of 'numpy.ndarray' objects} 532 0.001 0.000 0.003 0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/trimesh/caching.py:679(__hash__) 76 0.000 0.000 0.003 0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/torch_geometric/data/data.py:516(__init__) 76 0.001 0.000 0.002 0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/numpy/lib/_shape_base_impl.py:1197(tile) 152 0.002 0.000 0.002 0.000 {method 'reduce' of 'numpy.ufunc' objects} 380 0.000 0.000 0.002 0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/torch_geometric/data/data.py:561(__setattr__) 228 0.000 0.000 0.002 0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/trimesh/caching.py:445(__setitem__) 532 0.000 0.000 0.002 0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/torch_geometric/data/storage.py:100(__setattr__) 684 0.001 0.000 0.001 0.000 {built-in method numpy.array} 76 0.000 0.000 0.001 0.000 {method 'min' of 'numpy.ndarray' objects} 76 0.001 0.000 0.001 0.000 {method 'repeat' of 'numpy.ndarray' objects} 76 0.000 0.000 0.001 0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/numpy/_core/_methods.py:46(_amin) 380 0.000 0.000 0.001 0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/torch_geometric/data/storage.py:120(__setitem__) 1900 0.000 0.000 0.001 0.000 {built-in method builtins.getattr} 76 0.001 0.000 0.001 0.000 {method 'clone' of 'torch._C.TensorBase' objects} 380 0.000 0.000 0.001 0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/torch_geometric/data/storage.py:82(_pop_cache) 76 0.000 0.000 0.001 0.000 {method 'max' of 'numpy.ndarray' objects} 76 0.000 0.000 0.001 0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/numpy/_core/_methods.py:42(_amax) 1064 0.000 0.000 0.001 0.000 {built-in method builtins.hash} 152 0.001 0.000 0.001 0.000 {method 't' of 'torch._C.TensorBase' objects} 228 0.000 0.000 0.001 0.000 {built-in method builtins.setattr} 76 0.001 0.000 0.001 0.000 {method 'flatten' of 'numpy.ndarray' objects} 76 0.001 0.000 0.001 0.000 {built-in method numpy.zeros} 76 0.000 0.000 0.001 0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/torch_geometric/data/data.py:952(x) 380 0.000 0.000 0.001 0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/torch_geometric/data/storage.py:89(__getattr__) 76 0.000 0.000 0.001 0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/torch_geometric/data/storage.py:66(__init__) 2584 0.000 0.000 0.000 0.000 {built-in method builtins.hasattr} 76 0.000 0.000 0.000 0.000 {built-in method numpy.arange} 1064 0.000 0.000 0.000 0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/trimesh/caching.py:207(__hash__) 76 0.000 0.000 0.000 0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/torch_geometric/data/data.py:960(edge_index) 76 0.000 0.000 0.000 0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/torch_geometric/data/data.py:1016(face) 2128 0.000 0.000 0.000 0.000 {built-in method builtins.len} 76 0.000 0.000 0.000 0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/torch_geometric/data/data.py:616(num_nodes) 532 0.000 0.000 0.000 0.000 {built-in method xxhash._xxhash.xxh3_64_intdigest} 76 0.000 0.000 0.000 0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/torch_geometric/data/data.py:992(pos) 76 0.000 0.000 0.000 0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/torch_geometric/data/feature_store.py:276(__init__) 152 0.000 0.000 0.000 0.000 {built-in method numpy.empty} 76 0.000 0.000 0.000 0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/torch_geometric/data/storage.py:567(edge_index) 76 0.000 0.000 0.000 0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/torch_geometric/data/storage.py:466(num_nodes) 152 0.000 0.000 0.000 0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/torch_geometric/data/graph_store.py:109(__init__) 912 0.000 0.000 0.000 0.000 {method 'values' of 'dict' objects} 380 0.000 0.000 0.000 0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/torch_geometric/data/storage.py:117(__getitem__) 532 0.000 0.000 0.000 0.000 {method 'tobytes' of 'numpy.ndarray' objects} 152 0.000 0.000 0.000 0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/trimesh/base.py:434(vertices) 76 0.000 0.000 0.000 0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/trimesh/grouping.py:226(float_to_int) 152 0.000 0.000 0.000 0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/trimesh/base.py:288(faces) 304 0.000 0.000 0.000 0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/trimesh/caching.py:627(__getitem__) 380 0.000 0.000 0.000 0.000 {built-in method numpy.asanyarray} 152 0.000 0.000 0.000 0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/numpy/lib/_shape_base_impl.py:1269(<genexpr>) 76 0.000 0.000 0.000 0.000 {built-in method builtins.all} 228 0.000 0.000 0.000 0.000 {method 'items' of 'dict' objects} 76 0.000 0.000 0.000 0.000 {method 'view' of 'numpy.ndarray' objects} 228 0.000 0.000 0.000 0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/numpy/lib/_shape_base_impl.py:1279(<genexpr>) 1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects} 76 0.000 0.000 0.000 0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/numpy/lib/_arraysetops_impl.py:131(_unpack_tuple) 76 0.000 0.000 0.000 0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/numpy/_core/fromnumeric.py:2605(_cumsum_dispatcher) 76 0.000 0.000 0.000 0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/numpy/lib/_arraysetops_impl.py:139(_unique_dispatcher) 76 0.000 0.000 0.000 0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/numpy/lib/_shape_base_impl.py:1193(_tile_dispatcher) 76 0.000 0.000 0.000 0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/numpy/_core/fromnumeric.py:911(_sort_dispatcher) Profiling mesh_to_tensor_old: 24332857 function calls in 9.498 seconds Ordered by: cumulative time ncalls tottime percall cumtime percall filename:lineno(function) 76 0.112 0.001 9.498 0.125 /Users/martinnormark/Dev/neural-mesh-simplification/src/neural_mesh_simplification/data/dataset.py:100(mesh_to_tensor_old) 76 1.321 0.017 8.580 0.113 /Users/martinnormark/Dev/neural-mesh-simplification/src/neural_mesh_simplification/utils/mesh_operations.py:25(build_graph_from_mesh) 3243720 3.846 0.000 5.208 0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/networkx/classes/graph.py:899(add_edge) 540166 1.388 0.000 1.553 0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/networkx/classes/graph.py:517(add_node) 3783886 0.431 0.000 0.674 0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/networkx/utils/misc.py:595(_clear_cache) 1621406 0.408 0.000 0.498 0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/trimesh/caching.py:178(__array_finalize__) 3243796 0.431 0.000 0.431 0.000 {method 'get' of 'dict' objects} 3783962 0.422 0.000 0.422 0.000 {method 'update' of 'dict' objects} 1621936 0.409 0.000 0.409 0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/networkx/classes/reportviews.py:1265(__iter__) 228 0.253 0.001 0.253 0.001 {built-in method torch.tensor} 3785710 0.243 0.000 0.243 0.000 {built-in method builtins.getattr} 76 0.000 0.000 0.130 0.002 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/networkx/classes/reportviews.py:1261(__len__) 76 0.029 0.000 0.129 0.002 {built-in method builtins.sum} 540242 0.079 0.000 0.101 0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/networkx/classes/reportviews.py:1262(<genexpr>) 1621406 0.090 0.000 0.090 0.000 {built-in method builtins.isinstance} 540242 0.022 0.000 0.022 0.000 {built-in method builtins.len} 76 0.011 0.000 0.011 0.000 {method 'contiguous' of 'torch._C.TensorBase' objects} 76 0.000 0.000 0.003 0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/torch_geometric/data/data.py:516(__init__) 380 0.000 0.000 0.002 0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/torch_geometric/data/data.py:561(__setattr__) 532 0.000 0.000 0.002 0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/torch_geometric/data/storage.py:100(__setattr__) 380 0.000 0.000 0.001 0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/torch_geometric/data/storage.py:120(__setitem__) 380 0.000 0.000 0.001 0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/torch_geometric/data/storage.py:82(_pop_cache) 152 0.001 0.000 0.001 0.000 {method 't' of 'torch._C.TensorBase' objects} 228 0.000 0.000 0.001 0.000 {built-in method builtins.setattr} 76 0.000 0.000 0.001 0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/torch_geometric/data/data.py:952(x) 76 0.000 0.000 0.001 0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/torch_geometric/data/storage.py:66(__init__) 380 0.000 0.000 0.001 0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/torch_geometric/data/storage.py:89(__getattr__) 76 0.000 0.000 0.000 0.000 /opt/homebrew/Cellar/python@3.12/3.12.1/Frameworks/Python.framework/Versions/3.12/lib/python3.12/functools.py:979(__get__) 76 0.000 0.000 0.000 0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/networkx/classes/graph.py:332(__init__) 76 0.000 0.000 0.000 0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/torch_geometric/data/data.py:960(edge_index) 76 0.000 0.000 0.000 0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/torch_geometric/data/feature_store.py:276(__init__) 76 0.000 0.000 0.000 0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/torch_geometric/data/data.py:616(num_nodes) 152 0.000 0.000 0.000 0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/torch_geometric/data/graph_store.py:109(__init__) 76 0.000 0.000 0.000 0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/torch_geometric/data/data.py:992(pos) 76 0.000 0.000 0.000 0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/torch_geometric/data/data.py:1016(face) 76 0.000 0.000 0.000 0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/networkx/classes/graph.py:1361(edges) 76 0.000 0.000 0.000 0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/torch_geometric/data/storage.py:567(edge_index) 228 0.000 0.000 0.000 0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/trimesh/base.py:434(vertices) 380 0.000 0.000 0.000 0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/torch_geometric/data/storage.py:117(__getitem__) 76 0.000 0.000 0.000 0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/torch_geometric/data/storage.py:466(num_nodes) 380 0.000 0.000 0.000 0.000 {method 'items' of 'dict' objects} 380 0.000 0.000 0.000 0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/trimesh/caching.py:627(__getitem__) 76 0.000 0.000 0.000 0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/networkx/classes/reportviews.py:1058(__init__) 152 0.000 0.000 0.000 0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/trimesh/base.py:288(faces) 380 0.000 0.000 0.000 0.000 {method 'values' of 'dict' objects} 76 0.000 0.000 0.000 0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/networkx/classes/graph.py:59(__set__) 76 0.000 0.000 0.000 0.000 /Users/martinnormark/Dev/neural-mesh-simplification/.venv/lib/python3.12/site-packages/networkx/classes/graph.py:37(__set__) 76 0.000 0.000 0.000 0.000 {built-in method builtins.hasattr} 1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects}