autonomousvision / convolutional_occupancy_networks

[ECCV'20] Convolutional Occupancy Networks
https://pengsongyou.github.io/conv_onet
MIT License
835 stars 113 forks source link

Running on newer Nvidia GPUs || cuDNN errors #33

Closed jnyjxn closed 3 years ago

jnyjxn commented 3 years ago

Thank you very much for this repo and your paper.

This is not so much an issue as much as it is shared tips for others who, like me, may be struggling to run this code on latest Nvidia graphics cards. My specs are: Ubuntu 18.04 2 x Nvidia RTX 3090 g++ 9.4/gcc 8.4/ninja 1.8

Specifically I had two main issues:

  1. running the code according to the instructions (installing from environment.yaml) led to unspecified cuDNN error that could be traced to incompatibility between my RTX3090 and the required PyTorch 1.5.
  2. installing all requirements manually including the latest PyTorch led to errors when running setup.py.

My solution was:

  1. (this may not be required but I include it as it is how my system is set up) install cuda 11.1 and ensure the $PATH and $LD_LIBRARY_PATH environment variables are configured correctly (see instruction 9.1.1 here - but pointing to cuda 11.1 instead of 11.4)
  2. manually create and activate a brand new conda environment: conda create -n my_conv_onet python=3.6 and conda activate my_conv_onet
  3. use pip to install numpy and cython: pip install numpy cython
  4. modify the setup.py file by: a. remove the import for torch.utils.cpp_extension b. at the end of the file, remove the cmd_class argument from the setup function
  5. now run python setup.py build_ext --inplace
  6. install PyTorch as per Torch website instructions for installing PyTorch with cuda 11.1: pip3 install torch==1.9.0+cu111 torchvision==0.10.0+cu111 -f https://download.pytorch.org/whl/torch_stable.html
  7. install torch-scatter as per Torch Scatter website instructions for installing with cuda 11.1: pip install torch-scatter -f https://pytorch-geometric.com/whl/torch-1.9.0+cu111.html
  8. install remaining dependencies with pip: pip install matplotlib tensorboardx trimesh pyyaml tqdm

This should then provide you with a fully installed environment from which to run the code. I will print my conda list in a comment below.

jnyjxn commented 3 years ago

Conda list:

# Name                    Version                   Build  Channel
_libgcc_mutex             0.1                        main  
_openmp_mutex             4.5                       1_gnu  
ca-certificates           2021.7.5             h06a4308_1  
certifi                   2021.5.30        py36h06a4308_0  
cycler                    0.10.0                   pypi_0    pypi
cython                    0.29.24          py36h295c915_0  
dataclasses               0.8                      pypi_0    pypi
kiwisolver                1.3.1                    pypi_0    pypi
ld_impl_linux-64          2.35.1               h7274673_9  
libffi                    3.3                  he6710b0_2  
libgcc-ng                 9.3.0               h5101ec6_17  
libgomp                   9.3.0               h5101ec6_17  
libstdcxx-ng              9.3.0               hd4cf53a_17  
matplotlib                3.3.4                    pypi_0    pypi
ncurses                   6.2                  he6710b0_1  
numpy                     1.19.5                   pypi_0    pypi
openssl                   1.1.1k               h27cfd23_0  
pillow                    8.3.1                    pypi_0    pypi
pip                       21.0.1           py36h06a4308_0  
protobuf                  3.17.3                   pypi_0    pypi
pyparsing                 2.4.7                    pypi_0    pypi
python                    3.6.13               h12debd9_1  
python-dateutil           2.8.2                    pypi_0    pypi
pyyaml                    5.4.1                    pypi_0    pypi
readline                  8.1                  h27cfd23_0  
setuptools                52.0.0           py36h06a4308_0  
six                       1.16.0                   pypi_0    pypi
sqlite                    3.36.0               hc218d9a_0  
tensorboardx              2.4                      pypi_0    pypi
tk                        8.6.10               hbc83047_0  
torch                     1.9.0+cu111              pypi_0    pypi
torch-scatter             2.0.8                    pypi_0    pypi
torchaudio                0.9.0                    pypi_0    pypi
torchvision               0.10.0+cu111             pypi_0    pypi
tqdm                      4.62.2                   pypi_0    pypi
trimesh                   3.9.29                   pypi_0    pypi
typing-extensions         3.10.0.2                 pypi_0    pypi
wheel                     0.37.0             pyhd3eb1b0_0  
xz                        5.2.5                h7b6447c_0  
zlib                      1.2.11               h7b6447c_3  
jnyjxn commented 3 years ago

cuDNN errors when running with conda installed from environment.yaml:

Current best validation metric (iou): -inf
Total number of parameters: 7812705
output path:  /data4/jja17/experiments/conv_occ_net
Traceback (most recent call last):
  File "train.py", line 138, in <module>
    loss = trainer.train_step(batch)
  File "/home/jja17/Documents/Code/convolutional_occupancy_networks/src/conv_onet/training.py", line 47, in train_step
    loss = self.compute_loss(data)
  File "/home/jja17/Documents/Code/convolutional_occupancy_networks/src/conv_onet/training.py", line 133, in compute_loss
    c = self.model.encode_inputs(inputs)
  File "/home/jja17/Documents/Code/convolutional_occupancy_networks/src/conv_onet/models/__init__.py", line 60, in encode_inputs
    c = self.encoder(inputs)
  File "/home/jja17/miniconda3/envs/conv_onet/lib/python3.6/site-packages/torch/nn/modules/module.py", line 532, in __call__
    result = self.forward(*input, **kwargs)
  File "/home/jja17/Documents/Code/convolutional_occupancy_networks/src/encoder/pointnet.py", line 152, in forward
    fea['xz'] = self.generate_plane_features(p, c, plane='xz')
  File "/home/jja17/Documents/Code/convolutional_occupancy_networks/src/encoder/pointnet.py", line 82, in generate_plane_features
    fea_plane = self.unet(fea_plane)
  File "/home/jja17/miniconda3/envs/conv_onet/lib/python3.6/site-packages/torch/nn/modules/module.py", line 532, in __call__
    result = self.forward(*input, **kwargs)
  File "/home/jja17/Documents/Code/convolutional_occupancy_networks/src/encoder/unet.py", line 229, in forward
    x, before_pool = module(x)
  File "/home/jja17/miniconda3/envs/conv_onet/lib/python3.6/site-packages/torch/nn/modules/module.py", line 532, in __call__
    result = self.forward(*input, **kwargs)
  File "/home/jja17/Documents/Code/convolutional_occupancy_networks/src/encoder/unet.py", line 67, in forward
    x = F.relu(self.conv1(x))
  File "/home/jja17/miniconda3/envs/conv_onet/lib/python3.6/site-packages/torch/nn/modules/module.py", line 532, in __call__
    result = self.forward(*input, **kwargs)
  File "/home/jja17/miniconda3/envs/conv_onet/lib/python3.6/site-packages/torch/nn/modules/conv.py", line 345, in forward
    return self.conv2d_forward(input, self.weight)
  File "/home/jja17/miniconda3/envs/conv_onet/lib/python3.6/site-packages/torch/nn/modules/conv.py", line 342, in conv2d_forward
    self.padding, self.dilation, self.groups)
RuntimeError: cuDNN error: CUDNN_STATUS_EXECUTION_FAILED
jnyjxn commented 3 years ago

Build errors with unmodified setup.py:

running build_ext
building 'src.utils.libkdtree.pykdtree.kdtree' extension
Emitting ninja build file /home/jja17/Documents/Code/convolutional_occupancy_networks/build/temp.linux-x86_64-3.6/build.ninja...
Compiling objects...
Allowing ninja to set a default number of workers... (overridable by setting the environment variable MAX_JOBS=N)
[1/2] c++ -MMD -MF /home/jja17/Documents/Code/convolutional_occupancy_networks/build/temp.linux-x86_64-3.6/src/utils/libkdtree/pykdtree/_kdtree_core.o.d -pthread -B /home/jja17/miniconda3/envs/co/compiler_compat -Wl,--sysroot=/ -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -fPIC -I/home/jja17/miniconda3/envs/co/lib/python3.6/site-packages/numpy/core/include -I/home/jja17/miniconda3/envs/co/include/python3.6m -c -c /home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c -o /home/jja17/Documents/Code/convolutional_occupancy_networks/build/temp.linux-x86_64-3.6/src/utils/libkdtree/pykdtree/_kdtree_core.o -std=c99 -O3 -fopenmp -DTORCH_API_INCLUDE_EXTENSION_H '-DPYBIND11_COMPILER_TYPE="_gcc"' '-DPYBIND11_STDLIB="_libstdcpp"' '-DPYBIND11_BUILD_ABI="_cxxabi1011"' -DTORCH_EXTENSION_NAME=kdtree -D_GLIBCXX_USE_CXX11_ABI=0
FAILED: /home/jja17/Documents/Code/convolutional_occupancy_networks/build/temp.linux-x86_64-3.6/src/utils/libkdtree/pykdtree/_kdtree_core.o 
c++ -MMD -MF /home/jja17/Documents/Code/convolutional_occupancy_networks/build/temp.linux-x86_64-3.6/src/utils/libkdtree/pykdtree/_kdtree_core.o.d -pthread -B /home/jja17/miniconda3/envs/co/compiler_compat -Wl,--sysroot=/ -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -fPIC -I/home/jja17/miniconda3/envs/co/lib/python3.6/site-packages/numpy/core/include -I/home/jja17/miniconda3/envs/co/include/python3.6m -c -c /home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c -o /home/jja17/Documents/Code/convolutional_occupancy_networks/build/temp.linux-x86_64-3.6/src/utils/libkdtree/pykdtree/_kdtree_core.o -std=c99 -O3 -fopenmp -DTORCH_API_INCLUDE_EXTENSION_H '-DPYBIND11_COMPILER_TYPE="_gcc"' '-DPYBIND11_STDLIB="_libstdcpp"' '-DPYBIND11_BUILD_ABI="_cxxabi1011"' -DTORCH_EXTENSION_NAME=kdtree -D_GLIBCXX_USE_CXX11_ABI=0
cc1plus: warning: command line option ‘-Wstrict-prototypes’ is valid for C/ObjC but not for C++
cc1plus: warning: command line option ‘-std=c99’ is valid for C/ObjC but not for C++
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:49:3: error: conflicting declaration ‘typedef struct Node_float Node_float’
   49 | } Node_float;
      |   ^~~~~~~~~~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:47:12: note: previous declaration as ‘struct Node_float’
   47 |     struct Node_float *left_child;
      |            ^~~~~~~~~~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:70:3: error: conflicting declaration ‘typedef struct Node_double Node_double’
   70 | } Node_double;
      |   ^~~~~~~~~~~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:68:12: note: previous declaration as ‘struct Node_double’
   68 |     struct Node_double *left_child;
      |            ^~~~~~~~~~~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:95:40: error: expected ‘,’ or ‘...’ before ‘pa’
   95 | void search_leaf_float(float *restrict pa, uint32_t *restrict pidx, int8_t no_dims, uint32_t start_idx, uint32_t n, float *restrict point_coord,
      |                                        ^~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:97:45: error: expected ‘,’ or ‘...’ before ‘pa’
   97 | void search_leaf_float_mask(float *restrict pa, uint32_t *restrict pidx, int8_t no_dims, uint32_t start_idx, uint32_t n, float *restrict point_coord,
      |                                             ^~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:119:42: error: expected ‘,’ or ‘...’ before ‘pa’
  119 | void search_leaf_double(double *restrict pa, uint32_t *restrict pidx, int8_t no_dims, uint32_t start_idx, uint32_t n, double *restrict point_coord,
      |                                          ^~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:121:47: error: expected ‘,’ or ‘...’ before ‘pa’
  121 | void search_leaf_double_mask(double *restrict pa, uint32_t *restrict pidx, int8_t no_dims, uint32_t start_idx, uint32_t n, double *restrict point_coord,
      |                                               ^~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c: In function ‘Node_float* construct_subtree_float(float*, uint32_t*, int8_t, uint32_t, uint32_t, uint32_t, float*)’:
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:346:13: error: invalid use of incomplete type ‘struct Node_float’
  346 |         root->cut_dim = -1;
      |             ^~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:47:12: note: forward declaration of ‘struct Node_float’
   47 |     struct Node_float *left_child;
      |            ^~~~~~~~~~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:355:17: error: invalid use of incomplete type ‘struct Node_float’
  355 |             root->cut_dim = -1;
      |                 ^~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:47:12: note: forward declaration of ‘struct Node_float’
   47 |     struct Node_float *left_child;
      |            ^~~~~~~~~~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:358:13: error: invalid use of incomplete type ‘struct Node_float’
  358 |         root->cut_val = cut_val;
      |             ^~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:47:12: note: forward declaration of ‘struct Node_float’
   47 |     struct Node_float *left_child;
      |            ^~~~~~~~~~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:359:13: error: invalid use of incomplete type ‘struct Node_float’
  359 |         root->cut_dim = cut_dim;
      |             ^~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:47:12: note: forward declaration of ‘struct Node_float’
   47 |     struct Node_float *left_child;
      |            ^~~~~~~~~~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:366:13: error: invalid use of incomplete type ‘struct Node_float’
  366 |         root->cut_bounds_lv = lv;
      |             ^~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:47:12: note: forward declaration of ‘struct Node_float’
   47 |     struct Node_float *left_child;
      |            ^~~~~~~~~~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:367:13: error: invalid use of incomplete type ‘struct Node_float’
  367 |         root->cut_bounds_hv = hv;
      |             ^~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:47:12: note: forward declaration of ‘struct Node_float’
   47 |     struct Node_float *left_child;
      |            ^~~~~~~~~~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:371:13: error: invalid use of incomplete type ‘struct Node_float’
  371 |         root->left_child = (struct Node_float *)construct_subtree_float(pa, pidx, no_dims, start_idx, n_lo, bsp, bbox);
      |             ^~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:47:12: note: forward declaration of ‘struct Node_float’
   47 |     struct Node_float *left_child;
      |            ^~~~~~~~~~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:376:13: error: invalid use of incomplete type ‘struct Node_float’
  376 |         root->right_child = (struct Node_float *)construct_subtree_float(pa, pidx, no_dims, start_idx + n_lo, n - n_lo, bsp, bbox);
      |             ^~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:47:12: note: forward declaration of ‘struct Node_float’
   47 |     struct Node_float *left_child;
      |            ^~~~~~~~~~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c: In function ‘Node_float* create_node_float(uint32_t, uint32_t, int)’:
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:433:58: error: invalid application of ‘sizeof’ to incomplete type ‘Node_float’
  433 |         new_node = (Node_float *)malloc(sizeof(Node_float) - 2 * sizeof(Node_float *));
      |                                                          ^
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:437:58: error: invalid application of ‘sizeof’ to incomplete type ‘Node_float’
  437 |         new_node = (Node_float *)malloc(sizeof(Node_float));
      |                                                          ^
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:439:13: error: invalid use of incomplete type ‘struct Node_float’
  439 |     new_node->n = n;
      |             ^~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:47:12: note: forward declaration of ‘struct Node_float’
   47 |     struct Node_float *left_child;
      |            ^~~~~~~~~~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:440:13: error: invalid use of incomplete type ‘struct Node_float’
  440 |     new_node->start_idx = start_idx;
      |             ^~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:47:12: note: forward declaration of ‘struct Node_float’
   47 |     struct Node_float *left_child;
      |            ^~~~~~~~~~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c: In function ‘void delete_subtree_float(Node_float*)’:
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:451:13: error: invalid use of incomplete type ‘struct Node_float’
  451 |     if (root->cut_dim != -1)
      |             ^~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:47:12: note: forward declaration of ‘struct Node_float’
   47 |     struct Node_float *left_child;
      |            ^~~~~~~~~~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:453:48: error: invalid use of incomplete type ‘struct Node_float’
  453 |         delete_subtree_float((Node_float *)root->left_child);
      |                                                ^~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:47:12: note: forward declaration of ‘struct Node_float’
   47 |     struct Node_float *left_child;
      |            ^~~~~~~~~~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:454:48: error: invalid use of incomplete type ‘struct Node_float’
  454 |         delete_subtree_float((Node_float *)root->right_child);
      |                                                ^~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:47:12: note: forward declaration of ‘struct Node_float’
   47 |     struct Node_float *left_child;
      |            ^~~~~~~~~~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c: In function ‘void print_tree_float(Node_float*, int)’:
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:482:48: error: invalid use of incomplete type ‘struct Node_float’
  482 |     printf("(cut_val: %f, cut_dim: %i)\n", root->cut_val, root->cut_dim);
      |                                                ^~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:47:12: note: forward declaration of ‘struct Node_float’
   47 |     struct Node_float *left_child;
      |            ^~~~~~~~~~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:482:63: error: invalid use of incomplete type ‘struct Node_float’
  482 |     printf("(cut_val: %f, cut_dim: %i)\n", root->cut_val, root->cut_dim);
      |                                                               ^~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:47:12: note: forward declaration of ‘struct Node_float’
   47 |     struct Node_float *left_child;
      |            ^~~~~~~~~~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:483:13: error: invalid use of incomplete type ‘struct Node_float’
  483 |     if (root->cut_dim != -1)
      |             ^~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:47:12: note: forward declaration of ‘struct Node_float’
   47 |     struct Node_float *left_child;
      |            ^~~~~~~~~~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:484:44: error: invalid use of incomplete type ‘struct Node_float’
  484 |         print_tree_float((Node_float *)root->left_child, level + 1);
      |                                            ^~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:47:12: note: forward declaration of ‘struct Node_float’
   47 |     struct Node_float *left_child;
      |            ^~~~~~~~~~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:485:13: error: invalid use of incomplete type ‘struct Node_float’
  485 |     if (root->cut_dim != -1)
      |             ^~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:47:12: note: forward declaration of ‘struct Node_float’
   47 |     struct Node_float *left_child;
      |            ^~~~~~~~~~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:486:44: error: invalid use of incomplete type ‘struct Node_float’
  486 |         print_tree_float((Node_float *)root->right_child, level + 1);
      |                                            ^~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:47:12: note: forward declaration of ‘struct Node_float’
   47 |     struct Node_float *left_child;
      |            ^~~~~~~~~~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c: At global scope:
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:569:40: error: expected ‘,’ or ‘...’ before ‘pa’
  569 | void search_leaf_float(float *restrict pa, uint32_t *restrict pidx, int8_t no_dims, uint32_t start_idx, uint32_t n, float *restrict point_coord,
      |                                        ^~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c: In function ‘void search_leaf_float(float*)’:
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:575:21: error: ‘n’ was not declared in this scope
  575 |     for (i = 0; i < n; i++)
      |                     ^
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:31:20: error: ‘pa’ was not declared in this scope
   31 | #define PA(i,d)   (pa[no_dims * pidx[i] + d])
      |                    ^~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:578:37: note: in expansion of macro ‘PA’
  578 |         cur_dist = calc_dist_float(&PA(start_idx + i, 0), point_coord, no_dims);
      |                                     ^~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:31:23: error: ‘no_dims’ was not declared in this scope
   31 | #define PA(i,d)   (pa[no_dims * pidx[i] + d])
      |                       ^~~~~~~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:578:37: note: in expansion of macro ‘PA’
  578 |         cur_dist = calc_dist_float(&PA(start_idx + i, 0), point_coord, no_dims);
      |                                     ^~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:31:33: error: ‘pidx’ was not declared in this scope
   31 | #define PA(i,d)   (pa[no_dims * pidx[i] + d])
      |                                 ^~~~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:578:37: note: in expansion of macro ‘PA’
  578 |         cur_dist = calc_dist_float(&PA(start_idx + i, 0), point_coord, no_dims);
      |                                     ^~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:578:40: error: ‘start_idx’ was not declared in this scope
  578 |         cur_dist = calc_dist_float(&PA(start_idx + i, 0), point_coord, no_dims);
      |                                        ^~~~~~~~~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:31:38: note: in definition of macro ‘PA’
   31 | #define PA(i,d)   (pa[no_dims * pidx[i] + d])
      |                                      ^
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:578:59: error: ‘point_coord’ was not declared in this scope
  578 |         cur_dist = calc_dist_float(&PA(start_idx + i, 0), point_coord, no_dims);
      |                                                           ^~~~~~~~~~~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:580:24: error: ‘closest_dist’ was not declared in this scope
  580 |         if (cur_dist < closest_dist[k - 1])
      |                        ^~~~~~~~~~~~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:580:37: error: ‘k’ was not declared in this scope
  580 |         if (cur_dist < closest_dist[k - 1])
      |                                     ^
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:582:32: error: ‘closest_idx’ was not declared in this scope
  582 |             insert_point_float(closest_idx, closest_dist, pidx[start_idx + i], cur_dist, k);
      |                                ^~~~~~~~~~~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c: At global scope:
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:601:45: error: expected ‘,’ or ‘...’ before ‘pa’
  601 | void search_leaf_float_mask(float *restrict pa, uint32_t *restrict pidx, int8_t no_dims, uint32_t start_idx, uint32_t n, float *restrict point_coord,
      |                                             ^~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c: In function ‘void search_leaf_float_mask(float*)’:
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:607:21: error: ‘n’ was not declared in this scope
  607 |     for (i = 0; i < n; i++)
      |                     ^
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:610:13: error: ‘mask’ was not declared in this scope
  610 |         if (mask[pidx[start_idx + i]])
      |             ^~~~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:610:18: error: ‘pidx’ was not declared in this scope
  610 |         if (mask[pidx[start_idx + i]])
      |                  ^~~~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:610:23: error: ‘start_idx’ was not declared in this scope
  610 |         if (mask[pidx[start_idx + i]])
      |                       ^~~~~~~~~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:31:20: error: ‘pa’ was not declared in this scope
   31 | #define PA(i,d)   (pa[no_dims * pidx[i] + d])
      |                    ^~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:615:37: note: in expansion of macro ‘PA’
  615 |         cur_dist = calc_dist_float(&PA(start_idx + i, 0), point_coord, no_dims);
      |                                     ^~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:31:23: error: ‘no_dims’ was not declared in this scope
   31 | #define PA(i,d)   (pa[no_dims * pidx[i] + d])
      |                       ^~~~~~~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:615:37: note: in expansion of macro ‘PA’
  615 |         cur_dist = calc_dist_float(&PA(start_idx + i, 0), point_coord, no_dims);
      |                                     ^~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:31:33: error: ‘pidx’ was not declared in this scope
   31 | #define PA(i,d)   (pa[no_dims * pidx[i] + d])
      |                                 ^~~~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:615:37: note: in expansion of macro ‘PA’
  615 |         cur_dist = calc_dist_float(&PA(start_idx + i, 0), point_coord, no_dims);
      |                                     ^~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:615:40: error: ‘start_idx’ was not declared in this scope
  615 |         cur_dist = calc_dist_float(&PA(start_idx + i, 0), point_coord, no_dims);
      |                                        ^~~~~~~~~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:31:38: note: in definition of macro ‘PA’
   31 | #define PA(i,d)   (pa[no_dims * pidx[i] + d])
      |                                      ^
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:615:59: error: ‘point_coord’ was not declared in this scope
  615 |         cur_dist = calc_dist_float(&PA(start_idx + i, 0), point_coord, no_dims);
      |                                                           ^~~~~~~~~~~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:617:24: error: ‘closest_dist’ was not declared in this scope
  617 |         if (cur_dist < closest_dist[k - 1])
      |                        ^~~~~~~~~~~~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:617:37: error: ‘k’ was not declared in this scope
  617 |         if (cur_dist < closest_dist[k - 1])
      |                                     ^
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:619:32: error: ‘closest_idx’ was not declared in this scope
  619 |             insert_point_float(closest_idx, closest_dist, pidx[start_idx + i], cur_dist, k);
      |                                ^~~~~~~~~~~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c: In function ‘void search_splitnode_float(Node_float*, float*, uint32_t*, int8_t, float*, float, uint32_t, float, float, uint8_t*, uint32_t*, float*)’:
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:652:15: error: invalid use of incomplete type ‘struct Node_float’
  652 |     dim = root->cut_dim;
      |               ^~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:47:12: note: forward declaration of ‘struct Node_float’
   47 |     struct Node_float *left_child;
      |            ^~~~~~~~~~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:659:59: error: invalid use of incomplete type ‘struct Node_float’
  659 |             search_leaf_float_mask(pa, pidx, no_dims, root->start_idx, root->n, point_coord, k, mask, closest_idx, closest_dist);
      |                                                           ^~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:47:12: note: forward declaration of ‘struct Node_float’
   47 |     struct Node_float *left_child;
      |            ^~~~~~~~~~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:659:76: error: invalid use of incomplete type ‘struct Node_float’
  659 |             search_leaf_float_mask(pa, pidx, no_dims, root->start_idx, root->n, point_coord, k, mask, closest_idx, closest_dist);
      |                                                                            ^~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:47:12: note: forward declaration of ‘struct Node_float’
   47 |     struct Node_float *left_child;
      |            ^~~~~~~~~~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:663:54: error: invalid use of incomplete type ‘struct Node_float’
  663 |             search_leaf_float(pa, pidx, no_dims, root->start_idx, root->n, point_coord, k, closest_idx, closest_dist);
      |                                                      ^~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:47:12: note: forward declaration of ‘struct Node_float’
   47 |     struct Node_float *left_child;
      |            ^~~~~~~~~~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:663:71: error: invalid use of incomplete type ‘struct Node_float’
  663 |             search_leaf_float(pa, pidx, no_dims, root->start_idx, root->n, point_coord, k, closest_idx, closest_dist);
      |                                                                       ^~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:47:12: note: forward declaration of ‘struct Node_float’
   47 |     struct Node_float *left_child;
      |            ^~~~~~~~~~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:669:41: error: invalid use of incomplete type ‘struct Node_float’
  669 |     new_offset = point_coord[dim] - root->cut_val;
      |                                         ^~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:47:12: note: forward declaration of ‘struct Node_float’
   47 |     struct Node_float *left_child;
      |            ^~~~~~~~~~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:678:54: error: invalid use of incomplete type ‘struct Node_float’
  678 |             search_splitnode_float((Node_float *)root->left_child, pa, pidx, no_dims, point_coord, dist_left, k, distance_upper_bound, eps_fac, mask, closest_idx, closest_dist);
      |                                                      ^~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:47:12: note: forward declaration of ‘struct Node_float’
   47 |     struct Node_float *left_child;
      |            ^~~~~~~~~~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:684:24: error: invalid use of incomplete type ‘struct Node_float’
  684 |         box_diff = root->cut_bounds_lv - point_coord[dim];
      |                        ^~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:47:12: note: forward declaration of ‘struct Node_float’
   47 |     struct Node_float *left_child;
      |            ^~~~~~~~~~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:693:54: error: invalid use of incomplete type ‘struct Node_float’
  693 |             search_splitnode_float((Node_float *)root->right_child, pa, pidx, no_dims, point_coord, dist_right, k, distance_upper_bound, eps_fac, mask, closest_idx, closest_dist);
      |                                                      ^~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:47:12: note: forward declaration of ‘struct Node_float’
   47 |     struct Node_float *left_child;
      |            ^~~~~~~~~~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:703:54: error: invalid use of incomplete type ‘struct Node_float’
  703 |             search_splitnode_float((Node_float *)root->right_child, pa, pidx, no_dims, point_coord, dist_right, k, distance_upper_bound, eps_fac, mask, closest_idx, closest_dist);
      |                                                      ^~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:47:12: note: forward declaration of ‘struct Node_float’
   47 |     struct Node_float *left_child;
      |            ^~~~~~~~~~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:709:43: error: invalid use of incomplete type ‘struct Node_float’
  709 |         box_diff = point_coord[dim] - root->cut_bounds_hv;
      |                                           ^~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:47:12: note: forward declaration of ‘struct Node_float’
   47 |     struct Node_float *left_child;
      |            ^~~~~~~~~~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:718:54: error: invalid use of incomplete type ‘struct Node_float’
  718 |             search_splitnode_float((Node_float *)root->left_child, pa, pidx, no_dims, point_coord, dist_left, k, distance_upper_bound, eps_fac, mask, closest_idx, closest_dist);
      |                                                      ^~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:47:12: note: forward declaration of ‘struct Node_float’
   47 |     struct Node_float *left_child;
      |            ^~~~~~~~~~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c: In function ‘Node_double* construct_subtree_double(double*, uint32_t*, int8_t, uint32_t, uint32_t, uint32_t, double*)’:
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:990:13: error: invalid use of incomplete type ‘struct Node_double’
  990 |         root->cut_dim = -1;
      |             ^~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:68:12: note: forward declaration of ‘struct Node_double’
   68 |     struct Node_double *left_child;
      |            ^~~~~~~~~~~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:999:17: error: invalid use of incomplete type ‘struct Node_double’
  999 |             root->cut_dim = -1;
      |                 ^~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:68:12: note: forward declaration of ‘struct Node_double’
   68 |     struct Node_double *left_child;
      |            ^~~~~~~~~~~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:1002:13: error: invalid use of incomplete type ‘struct Node_double’
 1002 |         root->cut_val = cut_val;
      |             ^~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:68:12: note: forward declaration of ‘struct Node_double’
   68 |     struct Node_double *left_child;
      |            ^~~~~~~~~~~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:1003:13: error: invalid use of incomplete type ‘struct Node_double’
 1003 |         root->cut_dim = cut_dim;
      |             ^~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:68:12: note: forward declaration of ‘struct Node_double’
   68 |     struct Node_double *left_child;
      |            ^~~~~~~~~~~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:1010:13: error: invalid use of incomplete type ‘struct Node_double’
 1010 |         root->cut_bounds_lv = lv;
      |             ^~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:68:12: note: forward declaration of ‘struct Node_double’
   68 |     struct Node_double *left_child;
      |            ^~~~~~~~~~~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:1011:13: error: invalid use of incomplete type ‘struct Node_double’
 1011 |         root->cut_bounds_hv = hv;
      |             ^~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:68:12: note: forward declaration of ‘struct Node_double’
   68 |     struct Node_double *left_child;
      |            ^~~~~~~~~~~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:1015:13: error: invalid use of incomplete type ‘struct Node_double’
 1015 |         root->left_child = (struct Node_double *)construct_subtree_double(pa, pidx, no_dims, start_idx, n_lo, bsp, bbox);
      |             ^~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:68:12: note: forward declaration of ‘struct Node_double’
   68 |     struct Node_double *left_child;
      |            ^~~~~~~~~~~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:1020:13: error: invalid use of incomplete type ‘struct Node_double’
 1020 |         root->right_child = (struct Node_double *)construct_subtree_double(pa, pidx, no_dims, start_idx + n_lo, n - n_lo, bsp, bbox);
      |             ^~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:68:12: note: forward declaration of ‘struct Node_double’
   68 |     struct Node_double *left_child;
      |            ^~~~~~~~~~~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c: In function ‘Node_double* create_node_double(uint32_t, uint32_t, int)’:
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:1077:60: error: invalid application of ‘sizeof’ to incomplete type ‘Node_double’
 1077 |         new_node = (Node_double *)malloc(sizeof(Node_double) - 2 * sizeof(Node_double *));
      |                                                            ^
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:1081:60: error: invalid application of ‘sizeof’ to incomplete type ‘Node_double’
 1081 |         new_node = (Node_double *)malloc(sizeof(Node_double));
      |                                                            ^
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:1083:13: error: invalid use of incomplete type ‘struct Node_double’
 1083 |     new_node->n = n;
      |             ^~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:68:12: note: forward declaration of ‘struct Node_double’
   68 |     struct Node_double *left_child;
      |            ^~~~~~~~~~~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:1084:13: error: invalid use of incomplete type ‘struct Node_double’
 1084 |     new_node->start_idx = start_idx;
      |             ^~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:68:12: note: forward declaration of ‘struct Node_double’
   68 |     struct Node_double *left_child;
      |            ^~~~~~~~~~~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c: In function ‘void delete_subtree_double(Node_double*)’:
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:1095:13: error: invalid use of incomplete type ‘struct Node_double’
 1095 |     if (root->cut_dim != -1)
      |             ^~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:68:12: note: forward declaration of ‘struct Node_double’
   68 |     struct Node_double *left_child;
      |            ^~~~~~~~~~~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:1097:50: error: invalid use of incomplete type ‘struct Node_double’
 1097 |         delete_subtree_double((Node_double *)root->left_child);
      |                                                  ^~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:68:12: note: forward declaration of ‘struct Node_double’
   68 |     struct Node_double *left_child;
      |            ^~~~~~~~~~~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:1098:50: error: invalid use of incomplete type ‘struct Node_double’
 1098 |         delete_subtree_double((Node_double *)root->right_child);
      |                                                  ^~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:68:12: note: forward declaration of ‘struct Node_double’
   68 |     struct Node_double *left_child;
      |            ^~~~~~~~~~~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c: In function ‘void print_tree_double(Node_double*, int)’:
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:1126:48: error: invalid use of incomplete type ‘struct Node_double’
 1126 |     printf("(cut_val: %f, cut_dim: %i)\n", root->cut_val, root->cut_dim);
      |                                                ^~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:68:12: note: forward declaration of ‘struct Node_double’
   68 |     struct Node_double *left_child;
      |            ^~~~~~~~~~~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:1126:63: error: invalid use of incomplete type ‘struct Node_double’
 1126 |     printf("(cut_val: %f, cut_dim: %i)\n", root->cut_val, root->cut_dim);
      |                                                               ^~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:68:12: note: forward declaration of ‘struct Node_double’
   68 |     struct Node_double *left_child;
      |            ^~~~~~~~~~~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:1127:13: error: invalid use of incomplete type ‘struct Node_double’
 1127 |     if (root->cut_dim != -1)
      |             ^~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:68:12: note: forward declaration of ‘struct Node_double’
   68 |     struct Node_double *left_child;
      |            ^~~~~~~~~~~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:1128:46: error: invalid use of incomplete type ‘struct Node_double’
 1128 |         print_tree_double((Node_double *)root->left_child, level + 1);
      |                                              ^~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:68:12: note: forward declaration of ‘struct Node_double’
   68 |     struct Node_double *left_child;
      |            ^~~~~~~~~~~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:1129:13: error: invalid use of incomplete type ‘struct Node_double’
 1129 |     if (root->cut_dim != -1)
      |             ^~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:68:12: note: forward declaration of ‘struct Node_double’
   68 |     struct Node_double *left_child;
      |            ^~~~~~~~~~~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:1130:46: error: invalid use of incomplete type ‘struct Node_double’
 1130 |         print_tree_double((Node_double *)root->right_child, level + 1);
      |                                              ^~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:68:12: note: forward declaration of ‘struct Node_double’
   68 |     struct Node_double *left_child;
      |            ^~~~~~~~~~~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c: At global scope:
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:1213:42: error: expected ‘,’ or ‘...’ before ‘pa’
 1213 | void search_leaf_double(double *restrict pa, uint32_t *restrict pidx, int8_t no_dims, uint32_t start_idx, uint32_t n, double *restrict point_coord,
      |                                          ^~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c: In function ‘void search_leaf_double(double*)’:
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:1219:21: error: ‘n’ was not declared in this scope
 1219 |     for (i = 0; i < n; i++)
      |                     ^
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:31:20: error: ‘pa’ was not declared in this scope
   31 | #define PA(i,d)   (pa[no_dims * pidx[i] + d])
      |                    ^~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:1222:38: note: in expansion of macro ‘PA’
 1222 |         cur_dist = calc_dist_double(&PA(start_idx + i, 0), point_coord, no_dims);
      |                                      ^~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:31:23: error: ‘no_dims’ was not declared in this scope
   31 | #define PA(i,d)   (pa[no_dims * pidx[i] + d])
      |                       ^~~~~~~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:1222:38: note: in expansion of macro ‘PA’
 1222 |         cur_dist = calc_dist_double(&PA(start_idx + i, 0), point_coord, no_dims);
      |                                      ^~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:31:33: error: ‘pidx’ was not declared in this scope
   31 | #define PA(i,d)   (pa[no_dims * pidx[i] + d])
      |                                 ^~~~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:1222:38: note: in expansion of macro ‘PA’
 1222 |         cur_dist = calc_dist_double(&PA(start_idx + i, 0), point_coord, no_dims);
      |                                      ^~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:1222:41: error: ‘start_idx’ was not declared in this scope
 1222 |         cur_dist = calc_dist_double(&PA(start_idx + i, 0), point_coord, no_dims);
      |                                         ^~~~~~~~~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:31:38: note: in definition of macro ‘PA’
   31 | #define PA(i,d)   (pa[no_dims * pidx[i] + d])
      |                                      ^
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:1222:60: error: ‘point_coord’ was not declared in this scope
 1222 |         cur_dist = calc_dist_double(&PA(start_idx + i, 0), point_coord, no_dims);
      |                                                            ^~~~~~~~~~~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:1224:24: error: ‘closest_dist’ was not declared in this scope
 1224 |         if (cur_dist < closest_dist[k - 1])
      |                        ^~~~~~~~~~~~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:1224:37: error: ‘k’ was not declared in this scope
 1224 |         if (cur_dist < closest_dist[k - 1])
      |                                     ^
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:1226:33: error: ‘closest_idx’ was not declared in this scope
 1226 |             insert_point_double(closest_idx, closest_dist, pidx[start_idx + i], cur_dist, k);
      |                                 ^~~~~~~~~~~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c: At global scope:
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:1245:47: error: expected ‘,’ or ‘...’ before ‘pa’
 1245 | void search_leaf_double_mask(double *restrict pa, uint32_t *restrict pidx, int8_t no_dims, uint32_t start_idx, uint32_t n, double *restrict point_coord,
      |                                               ^~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c: In function ‘void search_leaf_double_mask(double*)’:
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:1251:21: error: ‘n’ was not declared in this scope
 1251 |     for (i = 0; i < n; i++)
      |                     ^
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:1254:13: error: ‘mask’ was not declared in this scope
 1254 |         if (mask[pidx[start_idx + i]])
      |             ^~~~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:1254:18: error: ‘pidx’ was not declared in this scope
 1254 |         if (mask[pidx[start_idx + i]])
      |                  ^~~~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:1254:23: error: ‘start_idx’ was not declared in this scope
 1254 |         if (mask[pidx[start_idx + i]])
      |                       ^~~~~~~~~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:31:20: error: ‘pa’ was not declared in this scope
   31 | #define PA(i,d)   (pa[no_dims * pidx[i] + d])
      |                    ^~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:1259:38: note: in expansion of macro ‘PA’
 1259 |         cur_dist = calc_dist_double(&PA(start_idx + i, 0), point_coord, no_dims);
      |                                      ^~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:31:23: error: ‘no_dims’ was not declared in this scope
   31 | #define PA(i,d)   (pa[no_dims * pidx[i] + d])
      |                       ^~~~~~~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:1259:38: note: in expansion of macro ‘PA’
 1259 |         cur_dist = calc_dist_double(&PA(start_idx + i, 0), point_coord, no_dims);
      |                                      ^~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:31:33: error: ‘pidx’ was not declared in this scope
   31 | #define PA(i,d)   (pa[no_dims * pidx[i] + d])
      |                                 ^~~~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:1259:38: note: in expansion of macro ‘PA’
 1259 |         cur_dist = calc_dist_double(&PA(start_idx + i, 0), point_coord, no_dims);
      |                                      ^~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:1259:41: error: ‘start_idx’ was not declared in this scope
 1259 |         cur_dist = calc_dist_double(&PA(start_idx + i, 0), point_coord, no_dims);
      |                                         ^~~~~~~~~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:31:38: note: in definition of macro ‘PA’
   31 | #define PA(i,d)   (pa[no_dims * pidx[i] + d])
      |                                      ^
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:1259:60: error: ‘point_coord’ was not declared in this scope
 1259 |         cur_dist = calc_dist_double(&PA(start_idx + i, 0), point_coord, no_dims);
      |                                                            ^~~~~~~~~~~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:1261:24: error: ‘closest_dist’ was not declared in this scope
 1261 |         if (cur_dist < closest_dist[k - 1])
      |                        ^~~~~~~~~~~~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:1261:37: error: ‘k’ was not declared in this scope
 1261 |         if (cur_dist < closest_dist[k - 1])
      |                                     ^
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:1263:33: error: ‘closest_idx’ was not declared in this scope
 1263 |             insert_point_double(closest_idx, closest_dist, pidx[start_idx + i], cur_dist, k);
      |                                 ^~~~~~~~~~~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c: In function ‘void search_splitnode_double(Node_double*, double*, uint32_t*, int8_t, double*, double, uint32_t, double, double, uint8_t*, uint32_t*, double*)’:
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:1296:15: error: invalid use of incomplete type ‘struct Node_double’
 1296 |     dim = root->cut_dim;
      |               ^~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:68:12: note: forward declaration of ‘struct Node_double’
   68 |     struct Node_double *left_child;
      |            ^~~~~~~~~~~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:1303:60: error: invalid use of incomplete type ‘struct Node_double’
 1303 |             search_leaf_double_mask(pa, pidx, no_dims, root->start_idx, root->n, point_coord, k, mask, closest_idx, closest_dist);
      |                                                            ^~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:68:12: note: forward declaration of ‘struct Node_double’
   68 |     struct Node_double *left_child;
      |            ^~~~~~~~~~~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:1303:77: error: invalid use of incomplete type ‘struct Node_double’
 1303 |             search_leaf_double_mask(pa, pidx, no_dims, root->start_idx, root->n, point_coord, k, mask, closest_idx, closest_dist);
      |                                                                             ^~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:68:12: note: forward declaration of ‘struct Node_double’
   68 |     struct Node_double *left_child;
      |            ^~~~~~~~~~~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:1307:55: error: invalid use of incomplete type ‘struct Node_double’
 1307 |             search_leaf_double(pa, pidx, no_dims, root->start_idx, root->n, point_coord, k, closest_idx, closest_dist);
      |                                                       ^~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:68:12: note: forward declaration of ‘struct Node_double’
   68 |     struct Node_double *left_child;
      |            ^~~~~~~~~~~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:1307:72: error: invalid use of incomplete type ‘struct Node_double’
 1307 |             search_leaf_double(pa, pidx, no_dims, root->start_idx, root->n, point_coord, k, closest_idx, closest_dist);
      |                                                                        ^~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:68:12: note: forward declaration of ‘struct Node_double’
   68 |     struct Node_double *left_child;
      |            ^~~~~~~~~~~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:1313:41: error: invalid use of incomplete type ‘struct Node_double’
 1313 |     new_offset = point_coord[dim] - root->cut_val;
      |                                         ^~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:68:12: note: forward declaration of ‘struct Node_double’
   68 |     struct Node_double *left_child;
      |            ^~~~~~~~~~~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:1322:56: error: invalid use of incomplete type ‘struct Node_double’
 1322 |             search_splitnode_double((Node_double *)root->left_child, pa, pidx, no_dims, point_coord, dist_left, k, distance_upper_bound, eps_fac, mask, closest_idx, closest_dist);
      |                                                        ^~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:68:12: note: forward declaration of ‘struct Node_double’
   68 |     struct Node_double *left_child;
      |            ^~~~~~~~~~~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:1328:24: error: invalid use of incomplete type ‘struct Node_double’
 1328 |         box_diff = root->cut_bounds_lv - point_coord[dim];
      |                        ^~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:68:12: note: forward declaration of ‘struct Node_double’
   68 |     struct Node_double *left_child;
      |            ^~~~~~~~~~~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:1337:56: error: invalid use of incomplete type ‘struct Node_double’
 1337 |             search_splitnode_double((Node_double *)root->right_child, pa, pidx, no_dims, point_coord, dist_right, k, distance_upper_bound, eps_fac, mask, closest_idx, closest_dist);
      |                                                        ^~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:68:12: note: forward declaration of ‘struct Node_double’
   68 |     struct Node_double *left_child;
      |            ^~~~~~~~~~~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:1347:56: error: invalid use of incomplete type ‘struct Node_double’
 1347 |             search_splitnode_double((Node_double *)root->right_child, pa, pidx, no_dims, point_coord, dist_right, k, distance_upper_bound, eps_fac, mask, closest_idx, closest_dist);
      |                                                        ^~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:68:12: note: forward declaration of ‘struct Node_double’
   68 |     struct Node_double *left_child;
      |            ^~~~~~~~~~~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:1353:43: error: invalid use of incomplete type ‘struct Node_double’
 1353 |         box_diff = point_coord[dim] - root->cut_bounds_hv;
      |                                           ^~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:68:12: note: forward declaration of ‘struct Node_double’
   68 |     struct Node_double *left_child;
      |            ^~~~~~~~~~~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:1362:56: error: invalid use of incomplete type ‘struct Node_double’
 1362 |             search_splitnode_double((Node_double *)root->left_child, pa, pidx, no_dims, point_coord, dist_left, k, distance_upper_bound, eps_fac, mask, closest_idx, closest_dist);
      |                                                        ^~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/_kdtree_core.c:68:12: note: forward declaration of ‘struct Node_double’
   68 |     struct Node_double *left_child;
      |            ^~~~~~~~~~~
[2/2] c++ -MMD -MF /home/jja17/Documents/Code/convolutional_occupancy_networks/build/temp.linux-x86_64-3.6/src/utils/libkdtree/pykdtree/kdtree.o.d -pthread -B /home/jja17/miniconda3/envs/co/compiler_compat -Wl,--sysroot=/ -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -fPIC -I/home/jja17/miniconda3/envs/co/lib/python3.6/site-packages/numpy/core/include -I/home/jja17/miniconda3/envs/co/include/python3.6m -c -c /home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/kdtree.c -o /home/jja17/Documents/Code/convolutional_occupancy_networks/build/temp.linux-x86_64-3.6/src/utils/libkdtree/pykdtree/kdtree.o -std=c99 -O3 -fopenmp -DTORCH_API_INCLUDE_EXTENSION_H '-DPYBIND11_COMPILER_TYPE="_gcc"' '-DPYBIND11_STDLIB="_libstdcpp"' '-DPYBIND11_BUILD_ABI="_cxxabi1011"' -DTORCH_EXTENSION_NAME=kdtree -D_GLIBCXX_USE_CXX11_ABI=0
cc1plus: warning: command line option ‘-Wstrict-prototypes’ is valid for C/ObjC but not for C++
cc1plus: warning: command line option ‘-std=c99’ is valid for C/ObjC but not for C++
In file included from /home/jja17/miniconda3/envs/co/lib/python3.6/site-packages/numpy/core/include/numpy/ndarraytypes.h:1822,
                 from /home/jja17/miniconda3/envs/co/lib/python3.6/site-packages/numpy/core/include/numpy/ndarrayobject.h:12,
                 from /home/jja17/miniconda3/envs/co/lib/python3.6/site-packages/numpy/core/include/numpy/arrayobject.h:4,
                 from /home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/kdtree.c:525:
/home/jja17/miniconda3/envs/co/lib/python3.6/site-packages/numpy/core/include/numpy/npy_1_7_deprecated_api.h:17:2: warning: #warning "Using deprecated NumPy API, disable it with " "#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION" [-Wcpp]
   17 | #warning "Using deprecated NumPy API, disable it with " \
      |  ^~~~~~~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/kdtree.c: In function ‘PyObject* __pyx_pf_8pykdtree_6kdtree_6KDTree_4query(__pyx_obj_8pykdtree_6kdtree_KDTree*, PyArrayObject*, PyObject*, PyObject*, PyObject*, PyObject*, PyObject*)’:
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/kdtree.c:4233:37: warning: ‘__pyx_v_dub_double’ may be used uninitialized in this function [-Wmaybe-uninitialized]
 4233 |       __pyx_t_8 = PyFloat_FromDouble(__pyx_v_dub_double); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 266, __pyx_L1_error)
      |                   ~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/kdtree.c:4208:37: warning: ‘__pyx_v_dub_float’ may be used uninitialized in this function [-Wmaybe-uninitialized]
 4208 |       __pyx_t_1 = PyFloat_FromDouble(__pyx_v_dub_float); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 264, __pyx_L1_error)
      |                   ~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/kdtree.c:3978:29: warning: ‘__pyx_v_query_array_data_double’ may be used uninitialized in this function [-Wmaybe-uninitialized]
 3978 |           search_tree_double(__pyx_v_self->_kdtree_double, __pyx_v_self->_data_pts_data_double, __pyx_v_query_array_data_double, __pyx_v_num_qpoints, __pyx_v_num_n, __pyx_v_dub_double, __pyx_v_epsilon_double, __pyx_v_query_mask_data, __pyx_v_closest_idxs_data, __pyx_v_closest_dists_data_double);
      |           ~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/kdtree.c:3923:28: warning: ‘__pyx_v_query_array_data_float’ may be used uninitialized in this function [-Wmaybe-uninitialized]
 3923 |           search_tree_float(__pyx_v_self->_kdtree_float, __pyx_v_self->_data_pts_data_float, __pyx_v_query_array_data_float, __pyx_v_num_qpoints, __pyx_v_num_n, __pyx_v_dub_float, __pyx_v_epsilon_float, __pyx_v_query_mask_data, __pyx_v_closest_idxs_data, __pyx_v_closest_dists_data_float);
      |           ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/kdtree.c:3978:29: warning: ‘__pyx_v_closest_dists_data_double’ may be used uninitialized in this function [-Wmaybe-uninitialized]
 3978 |           search_tree_double(__pyx_v_self->_kdtree_double, __pyx_v_self->_data_pts_data_double, __pyx_v_query_array_data_double, __pyx_v_num_qpoints, __pyx_v_num_n, __pyx_v_dub_double, __pyx_v_epsilon_double, __pyx_v_query_mask_data, __pyx_v_closest_idxs_data, __pyx_v_closest_dists_data_double);
      |           ~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/jja17/Documents/Code/convolutional_occupancy_networks/src/utils/libkdtree/pykdtree/kdtree.c:3923:28: warning: ‘__pyx_v_closest_dists_data_float’ may be used uninitialized in this function [-Wmaybe-uninitialized]
 3923 |           search_tree_float(__pyx_v_self->_kdtree_float, __pyx_v_self->_data_pts_data_float, __pyx_v_query_array_data_float, __pyx_v_num_qpoints, __pyx_v_num_n, __pyx_v_dub_float, __pyx_v_epsilon_float, __pyx_v_query_mask_data, __pyx_v_closest_idxs_data, __pyx_v_closest_dists_data_float);
      |           ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ninja: build stopped: subcommand failed.
Traceback (most recent call last):
  File "/home/jja17/miniconda3/envs/co/lib/python3.6/site-packages/torch/utils/cpp_extension.py", line 1672, in _run_ninja_build
    env=env)
  File "/home/jja17/miniconda3/envs/co/lib/python3.6/subprocess.py", line 438, in run
    output=stdout, stderr=stderr)
subprocess.CalledProcessError: Command '['ninja', '-v']' returned non-zero exit status 1.

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "setup.py", line 90, in <module>
    'build_ext': BuildExtension
  File "/home/jja17/miniconda3/envs/co/lib/python3.6/site-packages/setuptools/__init__.py", line 153, in setup
    return distutils.core.setup(**attrs)
  File "/home/jja17/miniconda3/envs/co/lib/python3.6/distutils/core.py", line 148, in setup
    dist.run_commands()
  File "/home/jja17/miniconda3/envs/co/lib/python3.6/distutils/dist.py", line 955, in run_commands
    self.run_command(cmd)
  File "/home/jja17/miniconda3/envs/co/lib/python3.6/distutils/dist.py", line 974, in run_command
    cmd_obj.run()
  File "/home/jja17/miniconda3/envs/co/lib/python3.6/site-packages/setuptools/command/build_ext.py", line 79, in run
    _build_ext.run(self)
  File "/home/jja17/miniconda3/envs/co/lib/python3.6/distutils/command/build_ext.py", line 339, in run
    self.build_extensions()
  File "/home/jja17/miniconda3/envs/co/lib/python3.6/site-packages/torch/utils/cpp_extension.py", line 709, in build_extensions
    build_ext.build_extensions(self)
  File "/home/jja17/miniconda3/envs/co/lib/python3.6/distutils/command/build_ext.py", line 448, in build_extensions
    self._build_extensions_serial()
  File "/home/jja17/miniconda3/envs/co/lib/python3.6/distutils/command/build_ext.py", line 473, in _build_extensions_serial
    self.build_extension(ext)
  File "/home/jja17/miniconda3/envs/co/lib/python3.6/site-packages/setuptools/command/build_ext.py", line 196, in build_extension
    _build_ext.build_extension(self, ext)
  File "/home/jja17/miniconda3/envs/co/lib/python3.6/distutils/command/build_ext.py", line 533, in build_extension
    depends=ext.depends)
  File "/home/jja17/miniconda3/envs/co/lib/python3.6/site-packages/torch/utils/cpp_extension.py", line 539, in unix_wrap_ninja_compile
    with_cuda=with_cuda)
  File "/home/jja17/miniconda3/envs/co/lib/python3.6/site-packages/torch/utils/cpp_extension.py", line 1360, in _write_ninja_file_and_compile_objects
    error_prefix='Error compiling objects for extension')
  File "/home/jja17/miniconda3/envs/co/lib/python3.6/site-packages/torch/utils/cpp_extension.py", line 1682, in _run_ninja_build
    raise RuntimeError(message) from e
RuntimeError: Error compiling objects for extension
pengsongyou commented 3 years ago

Thank you very much for this repo and your paper.

This is not so much an issue as much as it is shared tips for others who, like me, may be struggling to run this code on latest Nvidia graphics cards. My specs are: Ubuntu 18.04 2 x Nvidia RTX 3090 g++ 9.4/gcc 8.4/ninja 1.8

Specifically I had two main issues:

  1. running the code according to the instructions (installing from environment.yaml) led to unspecified cuDNN error that could be traced to incompatibility between my RTX3090 and the required PyTorch 1.5.
  2. installing all requirements manually including the latest PyTorch led to errors when running setup.py.

My solution was:

  1. (this may not be required but I include it as it is how my system is set up) install cuda 11.1 and ensure the $PATH and $LD_LIBRARY_PATH environment variables are configured correctly (see instruction 9.1.1 here - but pointing to cuda 11.1 instead of 11.4)
  2. manually create and activate a brand new conda environment: conda create -n my_conv_onet python=3.6 and conda activate my_conv_onet
  3. use pip to install numpy and cython: pip install numpy cython
  4. modify the setup.py file by: a. remove the import for torch.utils.cpp_extension b. at the end of the file, remove the cmd_class argument from the setup function
  5. now run python setup.py build_ext --inplace
  6. install PyTorch as per Torch website instructions for installing PyTorch with cuda 11.1: pip3 install torch==1.9.0+cu111 torchvision==0.10.0+cu111 -f https://download.pytorch.org/whl/torch_stable.html
  7. install torch-scatter as per Torch Scatter website instructions for installing with cuda 11.1: pip install torch-scatter -f https://pytorch-geometric.com/whl/torch-1.9.0+cu111.html
  8. install remaining dependencies with pip: pip install matplotlib tensorboardx trimesh pyyaml tqdm

This should then provide you with a fully installed environment from which to run the code. I will print my conda list in a comment below.

Hi @jnyjxn, thanks a lot for your interest on our project. I am wondering if you are able to solve the CUDA issue and run the code now?

The development environment for this project was GTX 1080Ti with CUDA 10.2. Unfortunately, I don't have a high-end GPU like RTX3090 with CUDA 11.1 at hand so I am afraid that I am not able to help you with this issue. Please let me know if you manage to run with your setting, then I can add a link to this post in the readme for those who wanna use CUDA 11.1 and higher version PyTorch.

Best, Songyou

jnyjxn commented 3 years ago

My apologies for not responding sooner - the above steps allowed me to run all of your code effectively and I was able to replicate your achievement on my own custom dataset :clap:.

XiaoyanQian commented 1 year ago

python 3.6.13

Hi, do you have to install another cuda of 11.1 even you have cuda 11.4. I got a similar cuda error of CUDNN_STATUS_MAPPING_ERROR, when I have 3090 and cuda 11.4. I was wondering if you have any suggestions in that regard. Thank you so much.