pyg-team / pytorch_geometric

Graph Neural Network Library for PyTorch
https://pyg.org
MIT License
21.35k stars 3.66k forks source link

Error with ppi.py example - classification.py:1143: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 due to no predicted samples. #195

Closed JoshuaMitton closed 5 years ago

JoshuaMitton commented 5 years ago

Error with ppi.py example

I am getting the error F-score is ill-defined and being set to 0.0 due to no predicted samples when running the ppi.py example.

This is the full output when the error occurs, it is causing nan Loss and 0 Accuracy after the error occurs.

Downloading https://s3.us-east-2.amazonaws.com/dgl.ai/dataset/ppi.zip Extracting /home/josh/Documents/Graph_Networks/PyTorchGeometric/Model_Study/pytorch_geometric/data/PPI/ppi.zip Processing... Done! Epoch: 01, Loss: 0.7505, Acc: 0.5000 Epoch: 02, Loss: 0.5345, Acc: 0.5595 /home/josh/.local/lib/python3.6/site-packages/sklearn/metrics/classification.py:1143: UndefinedMetricWarning: F-score is ill-defined and being set to 0.0 due to no predicted samples. 'precision', 'predicted', average, warn_for) Epoch: 03, Loss: nan, Acc: 0.0000 Epoch: 04, Loss: nan, Acc: 0.0000 Epoch: 05, Loss: nan, Acc: 0.0000

I have used the latest version of pytorch_geometric and my PyTorch version is 1.0.1.post2.

rusty1s commented 5 years ago

I pushed a potential fix. I would appreciate it if you could verify if it works now.

JoshuaMitton commented 5 years ago

It has removed the F-score metric warning, but I still get the same behaviour with the Loss becoming nan and Micro-F1 0.0.

This was the output from a run: python examples/ppi.py Epoch: 01, Loss: 0.8631, Micro-F1: 0.5122 Epoch: 02, Loss: nan, Micro-F1: 0.0000 Epoch: 03, Loss: nan, Micro-F1: 0.0000

rusty1s commented 5 years ago

Mh, seems like you need to help me out on this one. Are you running on CPU or GPU? Do you have an idea which operator produces the NaNs?

JoshuaMitton commented 5 years ago

So, when I run this on a CPU it runs fine and the issue isn't present. On a GPU I see the problem with nan loss. These are the outputs of model prediction and the data.y values before the loss is calculated. `data y : tensor([[1., 0., 0., ..., 1., 1., 0.], [0., 0., 0., ..., 1., 0., 0.], [0., 0., 0., ..., 1., 1., 0.], ..., [1., 1., 0., ..., 1., 1., 0.], [1., 0., 0., ..., 1., 1., 1.], [1., 1., 0., ..., 1., 1., 0.]], device='cuda:0')

model out : tensor([[ 1.4462, -3.2312, -1.9278, ..., 1.5005, 0.5878, -2.9639], [-0.4646, -0.8420, -2.3699, ..., 1.3286, -0.6192, -4.4037], [ 0.7323, -1.5283, -1.4297, ..., 2.0060, 0.5787, -1.9054], ..., [ 2.3713, -1.1423, -1.1698, ..., 2.0819, 0.6773, -1.8439], [ 0.0180, -0.5996, -0.9766, ..., 0.6414, 0.0521, -2.4653], [ 0.0856, -1.7054, -1.7052, ..., 0.9578, -0.6253, -2.0768]], device='cuda:0', grad_fn=)

loss : 0.48732060194015503

data y : tensor([[1., 0., 0., ..., 1., 1., 0.], [0., 0., 0., ..., 1., 0., 0.], [1., 1., 0., ..., 0., 0., 0.], ..., [1., 1., 0., ..., 1., 1., 0.], [1., 0., 0., ..., 1., 1., 1.], [1., 1., 0., ..., 1., 1., 0.]], device='cuda:0')

model out : tensor([[ 0.0739, -0.1491, -1.0226, ..., 0.9851, 0.1597, -3.0990], [-0.6943, -0.7542, -2.1734, ..., 1.3688, -0.8010, -4.2837], [ 0.5741, -0.8954, -1.6593, ..., 1.7034, 1.0574, -1.4740], ..., [ 1.7803, -1.0032, -0.8045, ..., 1.9316, 0.3904, -1.8607], [ 0.1450, -0.7208, -0.9661, ..., 0.8441, 0.1880, -2.5002], [-0.3822, -1.8847, -1.6032, ..., 0.6550, -1.1173, -2.5020]], device='cuda:0', grad_fn=)

loss : nan

data y : tensor([[1., 0., 0., ..., 1., 1., 0.], [0., 0., 0., ..., 1., 0., 0.], [0., 0., 0., ..., 1., 1., 0.], ..., [1., 1., 0., ..., 1., 1., 0.], [1., 0., 0., ..., 1., 1., 1.], [1., 1., 0., ..., 1., 1., 0.]], device='cuda:0')

model out : tensor([[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], ..., [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]], device='cuda:0', grad_fn=)

loss : nan `

It is probably worth noting here different versions I am using: pytorch: 1.0.1.post2 CUDA: 10.0.130 GPU: TITAN Xp

rusty1s commented 5 years ago

Thank you. Can you verify which op outputs NaNs by adding

print(torch.isnan(out).sum())

after each conv call. My guess is that the softmax of GAT may produce NaNs. I am just wondering why I cannot reproduce this issue.

JoshuaMitton commented 5 years ago

Yes it does appear that some NaNs are appearing after a conv call.

`model out : tensor([[-0.3082, -0.3048, -1.4101, ..., 1.0179, 0.3648, -3.8706], [-2.4770, -0.4546, -2.5037, ..., -0.3683, -1.3772, -9.2685], [ 0.0622, -1.7059, -1.2164, ..., 2.3960, 0.6733, -1.6973], ..., [ 1.6414, 0.4454, -1.3815, ..., 2.7983, 0.8147, -0.6113], [ 0.0979, -0.3717, -0.5387, ..., 1.7737, -0.5850, -3.0136], [-0.1976, -0.5281, -0.7758, ..., 1.6906, 0.0708, -2.1064]], device='cuda:0', grad_fn=)

sum of nan output : 0

sum of nan output : 0

sum of nan output : 0

loss : 0.4614076018333435

data y : tensor([[1., 0., 0., ..., 1., 1., 0.], [0., 0., 0., ..., 1., 0., 0.], [0., 0., 0., ..., 1., 1., 0.], ..., [1., 1., 0., ..., 1., 1., 0.], [1., 0., 0., ..., 1., 1., 1.], [1., 1., 0., ..., 1., 1., 0.]], device='cuda:0')

model out : tensor([[-2.8252e-03, -2.5085e+00, -1.2768e+00, ..., 7.4126e-01, 3.2040e-01, -1.8680e+00], [-8.8625e-01, -1.4311e+00, -2.4597e+00, ..., 6.2821e-01, -4.1468e-01, -4.2590e+00], [-2.7712e-01, -1.7768e+00, -1.3627e+00, ..., 2.2659e+00, 7.2915e-01, -1.9740e+00], ..., [ 1.1218e+00, 1.4477e-01, -1.3931e+00, ..., 2.2148e+00, 5.8621e-01, -8.2220e-01], [-4.5946e-02, -5.0435e-01, -5.8026e-01, ..., 1.8719e+00, -2.6296e-01, -2.7715e+00], [-6.1815e-02, -6.9628e-01, -1.0449e+00, ..., 1.0113e+00, -2.7086e-01, -2.1309e+00]], device='cuda:0', grad_fn=)

sum of nan output : 0

sum of nan output : 256

sum of nan output : 2057

loss : nan

data y : tensor([[1., 0., 0., ..., 1., 1., 0.], [0., 0., 0., ..., 1., 0., 0.], [0., 0., 0., ..., 1., 1., 0.], ..., [1., 1., 0., ..., 1., 1., 0.], [1., 0., 0., ..., 1., 1., 1.], [1., 1., 0., ..., 1., 1., 0.]], device='cuda:0')

model out : tensor([[nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], ..., [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan], [nan, nan, nan, ..., nan, nan, nan]], device='cuda:0', grad_fn=)

sum of nan output : 2547712

sum of nan output : 2547712

sum of nan output : 301048

loss : nan `

Hope this helps.

rusty1s commented 5 years ago

That definitely helps in narrowing down the problem. Unfortunately, I still don't know exactly what is causing this problem. Can you debug PyG? Especially verify the inputs and outputs of torch_geometric.utils.softmax:

def softmax(src, index, num_nodes=None):
    num_nodes = maybe_num_nodes(index, num_nodes)

    print('----------------------------')
    print('1', src.min().item(), src.max().item())
    out = src - scatter_max(src, index, dim=0, dim_size=num_nodes)[0][index]
    print('2', out.min().item(), out.max().item())
    out = out.exp()
    print('3', out.min().item(), out.max().item())
    out = out / (
        scatter_add(out, index, dim=0, dim_size=num_nodes)[index] + 1e-16)
    print('4', out.min().item(), out.max().item())
    print('----------------------------')

    return out

For me, this gives something like:

----------------------------
1 -2.5395474433898926 7.536279201507568
2 -7.851363182067871 0.0
3 0.0003892210079357028 1.0
4 2.0166289687040262e-05 0.9503622651100159
----------------------------
----------------------------
1 -40.89164733886719 149.2086944580078
2 -162.20309448242188 0.0
3 0.0 1.0
4 0.0 1.0
----------------------------
----------------------------
1 -117.2872085571289 21.09864616394043
2 -117.2872085571289 0.0
3 0.0 1.0
4 0.0 1.0
----------------------------
JoshuaMitton commented 5 years ago

These are the outputs from the softmax function with also the sum of number of NaNs after each conv call and the calculated loss. Note there is output before where I have started copying from, i.e. it runs ok for a little while before the NaN appears.

----------------------------
1 -0.7283598780632019 5.351083278656006
2 -0.7283598780632019 5.351083278656006
3 0.48270002007484436 210.83656311035156
4 0.0009401109418831766 0.9448805451393127
----------------------------
sum of nan output : 0
----------------------------
1 -10.098776817321777 11.842913627624512
2 -10.098776817321777 11.842913627624512
3 4.112983515369706e-05 139095.171875
4 3.7659226848063554e-08 0.9998012185096741
----------------------------
sum of nan output : 0
----------------------------
1 -14.342081069946289 52.25653076171875
2 -14.342081069946289 52.25653076171875
3 5.906270530431357e-07 4.951342098004118e+22
4 1.0241134858006949e-14 1.0
----------------------------
sum of nan output : 0
loss : 1.8224369287490845
----------------------------
1 -1.0103254318237305 5.458950996398926
2 -1.0103254318237305 5.458950996398926
3 0.36410048604011536 234.85092163085938
4 0.0003330033796373755 1.0
----------------------------
sum of nan output : 0
----------------------------
1 -12.008460998535156 25.15129852294922
2 -12.008460998535156 25.15129852294922
3 6.09244534643949e-06 83766460416.0
4 1.509261940142552e-14 1.0
----------------------------
sum of nan output : 0
----------------------------
1 -100.26512908935547 233.96954345703125
2 -100.26512908935547 233.96954345703125
3 2.802596928649634e-44 inf
4 nan nan
----------------------------
sum of nan output : 75988
loss : nan
----------------------------

So, the issue arises from taking the exponential of a large number and then dividing by the subsequent inf I assume.

JoshuaMitton commented 5 years ago

The outputs of scatter_max are all zero so this is clearly the issue.

----------------------------
1 -20.432388305664062 21.246431350708008
tensor([[-0.4442, -1.1095,  0.7559, -0.0578, -0.4996, -0.2731],
        [-0.1453, -0.3929,  1.0639, -0.0340, -0.3606,  0.0235],
        [-0.1622, -0.6943,  1.2650, -0.0435, -0.7590, -0.1195],
        ...,
        [-0.2763, -0.4319,  1.7247, -0.1327, -0.5637, -0.1285],
        [-0.0724, -0.2951,  1.0140, -0.0956, -0.2806,  0.0994],
        [-0.1619, -0.3750,  0.5960, -0.1111, -0.2445, -0.1484]],
       device='cuda:0', grad_fn=<LeakyReluBackward0>)
scatter_max tensor([[0., 0., 0., 0., 0., 0.],
        [0., 0., 0., 0., 0., 0.],
        [0., 0., 0., 0., 0., 0.],
        ...,
        [0., 0., 0., 0., 0., 0.],
        [0., 0., 0., 0., 0., 0.],
        [0., 0., 0., 0., 0., 0.]], device='cuda:0', grad_fn=<IndexBackward>)
2 -20.432388305664062 21.246431350708008
3 1.3376008078935797e-09 1687360512.0
4 4.4378185154458905e-11 0.9998724460601807
----------------------------

I do have torch_scatter-1.1.2 installed though so I am not sure what has gone wrong.

rusty1s commented 5 years ago

Can you run the test suite of torch-scatter?

JoshuaMitton commented 5 years ago

I installed torch-scatter using pip so I am not sure how to run the test suite, would I need to reinstall with setup.py?

rusty1s commented 5 years ago

You do not need to reinstall, simply run: python setup.py test

JoshuaMitton commented 5 years ago

The folder for the torch_scatter package only has the following files in:

ls ~/anaconda3/envs/pytorchgeometric/lib/python3.6/site-packages/torch_scatter/
add.py  div.py  __init__.py  max.py  mean.py  min.py  mul.py  __pycache__  scatter_cpu.cpython-36m-x86_64-linux-gnu.so  scatter_cuda.cpython-36m-x86_64-linux-gnu.so  std.py  sub.py  utils

I can run python setup.py test on pytorch_geometric and I get the following:

----------- coverage: platform linux, python 3.6.8-final-0 -----------
Name                                                  Stmts   Miss  Cover
-------------------------------------------------------------------------
torch_geometric/__init__.py                               2      0   100%
torch_geometric/data/__init__.py                          8      0   100%
torch_geometric/data/batch.py                            33      0   100%
torch_geometric/data/data.py                             80      0   100%
torch_geometric/data/dataloader.py                       17      0   100%
torch_geometric/data/dataset.py                          43      0   100%
torch_geometric/data/download.py                         14      0   100%
torch_geometric/data/in_memory_dataset.py                56      0   100%
torch_geometric/data/makedirs.py                          6      0   100%
torch_geometric/nn/__init__.py                           10      0   100%
torch_geometric/nn/conv/__init__.py                      22      0   100%
torch_geometric/nn/conv/agnn_conv.py                     32      0   100%
torch_geometric/nn/conv/appnp.py                         18      0   100%
torch_geometric/nn/conv/arma_conv.py                     69      0   100%
torch_geometric/nn/conv/cheb_conv.py                     44      0   100%
torch_geometric/nn/conv/dna_conv.py                     113      0   100%
torch_geometric/nn/conv/edge_conv.py                     20      0   100%
torch_geometric/nn/conv/gat_conv.py                      47      0   100%
torch_geometric/nn/conv/gated_graph_conv.py              30      0   100%
torch_geometric/nn/conv/gcn_conv.py                      52      0   100%
torch_geometric/nn/conv/gin_conv.py                      26      0   100%
torch_geometric/nn/conv/gmm_conv.py                      32      0   100%
torch_geometric/nn/conv/graph_conv.py                    25      0   100%
torch_geometric/nn/conv/message_passing.py               44      0   100%
torch_geometric/nn/conv/nn_conv.py                       36      0   100%
torch_geometric/nn/conv/point_conv.py                    27      0   100%
torch_geometric/nn/conv/rgcn_conv.py                     47      0   100%
torch_geometric/nn/conv/sage_conv.py                     34      0   100%
torch_geometric/nn/conv/sg_conv.py                       26      0   100%
torch_geometric/nn/conv/signed_conv.py                   30      0   100%
torch_geometric/nn/conv/spline_conv.py                   40      0   100%
torch_geometric/nn/conv/x_conv.py                        59      0   100%
torch_geometric/nn/dense/__init__.py                      3      0   100%
torch_geometric/nn/dense/dense_sage_conv.py              37      0   100%
torch_geometric/nn/dense/diff_pool.py                    16      0   100%
torch_geometric/nn/glob/__init__.py                       5      0   100%
torch_geometric/nn/glob/attention.py                     23      0   100%
torch_geometric/nn/glob/glob.py                          10      0   100%
torch_geometric/nn/glob/set2set.py                       28      0   100%
torch_geometric/nn/glob/sort.py                          20      0   100%
torch_geometric/nn/inits.py                              28      0   100%
torch_geometric/nn/meta.py                               23      0   100%
torch_geometric/nn/models/__init__.py                     3      0   100%
torch_geometric/nn/models/autoencoder.py                120      0   100%
torch_geometric/nn/models/signed_gcn.py                  46     33    28%
torch_geometric/nn/pool/__init__.py                       7      0   100%
torch_geometric/nn/pool/avg_pool.py                      23      0   100%
torch_geometric/nn/pool/consecutive.py                    6      0   100%
torch_geometric/nn/pool/graclus.py                        4      0   100%
torch_geometric/nn/pool/max_pool.py                      23      0   100%
torch_geometric/nn/pool/pool.py                          13      0   100%
torch_geometric/nn/pool/topk_pool.py                     58      0   100%
torch_geometric/nn/pool/voxel_grid.py                    17      0   100%
torch_geometric/nn/reshape.py                            10      0   100%
torch_geometric/nn/unpool/__init__.py                     2      0   100%
torch_geometric/nn/unpool/knn_interpolate.py             12      0   100%
torch_geometric/transforms/__init__.py                   29      0   100%
torch_geometric/transforms/add_self_loops.py             13      0   100%
torch_geometric/transforms/cartesian.py                  20      0   100%
torch_geometric/transforms/center.py                      6      0   100%
torch_geometric/transforms/compose.py                    10      0   100%
torch_geometric/transforms/constant.py                   15      0   100%
torch_geometric/transforms/distance.py                   18      0   100%
torch_geometric/transforms/face_to_edge.py               15      0   100%
torch_geometric/transforms/knn_graph.py                  20      0   100%
torch_geometric/transforms/line_graph.py                 42      0   100%
torch_geometric/transforms/linear_transformation.py      13      0   100%
torch_geometric/transforms/local_cartesian.py            19      0   100%
torch_geometric/transforms/local_degree_profile.py       23      0   100%
torch_geometric/transforms/normalize_features.py          6      0   100%
torch_geometric/transforms/normalize_rotation.py         19      0   100%
torch_geometric/transforms/normalize_scale.py            11      0   100%
torch_geometric/transforms/one_hot_degree.py             17      0   100%
torch_geometric/transforms/polar.py                      25      0   100%
torch_geometric/transforms/radius_graph.py               22      0   100%
torch_geometric/transforms/random_flip.py                13      0   100%
torch_geometric/transforms/random_rotate.py              25      0   100%
torch_geometric/transforms/random_scale.py               11      0   100%
torch_geometric/transforms/random_shear.py               13      0   100%
torch_geometric/transforms/random_translate.py           18      0   100%
torch_geometric/transforms/sample_points.py              31      0   100%
torch_geometric/transforms/spherical.py                  27      0   100%
torch_geometric/transforms/target_indegree.py            21      0   100%
torch_geometric/transforms/to_dense.py                   35      0   100%
torch_geometric/transforms/two_hop.py                    23      0   100%
torch_geometric/utils/__init__.py                        15      0   100%
torch_geometric/utils/convert.py                         32      0   100%
torch_geometric/utils/degree.py                           6      0   100%
torch_geometric/utils/dropout.py                         22      0   100%
torch_geometric/utils/grid.py                            27      0   100%
torch_geometric/utils/isolated.py                         7      0   100%
torch_geometric/utils/loop.py                            20      0   100%
torch_geometric/utils/metric.py                          42      0   100%
torch_geometric/utils/normalized_cut.py                   7      0   100%
torch_geometric/utils/num_nodes.py                        2      0   100%
torch_geometric/utils/one_hot.py                         18      0   100%
torch_geometric/utils/repeat.py                          12      0   100%
torch_geometric/utils/scatter.py                         11      0   100%
torch_geometric/utils/softmax.py                         16      0   100%
torch_geometric/utils/sparse.py                          14      0   100%
torch_geometric/utils/to_dense_batch.py                  14      0   100%
torch_geometric/utils/undirected.py                      15      0   100%
torch_geometric/visualization/__init__.py                 2      0   100%
torch_geometric/visualization/influence.py               10      0   100%
-------------------------------------------------------------------------
TOTAL                                                  2531     33    99%

============================================================================== 103 passed, 1 skipped, 48 warnings in 8.74 seconds ==============================================================================
rusty1s commented 5 years ago

You should clone torch-scatter and run the test suite in this repo folder.

JoshuaMitton commented 5 years ago

This didn't run successfully:

running pytest
Searching for pytest-cov
Reading https://pypi.org/simple/pytest-cov/
Downloading https://files.pythonhosted.org/packages/7d/b5/92f32674ab954f80499ac73347bfeb815545ea295439c12b0ef3ac8f0975/pytest_cov-2.6.1-py2.py3-none-any.whl#sha256=230ef817450ab0699c6cc3c9c8f7a829c34674456f2ed8df1fe1d39780f7c87f
Best match: pytest-cov 2.6.1
Processing pytest_cov-2.6.1-py2.py3-none-any.whl
Installing pytest_cov-2.6.1-py2.py3-none-any.whl to /home/josh/Documents/Graph_Networks/PyTorchGeometric/Model_Study/pytorch_scatter/.eggs
writing requirements to /home/josh/Documents/Graph_Networks/PyTorchGeometric/Model_Study/pytorch_scatter/.eggs/pytest_cov-2.6.1-py3.6.egg/EGG-INFO/requires.txt

Installed /home/josh/Documents/Graph_Networks/PyTorchGeometric/Model_Study/pytorch_scatter/.eggs/pytest_cov-2.6.1-py3.6.egg
Searching for pytest
Reading https://pypi.org/simple/pytest/
Downloading https://files.pythonhosted.org/packages/7e/16/83b2a35c427b838df9836c9e7e4ae6dfbcbdea643db44652f693b1c57d70/pytest-4.4.0-py2.py3-none-any.whl#sha256=13c5e9fb5ec5179995e9357111ab089af350d788cbc944c628f3cde72285809b
Best match: pytest 4.4.0
Processing pytest-4.4.0-py2.py3-none-any.whl
Installing pytest-4.4.0-py2.py3-none-any.whl to /home/josh/Documents/Graph_Networks/PyTorchGeometric/Model_Study/pytorch_scatter/.eggs
writing requirements to /home/josh/Documents/Graph_Networks/PyTorchGeometric/Model_Study/pytorch_scatter/.eggs/pytest-4.4.0-py3.6.egg/EGG-INFO/requires.txt

Installed /home/josh/Documents/Graph_Networks/PyTorchGeometric/Model_Study/pytorch_scatter/.eggs/pytest-4.4.0-py3.6.egg
Searching for coverage>=4.4
Reading https://pypi.org/simple/coverage/
Downloading https://files.pythonhosted.org/packages/cf/7e/8d42a2292e0a7c713db1004746510c2b2dbf149c8dd8e0a2bb1656167eaa/coverage-5.0a4-cp36-cp36m-manylinux1_x86_64.whl#sha256=02abbbebc6e9d5abe13cd28b5e963dedb6ffb51c146c916d17b18f141acd9947
Best match: coverage 5.0a4
Processing coverage-5.0a4-cp36-cp36m-manylinux1_x86_64.whl
Installing coverage-5.0a4-cp36-cp36m-manylinux1_x86_64.whl to /home/josh/Documents/Graph_Networks/PyTorchGeometric/Model_Study/pytorch_scatter/.eggs

Installed /home/josh/Documents/Graph_Networks/PyTorchGeometric/Model_Study/pytorch_scatter/.eggs/coverage-5.0a4-py3.6-linux-x86_64.egg
Searching for py>=1.5.0
Reading https://pypi.org/simple/py/
Downloading https://files.pythonhosted.org/packages/76/bc/394ad449851729244a97857ee14d7cba61ddb268dce3db538ba2f2ba1f0f/py-1.8.0-py2.py3-none-any.whl#sha256=64f65755aee5b381cea27766a3a147c3f15b9b6b9ac88676de66ba2ae36793fa
Best match: py 1.8.0
Processing py-1.8.0-py2.py3-none-any.whl
Installing py-1.8.0-py2.py3-none-any.whl to /home/josh/Documents/Graph_Networks/PyTorchGeometric/Model_Study/pytorch_scatter/.eggs

Installed /home/josh/Documents/Graph_Networks/PyTorchGeometric/Model_Study/pytorch_scatter/.eggs/py-1.8.0-py3.6.egg
Searching for pluggy>=0.9
Reading https://pypi.org/simple/pluggy/
Downloading https://files.pythonhosted.org/packages/84/e8/4ddac125b5a0e84ea6ffc93cfccf1e7ee1924e88f53c64e98227f0af2a5f/pluggy-0.9.0-py2.py3-none-any.whl#sha256=84d306a647cc805219916e62aab89caa97a33a1dd8c342e87a37f91073cd4746
Best match: pluggy 0.9.0
Processing pluggy-0.9.0-py2.py3-none-any.whl
Installing pluggy-0.9.0-py2.py3-none-any.whl to /home/josh/Documents/Graph_Networks/PyTorchGeometric/Model_Study/pytorch_scatter/.eggs
writing requirements to /home/josh/Documents/Graph_Networks/PyTorchGeometric/Model_Study/pytorch_scatter/.eggs/pluggy-0.9.0-py3.6.egg/EGG-INFO/requires.txt

Installed /home/josh/Documents/Graph_Networks/PyTorchGeometric/Model_Study/pytorch_scatter/.eggs/pluggy-0.9.0-py3.6.egg
Searching for more-itertools>=4.0.0
Reading https://pypi.org/simple/more-itertools/
Downloading https://files.pythonhosted.org/packages/b3/73/64fb5922b745fc1daee8a2880d907d2a70d9c7bb71eea86fcb9445daab5e/more_itertools-7.0.0-py3-none-any.whl#sha256=2112d2ca570bb7c3e53ea1a35cd5df42bb0fd10c45f0fb97178679c3c03d64c7
Best match: more-itertools 7.0.0
Processing more_itertools-7.0.0-py3-none-any.whl
Installing more_itertools-7.0.0-py3-none-any.whl to /home/josh/Documents/Graph_Networks/PyTorchGeometric/Model_Study/pytorch_scatter/.eggs

Installed /home/josh/Documents/Graph_Networks/PyTorchGeometric/Model_Study/pytorch_scatter/.eggs/more_itertools-7.0.0-py3.6.egg
Searching for attrs>=17.4.0
Reading https://pypi.org/simple/attrs/
Downloading https://files.pythonhosted.org/packages/23/96/d828354fa2dbdf216eaa7b7de0db692f12c234f7ef888cc14980ef40d1d2/attrs-19.1.0-py2.py3-none-any.whl#sha256=69c0dbf2ed392de1cb5ec704444b08a5ef81680a61cb899dc08127123af36a79
Best match: attrs 19.1.0
Processing attrs-19.1.0-py2.py3-none-any.whl
Installing attrs-19.1.0-py2.py3-none-any.whl to /home/josh/Documents/Graph_Networks/PyTorchGeometric/Model_Study/pytorch_scatter/.eggs
writing requirements to /home/josh/Documents/Graph_Networks/PyTorchGeometric/Model_Study/pytorch_scatter/.eggs/attrs-19.1.0-py3.6.egg/EGG-INFO/requires.txt

Installed /home/josh/Documents/Graph_Networks/PyTorchGeometric/Model_Study/pytorch_scatter/.eggs/attrs-19.1.0-py3.6.egg
Searching for atomicwrites>=1.0
Reading https://pypi.org/simple/atomicwrites/
Downloading https://files.pythonhosted.org/packages/52/90/6155aa926f43f2b2a22b01be7241be3bfd1ceaf7d0b3267213e8127d41f4/atomicwrites-1.3.0-py2.py3-none-any.whl#sha256=03472c30eb2c5d1ba9227e4c2ca66ab8287fbfbbda3888aa93dc2e28fc6811b4
Best match: atomicwrites 1.3.0
Processing atomicwrites-1.3.0-py2.py3-none-any.whl
Installing atomicwrites-1.3.0-py2.py3-none-any.whl to /home/josh/Documents/Graph_Networks/PyTorchGeometric/Model_Study/pytorch_scatter/.eggs

Installed /home/josh/Documents/Graph_Networks/PyTorchGeometric/Model_Study/pytorch_scatter/.eggs/atomicwrites-1.3.0-py3.6.egg
running egg_info
creating torch_scatter.egg-info
writing torch_scatter.egg-info/PKG-INFO
writing dependency_links to torch_scatter.egg-info/dependency_links.txt
writing top-level names to torch_scatter.egg-info/top_level.txt
writing manifest file 'torch_scatter.egg-info/SOURCES.txt'
reading manifest file 'torch_scatter.egg-info/SOURCES.txt'
reading manifest template 'MANIFEST.in'
writing manifest file 'torch_scatter.egg-info/SOURCES.txt'
running build_ext
building 'torch_scatter.scatter_cpu' extension
creating build
creating build/temp.linux-x86_64-3.6
creating build/temp.linux-x86_64-3.6/cpu
gcc -pthread -B /home/josh/anaconda3/envs/pytorchgeometric/compiler_compat -Wl,--sysroot=/ -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -fPIC -I/home/josh/.local/lib/python3.6/site-packages/torch/lib/include -I/home/josh/.local/lib/python3.6/site-packages/torch/lib/include/torch/csrc/api/include -I/home/josh/.local/lib/python3.6/site-packages/torch/lib/include/TH -I/home/josh/.local/lib/python3.6/site-packages/torch/lib/include/THC -I/home/josh/anaconda3/envs/pytorchgeometric/include/python3.6m -c cpu/scatter.cpp -o build/temp.linux-x86_64-3.6/cpu/scatter.o -Wno-unused-variable -DTORCH_API_INCLUDE_EXTENSION_H -DTORCH_EXTENSION_NAME=scatter_cpu -D_GLIBCXX_USE_CXX11_ABI=0 -std=c++11
cc1plus: warning: command line option ‘-Wstrict-prototypes’ is valid for C/ObjC but not for C++
creating build/lib.linux-x86_64-3.6
creating build/lib.linux-x86_64-3.6/torch_scatter
g++ -pthread -shared -B /home/josh/anaconda3/envs/pytorchgeometric/compiler_compat -L/home/josh/anaconda3/envs/pytorchgeometric/lib -Wl,-rpath=/home/josh/anaconda3/envs/pytorchgeometric/lib -Wl,--no-as-needed -Wl,--sysroot=/ build/temp.linux-x86_64-3.6/cpu/scatter.o -o build/lib.linux-x86_64-3.6/torch_scatter/scatter_cpu.cpython-36m-x86_64-linux-gnu.so
building 'torch_scatter.scatter_cuda' extension
creating build/temp.linux-x86_64-3.6/cuda
gcc -pthread -B /home/josh/anaconda3/envs/pytorchgeometric/compiler_compat -Wl,--sysroot=/ -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -fPIC -I/home/josh/.local/lib/python3.6/site-packages/torch/lib/include -I/home/josh/.local/lib/python3.6/site-packages/torch/lib/include/torch/csrc/api/include -I/home/josh/.local/lib/python3.6/site-packages/torch/lib/include/TH -I/home/josh/.local/lib/python3.6/site-packages/torch/lib/include/THC -I/usr/local/cuda/include -I/home/josh/anaconda3/envs/pytorchgeometric/include/python3.6m -c cuda/scatter.cpp -o build/temp.linux-x86_64-3.6/cuda/scatter.o -DTORCH_API_INCLUDE_EXTENSION_H -DTORCH_EXTENSION_NAME=scatter_cuda -D_GLIBCXX_USE_CXX11_ABI=0 -std=c++11
cc1plus: warning: command line option ‘-Wstrict-prototypes’ is valid for C/ObjC but not for C++
/usr/local/cuda/bin/nvcc -I/home/josh/.local/lib/python3.6/site-packages/torch/lib/include -I/home/josh/.local/lib/python3.6/site-packages/torch/lib/include/torch/csrc/api/include -I/home/josh/.local/lib/python3.6/site-packages/torch/lib/include/TH -I/home/josh/.local/lib/python3.6/site-packages/torch/lib/include/THC -I/usr/local/cuda/include -I/home/josh/anaconda3/envs/pytorchgeometric/include/python3.6m -c cuda/scatter_kernel.cu -o build/temp.linux-x86_64-3.6/cuda/scatter_kernel.o -D__CUDA_NO_HALF_OPERATORS__ -D__CUDA_NO_HALF_CONVERSIONS__ -D__CUDA_NO_HALF2_OPERATORS__ --compiler-options '-fPIC' -DTORCH_API_INCLUDE_EXTENSION_H -DTORCH_EXTENSION_NAME=scatter_cuda -D_GLIBCXX_USE_CXX11_ABI=0 -std=c++11
/usr/include/c++/6/tuple: In instantiation of ‘static constexpr bool std::_TC<<anonymous>, _Elements>::_MoveConstructibleTuple() [with _UElements = {std::tuple<at::Tensor, at::Tensor, at::Tensor>}; bool <anonymous> = true; _Elements = {at::Tensor, at::Tensor, at::Tensor}]’:
/usr/include/c++/6/tuple:626:248:   required by substitution of ‘template<class ... _UElements, typename std::enable_if<(((std::_TC<(sizeof... (_UElements) == 1), at::Tensor, at::Tensor, at::Tensor>::_NotSameTuple<_UElements ...>() && std::_TC<(1ul == sizeof... (_UElements)), at::Tensor, at::Tensor, at::Tensor>::_MoveConstructibleTuple<_UElements ...>()) && std::_TC<(1ul == sizeof... (_UElements)), at::Tensor, at::Tensor, at::Tensor>::_ImplicitlyMoveConvertibleTuple<_UElements ...>()) && (3ul >= 1)), bool>::type <anonymous> > constexpr std::tuple< <template-parameter-1-1> >::tuple(_UElements&& ...) [with _UElements = {std::tuple<at::Tensor, at::Tensor, at::Tensor>}; typename std::enable_if<(((std::_TC<(sizeof... (_UElements) == 1), at::Tensor, at::Tensor, at::Tensor>::_NotSameTuple<_UElements ...>() && std::_TC<(1ul == sizeof... (_UElements)), at::Tensor, at::Tensor, at::Tensor>::_MoveConstructibleTuple<_UElements ...>()) && std::_TC<(1ul == sizeof... (_UElements)), at::Tensor, at::Tensor, at::Tensor>::_ImplicitlyMoveConvertibleTuple<_UElements ...>()) && (3ul >= 1)), bool>::type <anonymous> = <missing>]’
/home/josh/.local/lib/python3.6/site-packages/torch/lib/include/ATen/core/TensorMethods.h:1117:48:   required from here
/usr/include/c++/6/tuple:483:67: error: mismatched argument pack lengths while expanding ‘std::is_constructible<_Elements, _UElements&&>’
       return __and_<is_constructible<_Elements, _UElements&&>...>::value;
                                                                   ^~~~~
/usr/include/c++/6/tuple:484:1: error: body of constexpr function ‘static constexpr bool std::_TC<<anonymous>, _Elements>::_MoveConstructibleTuple() [with _UElements = {std::tuple<at::Tensor, at::Tensor, at::Tensor>}; bool <anonymous> = true; _Elements = {at::Tensor, at::Tensor, at::Tensor}]’ not a return-statement
     }
 ^
/usr/include/c++/6/tuple: In instantiation of ‘static constexpr bool std::_TC<<anonymous>, _Elements>::_ImplicitlyMoveConvertibleTuple() [with _UElements = {std::tuple<at::Tensor, at::Tensor, at::Tensor>}; bool <anonymous> = true; _Elements = {at::Tensor, at::Tensor, at::Tensor}]’:
/usr/include/c++/6/tuple:626:362:   required by substitution of ‘template<class ... _UElements, typename std::enable_if<(((std::_TC<(sizeof... (_UElements) == 1), at::Tensor, at::Tensor, at::Tensor>::_NotSameTuple<_UElements ...>() && std::_TC<(1ul == sizeof... (_UElements)), at::Tensor, at::Tensor, at::Tensor>::_MoveConstructibleTuple<_UElements ...>()) && std::_TC<(1ul == sizeof... (_UElements)), at::Tensor, at::Tensor, at::Tensor>::_ImplicitlyMoveConvertibleTuple<_UElements ...>()) && (3ul >= 1)), bool>::type <anonymous> > constexpr std::tuple< <template-parameter-1-1> >::tuple(_UElements&& ...) [with _UElements = {std::tuple<at::Tensor, at::Tensor, at::Tensor>}; typename std::enable_if<(((std::_TC<(sizeof... (_UElements) == 1), at::Tensor, at::Tensor, at::Tensor>::_NotSameTuple<_UElements ...>() && std::_TC<(1ul == sizeof... (_UElements)), at::Tensor, at::Tensor, at::Tensor>::_MoveConstructibleTuple<_UElements ...>()) && std::_TC<(1ul == sizeof... (_UElements)), at::Tensor, at::Tensor, at::Tensor>::_ImplicitlyMoveConvertibleTuple<_UElements ...>()) && (3ul >= 1)), bool>::type <anonymous> = <missing>]’
/home/josh/.local/lib/python3.6/site-packages/torch/lib/include/ATen/core/TensorMethods.h:1117:48:   required from here
/usr/include/c++/6/tuple:489:65: error: mismatched argument pack lengths while expanding ‘std::is_convertible<_UElements&&, _Elements>’
       return __and_<is_convertible<_UElements&&, _Elements>...>::value;
                                                                 ^~~~~
/usr/include/c++/6/tuple:490:1: error: body of constexpr function ‘static constexpr bool std::_TC<<anonymous>, _Elements>::_ImplicitlyMoveConvertibleTuple() [with _UElements = {std::tuple<at::Tensor, at::Tensor, at::Tensor>}; bool <anonymous> = true; _Elements = {at::Tensor, at::Tensor, at::Tensor}]’ not a return-statement
     }
 ^
/usr/include/c++/6/tuple: In instantiation of ‘static constexpr bool std::_TC<<anonymous>, _Elements>::_NonNestedTuple() [with _SrcTuple = const std::tuple<at::Tensor, at::Tensor, at::Tensor>&; bool <anonymous> = true; _Elements = {at::Tensor, at::Tensor, at::Tensor}]’:
/usr/include/c++/6/tuple:662:419:   required by substitution of ‘template<class ... _UElements, class _Dummy, typename std::enable_if<((std::_TC<(1ul == sizeof... (_UElements)), at::Tensor, at::Tensor, at::Tensor>::_ConstructibleTuple<_UElements ...>() && std::_TC<(1ul == sizeof... (_UElements)), at::Tensor, at::Tensor, at::Tensor>::_ImplicitlyConvertibleTuple<_UElements ...>()) && std::_TC<(std::is_same<_Dummy, void>::value && (1ul == 1)), at::Tensor, at::Tensor, at::Tensor>::_NonNestedTuple<const tuple<_Elements ...>&>()), bool>::type <anonymous> > constexpr std::tuple< <template-parameter-1-1> >::tuple(const std::tuple<_Args1 ...>&) [with _UElements = {at::Tensor, at::Tensor, at::Tensor}; _Dummy = void; typename std::enable_if<((std::_TC<(1ul == sizeof... (_UElements)), at::Tensor, at::Tensor, at::Tensor>::_ConstructibleTuple<_UElements ...>() && std::_TC<(1ul == sizeof... (_UElements)), at::Tensor, at::Tensor, at::Tensor>::_ImplicitlyConvertibleTuple<_UElements ...>()) && std::_TC<(std::is_same<_Dummy, void>::value && (1ul == 1)), at::Tensor, at::Tensor, at::Tensor>::_NonNestedTuple<const tuple<_Elements ...>&>()), bool>::type <anonymous> = <missing>]’
/home/josh/.local/lib/python3.6/site-packages/torch/lib/include/ATen/core/TensorMethods.h:1117:48:   required from here
/usr/include/c++/6/tuple:495:244: error: wrong number of template arguments (4, should be 2)
       return  __and_<__not_<is_same<tuple<_Elements...>,
                                                                                                                                                                                                                                                    ^    
/usr/include/c++/6/type_traits:1558:8: note: provided for ‘template<class _From, class _To> struct std::is_convertible’
     struct is_convertible
        ^~~~~~~~~~~~~~
/usr/include/c++/6/tuple:502:1: error: body of constexpr function ‘static constexpr bool std::_TC<<anonymous>, _Elements>::_NonNestedTuple() [with _SrcTuple = const std::tuple<at::Tensor, at::Tensor, at::Tensor>&; bool <anonymous> = true; _Elements = {at::Tensor, at::Tensor, at::Tensor}]’ not a return-statement
     }
 ^
/usr/include/c++/6/tuple: In instantiation of ‘static constexpr bool std::_TC<<anonymous>, _Elements>::_NonNestedTuple() [with _SrcTuple = std::tuple<at::Tensor, at::Tensor, at::Tensor>&&; bool <anonymous> = true; _Elements = {at::Tensor, at::Tensor, at::Tensor}]’:
/usr/include/c++/6/tuple:686:422:   required by substitution of ‘template<class ... _UElements, class _Dummy, typename std::enable_if<((std::_TC<(1ul == sizeof... (_UElements)), at::Tensor, at::Tensor, at::Tensor>::_MoveConstructibleTuple<_UElements ...>() && std::_TC<(1ul == sizeof... (_UElements)), at::Tensor, at::Tensor, at::Tensor>::_ImplicitlyMoveConvertibleTuple<_UElements ...>()) && std::_TC<(std::is_same<_Dummy, void>::value && (1ul == 1)), at::Tensor, at::Tensor, at::Tensor>::_NonNestedTuple<tuple<_Elements ...>&&>()), bool>::type <anonymous> > constexpr std::tuple< <template-parameter-1-1> >::tuple(std::tuple<_Args1 ...>&&) [with _UElements = {at::Tensor, at::Tensor, at::Tensor}; _Dummy = void; typename std::enable_if<((std::_TC<(1ul == sizeof... (_UElements)), at::Tensor, at::Tensor, at::Tensor>::_MoveConstructibleTuple<_UElements ...>() && std::_TC<(1ul == sizeof... (_UElements)), at::Tensor, at::Tensor, at::Tensor>::_ImplicitlyMoveConvertibleTuple<_UElements ...>()) && std::_TC<(std::is_same<_Dummy, void>::value && (1ul == 1)), at::Tensor, at::Tensor, at::Tensor>::_NonNestedTuple<tuple<_Elements ...>&&>()), bool>::type <anonymous> = <missing>]’
/home/josh/.local/lib/python3.6/site-packages/torch/lib/include/ATen/core/TensorMethods.h:1117:48:   required from here
/usr/include/c++/6/tuple:495:244: error: wrong number of template arguments (4, should be 2)
       return  __and_<__not_<is_same<tuple<_Elements...>,
                                                                                                                                                                                                                                                    ^    
/usr/include/c++/6/type_traits:1558:8: note: provided for ‘template<class _From, class _To> struct std::is_convertible’
     struct is_convertible
        ^~~~~~~~~~~~~~
/usr/include/c++/6/tuple:502:1: error: body of constexpr function ‘static constexpr bool std::_TC<<anonymous>, _Elements>::_NonNestedTuple() [with _SrcTuple = std::tuple<at::Tensor, at::Tensor, at::Tensor>&&; bool <anonymous> = true; _Elements = {at::Tensor, at::Tensor, at::Tensor}]’ not a return-statement
     }
 ^
/usr/include/c++/6/tuple: In instantiation of ‘static constexpr bool std::_TC<<anonymous>, _Elements>::_MoveConstructibleTuple() [with _UElements = {std::tuple<at::Tensor&, at::Tensor&, at::Tensor&>}; bool <anonymous> = true; _Elements = {at::Tensor&, at::Tensor&, at::Tensor&}]’:
/usr/include/c++/6/tuple:626:248:   required by substitution of ‘template<class ... _UElements, typename std::enable_if<(((std::_TC<(sizeof... (_UElements) == 1), at::Tensor&, at::Tensor&, at::Tensor&>::_NotSameTuple<_UElements ...>() && std::_TC<(1ul == sizeof... (_UElements)), at::Tensor&, at::Tensor&, at::Tensor&>::_MoveConstructibleTuple<_UElements ...>()) && std::_TC<(1ul == sizeof... (_UElements)), at::Tensor&, at::Tensor&, at::Tensor&>::_ImplicitlyMoveConvertibleTuple<_UElements ...>()) && (3ul >= 1)), bool>::type <anonymous> > constexpr std::tuple< <template-parameter-1-1> >::tuple(_UElements&& ...) [with _UElements = {std::tuple<at::Tensor&, at::Tensor&, at::Tensor&>}; typename std::enable_if<(((std::_TC<(sizeof... (_UElements) == 1), at::Tensor&, at::Tensor&, at::Tensor&>::_NotSameTuple<_UElements ...>() && std::_TC<(1ul == sizeof... (_UElements)), at::Tensor&, at::Tensor&, at::Tensor&>::_MoveConstructibleTuple<_UElements ...>()) && std::_TC<(1ul == sizeof... (_UElements)), at::Tensor&, at::Tensor&, at::Tensor&>::_ImplicitlyMoveConvertibleTuple<_UElements ...>()) && (3ul >= 1)), bool>::type <anonymous> = <missing>]’
/home/josh/.local/lib/python3.6/site-packages/torch/lib/include/ATen/Functions.h:2534:85:   required from here
/usr/include/c++/6/tuple:483:67: error: mismatched argument pack lengths while expanding ‘std::is_constructible<_Elements, _UElements&&>’
       return __and_<is_constructible<_Elements, _UElements&&>...>::value;
                                                                   ^~~~~
/usr/include/c++/6/tuple:484:1: error: body of constexpr function ‘static constexpr bool std::_TC<<anonymous>, _Elements>::_MoveConstructibleTuple() [with _UElements = {std::tuple<at::Tensor&, at::Tensor&, at::Tensor&>}; bool <anonymous> = true; _Elements = {at::Tensor&, at::Tensor&, at::Tensor&}]’ not a return-statement
     }
 ^
/usr/include/c++/6/tuple: In instantiation of ‘static constexpr bool std::_TC<<anonymous>, _Elements>::_ImplicitlyMoveConvertibleTuple() [with _UElements = {std::tuple<at::Tensor&, at::Tensor&, at::Tensor&>}; bool <anonymous> = true; _Elements = {at::Tensor&, at::Tensor&, at::Tensor&}]’:
/usr/include/c++/6/tuple:626:362:   required by substitution of ‘template<class ... _UElements, typename std::enable_if<(((std::_TC<(sizeof... (_UElements) == 1), at::Tensor&, at::Tensor&, at::Tensor&>::_NotSameTuple<_UElements ...>() && std::_TC<(1ul == sizeof... (_UElements)), at::Tensor&, at::Tensor&, at::Tensor&>::_MoveConstructibleTuple<_UElements ...>()) && std::_TC<(1ul == sizeof... (_UElements)), at::Tensor&, at::Tensor&, at::Tensor&>::_ImplicitlyMoveConvertibleTuple<_UElements ...>()) && (3ul >= 1)), bool>::type <anonymous> > constexpr std::tuple< <template-parameter-1-1> >::tuple(_UElements&& ...) [with _UElements = {std::tuple<at::Tensor&, at::Tensor&, at::Tensor&>}; typename std::enable_if<(((std::_TC<(sizeof... (_UElements) == 1), at::Tensor&, at::Tensor&, at::Tensor&>::_NotSameTuple<_UElements ...>() && std::_TC<(1ul == sizeof... (_UElements)), at::Tensor&, at::Tensor&, at::Tensor&>::_MoveConstructibleTuple<_UElements ...>()) && std::_TC<(1ul == sizeof... (_UElements)), at::Tensor&, at::Tensor&, at::Tensor&>::_ImplicitlyMoveConvertibleTuple<_UElements ...>()) && (3ul >= 1)), bool>::type <anonymous> = <missing>]’
/home/josh/.local/lib/python3.6/site-packages/torch/lib/include/ATen/Functions.h:2534:85:   required from here
/usr/include/c++/6/tuple:489:65: error: mismatched argument pack lengths while expanding ‘std::is_convertible<_UElements&&, _Elements>’
       return __and_<is_convertible<_UElements&&, _Elements>...>::value;
                                                                 ^~~~~
/usr/include/c++/6/tuple:490:1: error: body of constexpr function ‘static constexpr bool std::_TC<<anonymous>, _Elements>::_ImplicitlyMoveConvertibleTuple() [with _UElements = {std::tuple<at::Tensor&, at::Tensor&, at::Tensor&>}; bool <anonymous> = true; _Elements = {at::Tensor&, at::Tensor&, at::Tensor&}]’ not a return-statement
     }
 ^
/usr/include/c++/6/tuple: In instantiation of ‘static constexpr bool std::_TC<<anonymous>, _Elements>::_NonNestedTuple() [with _SrcTuple = const std::tuple<at::Tensor&, at::Tensor&, at::Tensor&>&; bool <anonymous> = true; _Elements = {at::Tensor&, at::Tensor&, at::Tensor&}]’:
/usr/include/c++/6/tuple:662:419:   required by substitution of ‘template<class ... _UElements, class _Dummy, typename std::enable_if<((std::_TC<(1ul == sizeof... (_UElements)), at::Tensor&, at::Tensor&, at::Tensor&>::_ConstructibleTuple<_UElements ...>() && std::_TC<(1ul == sizeof... (_UElements)), at::Tensor&, at::Tensor&, at::Tensor&>::_ImplicitlyConvertibleTuple<_UElements ...>()) && std::_TC<(std::is_same<_Dummy, void>::value && (1ul == 1)), at::Tensor&, at::Tensor&, at::Tensor&>::_NonNestedTuple<const tuple<_Elements ...>&>()), bool>::type <anonymous> > constexpr std::tuple< <template-parameter-1-1> >::tuple(const std::tuple<_Args1 ...>&) [with _UElements = {at::Tensor&, at::Tensor&, at::Tensor&}; _Dummy = void; typename std::enable_if<((std::_TC<(1ul == sizeof... (_UElements)), at::Tensor&, at::Tensor&, at::Tensor&>::_ConstructibleTuple<_UElements ...>() && std::_TC<(1ul == sizeof... (_UElements)), at::Tensor&, at::Tensor&, at::Tensor&>::_ImplicitlyConvertibleTuple<_UElements ...>()) && std::_TC<(std::is_same<_Dummy, void>::value && (1ul == 1)), at::Tensor&, at::Tensor&, at::Tensor&>::_NonNestedTuple<const tuple<_Elements ...>&>()), bool>::type <anonymous> = <missing>]’
/home/josh/.local/lib/python3.6/site-packages/torch/lib/include/ATen/Functions.h:2534:85:   required from here
/usr/include/c++/6/tuple:495:244: error: wrong number of template arguments (4, should be 2)
       return  __and_<__not_<is_same<tuple<_Elements...>,
                                                                                                                                                                                                                                                    ^    
/usr/include/c++/6/type_traits:1558:8: note: provided for ‘template<class _From, class _To> struct std::is_convertible’
     struct is_convertible
        ^~~~~~~~~~~~~~
/usr/include/c++/6/tuple:502:1: error: body of constexpr function ‘static constexpr bool std::_TC<<anonymous>, _Elements>::_NonNestedTuple() [with _SrcTuple = const std::tuple<at::Tensor&, at::Tensor&, at::Tensor&>&; bool <anonymous> = true; _Elements = {at::Tensor&, at::Tensor&, at::Tensor&}]’ not a return-statement
     }
 ^
/usr/include/c++/6/tuple: In instantiation of ‘static constexpr bool std::_TC<<anonymous>, _Elements>::_NonNestedTuple() [with _SrcTuple = std::tuple<at::Tensor&, at::Tensor&, at::Tensor&>&&; bool <anonymous> = true; _Elements = {at::Tensor&, at::Tensor&, at::Tensor&}]’:
/usr/include/c++/6/tuple:686:422:   required by substitution of ‘template<class ... _UElements, class _Dummy, typename std::enable_if<((std::_TC<(1ul == sizeof... (_UElements)), at::Tensor&, at::Tensor&, at::Tensor&>::_MoveConstructibleTuple<_UElements ...>() && std::_TC<(1ul == sizeof... (_UElements)), at::Tensor&, at::Tensor&, at::Tensor&>::_ImplicitlyMoveConvertibleTuple<_UElements ...>()) && std::_TC<(std::is_same<_Dummy, void>::value && (1ul == 1)), at::Tensor&, at::Tensor&, at::Tensor&>::_NonNestedTuple<tuple<_Elements ...>&&>()), bool>::type <anonymous> > constexpr std::tuple< <template-parameter-1-1> >::tuple(std::tuple<_Args1 ...>&&) [with _UElements = {at::Tensor&, at::Tensor&, at::Tensor&}; _Dummy = void; typename std::enable_if<((std::_TC<(1ul == sizeof... (_UElements)), at::Tensor&, at::Tensor&, at::Tensor&>::_MoveConstructibleTuple<_UElements ...>() && std::_TC<(1ul == sizeof... (_UElements)), at::Tensor&, at::Tensor&, at::Tensor&>::_ImplicitlyMoveConvertibleTuple<_UElements ...>()) && std::_TC<(std::is_same<_Dummy, void>::value && (1ul == 1)), at::Tensor&, at::Tensor&, at::Tensor&>::_NonNestedTuple<tuple<_Elements ...>&&>()), bool>::type <anonymous> = <missing>]’
/home/josh/.local/lib/python3.6/site-packages/torch/lib/include/ATen/Functions.h:2534:85:   required from here
/usr/include/c++/6/tuple:495:244: error: wrong number of template arguments (4, should be 2)
       return  __and_<__not_<is_same<tuple<_Elements...>,
                                                                                                                                                                                                                                                    ^    
/usr/include/c++/6/type_traits:1558:8: note: provided for ‘template<class _From, class _To> struct std::is_convertible’
     struct is_convertible
        ^~~~~~~~~~~~~~
/usr/include/c++/6/tuple:502:1: error: body of constexpr function ‘static constexpr bool std::_TC<<anonymous>, _Elements>::_NonNestedTuple() [with _SrcTuple = std::tuple<at::Tensor&, at::Tensor&, at::Tensor&>&&; bool <anonymous> = true; _Elements = {at::Tensor&, at::Tensor&, at::Tensor&}]’ not a return-statement
     }
 ^
/usr/include/c++/6/tuple: In instantiation of ‘static constexpr bool std::_TC<<anonymous>, _Elements>::_MoveConstructibleTuple() [with _UElements = {std::tuple<at::Tensor, at::Tensor, at::Tensor, at::Tensor, at::Tensor>}; bool <anonymous> = true; _Elements = {at::Tensor, at::Tensor, at::Tensor, at::Tensor, at::Tensor}]’:
/usr/include/c++/6/tuple:626:248:   required by substitution of ‘template<class ... _UElements, typename std::enable_if<(((std::_TC<(sizeof... (_UElements) == 1), at::Tensor, at::Tensor, at::Tensor, at::Tensor, at::Tensor>::_NotSameTuple<_UElements ...>() && std::_TC<(1ul == sizeof... (_UElements)), at::Tensor, at::Tensor, at::Tensor, at::Tensor, at::Tensor>::_MoveConstructibleTuple<_UElements ...>()) && std::_TC<(1ul == sizeof... (_UElements)), at::Tensor, at::Tensor, at::Tensor, at::Tensor, at::Tensor>::_ImplicitlyMoveConvertibleTuple<_UElements ...>()) && (5ul >= 1)), bool>::type <anonymous> > constexpr std::tuple< <template-parameter-1-1> >::tuple(_UElements&& ...) [with _UElements = {std::tuple<at::Tensor, at::Tensor, at::Tensor, at::Tensor, at::Tensor>}; typename std::enable_if<(((std::_TC<(sizeof... (_UElements) == 1), at::Tensor, at::Tensor, at::Tensor, at::Tensor, at::Tensor>::_NotSameTuple<_UElements ...>() && std::_TC<(1ul == sizeof... (_UElements)), at::Tensor, at::Tensor, at::Tensor, at::Tensor, at::Tensor>::_MoveConstructibleTuple<_UElements ...>()) && std::_TC<(1ul == sizeof... (_UElements)), at::Tensor, at::Tensor, at::Tensor, at::Tensor, at::Tensor>::_ImplicitlyMoveConvertibleTuple<_UElements ...>()) && (5ul >= 1)), bool>::type <anonymous> = <missing>]’
/home/josh/.local/lib/python3.6/site-packages/torch/lib/include/ATen/Functions.h:3599:197:   required from here
/usr/include/c++/6/tuple:483:67: error: mismatched argument pack lengths while expanding ‘std::is_constructible<_Elements, _UElements&&>’
       return __and_<is_constructible<_Elements, _UElements&&>...>::value;
                                                                   ^~~~~
/usr/include/c++/6/tuple:484:1: error: body of constexpr function ‘static constexpr bool std::_TC<<anonymous>, _Elements>::_MoveConstructibleTuple() [with _UElements = {std::tuple<at::Tensor, at::Tensor, at::Tensor, at::Tensor, at::Tensor>}; bool <anonymous> = true; _Elements = {at::Tensor, at::Tensor, at::Tensor, at::Tensor, at::Tensor}]’ not a return-statement
     }
 ^
/usr/include/c++/6/tuple: In instantiation of ‘static constexpr bool std::_TC<<anonymous>, _Elements>::_ImplicitlyMoveConvertibleTuple() [with _UElements = {std::tuple<at::Tensor, at::Tensor, at::Tensor, at::Tensor, at::Tensor>}; bool <anonymous> = true; _Elements = {at::Tensor, at::Tensor, at::Tensor, at::Tensor, at::Tensor}]’:
/usr/include/c++/6/tuple:626:362:   required by substitution of ‘template<class ... _UElements, typename std::enable_if<(((std::_TC<(sizeof... (_UElements) == 1), at::Tensor, at::Tensor, at::Tensor, at::Tensor, at::Tensor>::_NotSameTuple<_UElements ...>() && std::_TC<(1ul == sizeof... (_UElements)), at::Tensor, at::Tensor, at::Tensor, at::Tensor, at::Tensor>::_MoveConstructibleTuple<_UElements ...>()) && std::_TC<(1ul == sizeof... (_UElements)), at::Tensor, at::Tensor, at::Tensor, at::Tensor, at::Tensor>::_ImplicitlyMoveConvertibleTuple<_UElements ...>()) && (5ul >= 1)), bool>::type <anonymous> > constexpr std::tuple< <template-parameter-1-1> >::tuple(_UElements&& ...) [with _UElements = {std::tuple<at::Tensor, at::Tensor, at::Tensor, at::Tensor, at::Tensor>}; typename std::enable_if<(((std::_TC<(sizeof... (_UElements) == 1), at::Tensor, at::Tensor, at::Tensor, at::Tensor, at::Tensor>::_NotSameTuple<_UElements ...>() && std::_TC<(1ul == sizeof... (_UElements)), at::Tensor, at::Tensor, at::Tensor, at::Tensor, at::Tensor>::_MoveConstructibleTuple<_UElements ...>()) && std::_TC<(1ul == sizeof... (_UElements)), at::Tensor, at::Tensor, at::Tensor, at::Tensor, at::Tensor>::_ImplicitlyMoveConvertibleTuple<_UElements ...>()) && (5ul >= 1)), bool>::type <anonymous> = <missing>]’
/home/josh/.local/lib/python3.6/site-packages/torch/lib/include/ATen/Functions.h:3599:197:   required from here
/usr/include/c++/6/tuple:489:65: error: mismatched argument pack lengths while expanding ‘std::is_convertible<_UElements&&, _Elements>’
       return __and_<is_convertible<_UElements&&, _Elements>...>::value;
                                                                 ^~~~~
/usr/include/c++/6/tuple:490:1: error: body of constexpr function ‘static constexpr bool std::_TC<<anonymous>, _Elements>::_ImplicitlyMoveConvertibleTuple() [with _UElements = {std::tuple<at::Tensor, at::Tensor, at::Tensor, at::Tensor, at::Tensor>}; bool <anonymous> = true; _Elements = {at::Tensor, at::Tensor, at::Tensor, at::Tensor, at::Tensor}]’ not a return-statement
     }
 ^
/usr/include/c++/6/tuple: In instantiation of ‘static constexpr bool std::_TC<<anonymous>, _Elements>::_NonNestedTuple() [with _SrcTuple = const std::tuple<at::Tensor, at::Tensor, at::Tensor, at::Tensor, at::Tensor>&; bool <anonymous> = true; _Elements = {at::Tensor, at::Tensor, at::Tensor, at::Tensor, at::Tensor}]’:
/usr/include/c++/6/tuple:662:419:   required by substitution of ‘template<class ... _UElements, class _Dummy, typename std::enable_if<((std::_TC<(1ul == sizeof... (_UElements)), at::Tensor, at::Tensor, at::Tensor, at::Tensor, at::Tensor>::_ConstructibleTuple<_UElements ...>() && std::_TC<(1ul == sizeof... (_UElements)), at::Tensor, at::Tensor, at::Tensor, at::Tensor, at::Tensor>::_ImplicitlyConvertibleTuple<_UElements ...>()) && std::_TC<(std::is_same<_Dummy, void>::value && (1ul == 1)), at::Tensor, at::Tensor, at::Tensor, at::Tensor, at::Tensor>::_NonNestedTuple<const tuple<_Elements ...>&>()), bool>::type <anonymous> > constexpr std::tuple< <template-parameter-1-1> >::tuple(const std::tuple<_Args1 ...>&) [with _UElements = {at::Tensor, at::Tensor, at::Tensor, at::Tensor, at::Tensor}; _Dummy = void; typename std::enable_if<((std::_TC<(1ul == sizeof... (_UElements)), at::Tensor, at::Tensor, at::Tensor, at::Tensor, at::Tensor>::_ConstructibleTuple<_UElements ...>() && std::_TC<(1ul == sizeof... (_UElements)), at::Tensor, at::Tensor, at::Tensor, at::Tensor, at::Tensor>::_ImplicitlyConvertibleTuple<_UElements ...>()) && std::_TC<(std::is_same<_Dummy, void>::value && (1ul == 1)), at::Tensor, at::Tensor, at::Tensor, at::Tensor, at::Tensor>::_NonNestedTuple<const tuple<_Elements ...>&>()), bool>::type <anonymous> = <missing>]’
/home/josh/.local/lib/python3.6/site-packages/torch/lib/include/ATen/Functions.h:3599:197:   required from here
/usr/include/c++/6/tuple:495:244: error: wrong number of template arguments (6, should be 2)
       return  __and_<__not_<is_same<tuple<_Elements...>,
                                                                                                                                                                                                                                                    ^    
/usr/include/c++/6/type_traits:1558:8: note: provided for ‘template<class _From, class _To> struct std::is_convertible’
     struct is_convertible
        ^~~~~~~~~~~~~~
/usr/include/c++/6/tuple:502:1: error: body of constexpr function ‘static constexpr bool std::_TC<<anonymous>, _Elements>::_NonNestedTuple() [with _SrcTuple = const std::tuple<at::Tensor, at::Tensor, at::Tensor, at::Tensor, at::Tensor>&; bool <anonymous> = true; _Elements = {at::Tensor, at::Tensor, at::Tensor, at::Tensor, at::Tensor}]’ not a return-statement
     }
 ^
/usr/include/c++/6/tuple: In instantiation of ‘static constexpr bool std::_TC<<anonymous>, _Elements>::_NonNestedTuple() [with _SrcTuple = std::tuple<at::Tensor, at::Tensor, at::Tensor, at::Tensor, at::Tensor>&&; bool <anonymous> = true; _Elements = {at::Tensor, at::Tensor, at::Tensor, at::Tensor, at::Tensor}]’:
/usr/include/c++/6/tuple:686:422:   required by substitution of ‘template<class ... _UElements, class _Dummy, typename std::enable_if<((std::_TC<(1ul == sizeof... (_UElements)), at::Tensor, at::Tensor, at::Tensor, at::Tensor, at::Tensor>::_MoveConstructibleTuple<_UElements ...>() && std::_TC<(1ul == sizeof... (_UElements)), at::Tensor, at::Tensor, at::Tensor, at::Tensor, at::Tensor>::_ImplicitlyMoveConvertibleTuple<_UElements ...>()) && std::_TC<(std::is_same<_Dummy, void>::value && (1ul == 1)), at::Tensor, at::Tensor, at::Tensor, at::Tensor, at::Tensor>::_NonNestedTuple<tuple<_Elements ...>&&>()), bool>::type <anonymous> > constexpr std::tuple< <template-parameter-1-1> >::tuple(std::tuple<_Args1 ...>&&) [with _UElements = {at::Tensor, at::Tensor, at::Tensor, at::Tensor, at::Tensor}; _Dummy = void; typename std::enable_if<((std::_TC<(1ul == sizeof... (_UElements)), at::Tensor, at::Tensor, at::Tensor, at::Tensor, at::Tensor>::_MoveConstructibleTuple<_UElements ...>() && std::_TC<(1ul == sizeof... (_UElements)), at::Tensor, at::Tensor, at::Tensor, at::Tensor, at::Tensor>::_ImplicitlyMoveConvertibleTuple<_UElements ...>()) && std::_TC<(std::is_same<_Dummy, void>::value && (1ul == 1)), at::Tensor, at::Tensor, at::Tensor, at::Tensor, at::Tensor>::_NonNestedTuple<tuple<_Elements ...>&&>()), bool>::type <anonymous> = <missing>]’
/home/josh/.local/lib/python3.6/site-packages/torch/lib/include/ATen/Functions.h:3599:197:   required from here
/usr/include/c++/6/tuple:495:244: error: wrong number of template arguments (6, should be 2)
       return  __and_<__not_<is_same<tuple<_Elements...>,
                                                                                                                                                                                                                                                    ^    
/usr/include/c++/6/type_traits:1558:8: note: provided for ‘template<class _From, class _To> struct std::is_convertible’
     struct is_convertible
        ^~~~~~~~~~~~~~
/usr/include/c++/6/tuple:502:1: error: body of constexpr function ‘static constexpr bool std::_TC<<anonymous>, _Elements>::_NonNestedTuple() [with _SrcTuple = std::tuple<at::Tensor, at::Tensor, at::Tensor, at::Tensor, at::Tensor>&&; bool <anonymous> = true; _Elements = {at::Tensor, at::Tensor, at::Tensor, at::Tensor, at::Tensor}]’ not a return-statement
     }
 ^
/usr/include/c++/6/tuple: In instantiation of ‘static constexpr bool std::_TC<<anonymous>, _Elements>::_MoveConstructibleTuple() [with _UElements = {std::tuple<at::Tensor, at::Tensor, at::Tensor, std::vector<at::Tensor, std::allocator<at::Tensor> > >}; bool <anonymous> = true; _Elements = {at::Tensor, at::Tensor, at::Tensor, std::vector<at::Tensor, std::allocator<at::Tensor> >}]’:
/usr/include/c++/6/tuple:626:248:   required by substitution of ‘template<class ... _UElements, typename std::enable_if<(((std::_TC<(sizeof... (_UElements) == 1), at::Tensor, at::Tensor, at::Tensor, std::vector<at::Tensor, std::allocator<at::Tensor> > >::_NotSameTuple<_UElements ...>() && std::_TC<(1ul == sizeof... (_UElements)), at::Tensor, at::Tensor, at::Tensor, std::vector<at::Tensor, std::allocator<at::Tensor> > >::_MoveConstructibleTuple<_UElements ...>()) && std::_TC<(1ul == sizeof... (_UElements)), at::Tensor, at::Tensor, at::Tensor, std::vector<at::Tensor, std::allocator<at::Tensor> > >::_ImplicitlyMoveConvertibleTuple<_UElements ...>()) && (4ul >= 1)), bool>::type <anonymous> > constexpr std::tuple< <template-parameter-1-1> >::tuple(_UElements&& ...) [with _UElements = {std::tuple<at::Tensor, at::Tensor, at::Tensor, std::vector<at::Tensor, std::allocator<at::Tensor> > >}; typename std::enable_if<(((std::_TC<(sizeof... (_UElements) == 1), at::Tensor, at::Tensor, at::Tensor, std::vector<at::Tensor, std::allocator<at::Tensor> > >::_NotSameTuple<_UElements ...>() && std::_TC<(1ul == sizeof... (_UElements)), at::Tensor, at::Tensor, at::Tensor, std::vector<at::Tensor, std::allocator<at::Tensor> > >::_MoveConstructibleTuple<_UElements ...>()) && std::_TC<(1ul == sizeof... (_UElements)), at::Tensor, at::Tensor, at::Tensor, std::vector<at::Tensor, std::allocator<at::Tensor> > >::_ImplicitlyMoveConvertibleTuple<_UElements ...>()) && (4ul >= 1)), bool>::type <anonymous> = <missing>]’
/home/josh/.local/lib/python3.6/site-packages/torch/lib/include/ATen/Functions.h:3602:267:   required from here
/usr/include/c++/6/tuple:483:67: error: mismatched argument pack lengths while expanding ‘std::is_constructible<_Elements, _UElements&&>’
       return __and_<is_constructible<_Elements, _UElements&&>...>::value;
                                                                   ^~~~~
/usr/include/c++/6/tuple:484:1: error: body of constexpr function ‘static constexpr bool std::_TC<<anonymous>, _Elements>::_MoveConstructibleTuple() [with _UElements = {std::tuple<at::Tensor, at::Tensor, at::Tensor, std::vector<at::Tensor, std::allocator<at::Tensor> > >}; bool <anonymous> = true; _Elements = {at::Tensor, at::Tensor, at::Tensor, std::vector<at::Tensor, std::allocator<at::Tensor> >}]’ not a return-statement
     }
 ^
/usr/include/c++/6/tuple: In instantiation of ‘static constexpr bool std::_TC<<anonymous>, _Elements>::_ImplicitlyMoveConvertibleTuple() [with _UElements = {std::tuple<at::Tensor, at::Tensor, at::Tensor, std::vector<at::Tensor, std::allocator<at::Tensor> > >}; bool <anonymous> = true; _Elements = {at::Tensor, at::Tensor, at::Tensor, std::vector<at::Tensor, std::allocator<at::Tensor> >}]’:
/usr/include/c++/6/tuple:626:362:   required by substitution of ‘template<class ... _UElements, typename std::enable_if<(((std::_TC<(sizeof... (_UElements) == 1), at::Tensor, at::Tensor, at::Tensor, std::vector<at::Tensor, std::allocator<at::Tensor> > >::_NotSameTuple<_UElements ...>() && std::_TC<(1ul == sizeof... (_UElements)), at::Tensor, at::Tensor, at::Tensor, std::vector<at::Tensor, std::allocator<at::Tensor> > >::_MoveConstructibleTuple<_UElements ...>()) && std::_TC<(1ul == sizeof... (_UElements)), at::Tensor, at::Tensor, at::Tensor, std::vector<at::Tensor, std::allocator<at::Tensor> > >::_ImplicitlyMoveConvertibleTuple<_UElements ...>()) && (4ul >= 1)), bool>::type <anonymous> > constexpr std::tuple< <template-parameter-1-1> >::tuple(_UElements&& ...) [with _UElements = {std::tuple<at::Tensor, at::Tensor, at::Tensor, std::vector<at::Tensor, std::allocator<at::Tensor> > >}; typename std::enable_if<(((std::_TC<(sizeof... (_UElements) == 1), at::Tensor, at::Tensor, at::Tensor, std::vector<at::Tensor, std::allocator<at::Tensor> > >::_NotSameTuple<_UElements ...>() && std::_TC<(1ul == sizeof... (_UElements)), at::Tensor, at::Tensor, at::Tensor, std::vector<at::Tensor, std::allocator<at::Tensor> > >::_MoveConstructibleTuple<_UElements ...>()) && std::_TC<(1ul == sizeof... (_UElements)), at::Tensor, at::Tensor, at::Tensor, std::vector<at::Tensor, std::allocator<at::Tensor> > >::_ImplicitlyMoveConvertibleTuple<_UElements ...>()) && (4ul >= 1)), bool>::type <anonymous> = <missing>]’
/home/josh/.local/lib/python3.6/site-packages/torch/lib/include/ATen/Functions.h:3602:267:   required from here
/usr/include/c++/6/tuple:489:65: error: mismatched argument pack lengths while expanding ‘std::is_convertible<_UElements&&, _Elements>’
       return __and_<is_convertible<_UElements&&, _Elements>...>::value;
                                                                 ^~~~~
/usr/include/c++/6/tuple:490:1: error: body of constexpr function ‘static constexpr bool std::_TC<<anonymous>, _Elements>::_ImplicitlyMoveConvertibleTuple() [with _UElements = {std::tuple<at::Tensor, at::Tensor, at::Tensor, std::vector<at::Tensor, std::allocator<at::Tensor> > >}; bool <anonymous> = true; _Elements = {at::Tensor, at::Tensor, at::Tensor, std::vector<at::Tensor, std::allocator<at::Tensor> >}]’ not a return-statement
     }
 ^
/usr/include/c++/6/tuple: In instantiation of ‘static constexpr bool std::_TC<<anonymous>, _Elements>::_NonNestedTuple() [with _SrcTuple = const std::tuple<at::Tensor, at::Tensor, at::Tensor, std::vector<at::Tensor, std::allocator<at::Tensor> > >&; bool <anonymous> = true; _Elements = {at::Tensor, at::Tensor, at::Tensor, std::vector<at::Tensor, std::allocator<at::Tensor> >}]’:
/usr/include/c++/6/tuple:662:419:   required by substitution of ‘template<class ... _UElements, class _Dummy, typename std::enable_if<((std::_TC<(1ul == sizeof... (_UElements)), at::Tensor, at::Tensor, at::Tensor, std::vector<at::Tensor, std::allocator<at::Tensor> > >::_ConstructibleTuple<_UElements ...>() && std::_TC<(1ul == sizeof... (_UElements)), at::Tensor, at::Tensor, at::Tensor, std::vector<at::Tensor, std::allocator<at::Tensor> > >::_ImplicitlyConvertibleTuple<_UElements ...>()) && std::_TC<(std::is_same<_Dummy, void>::value && (1ul == 1)), at::Tensor, at::Tensor, at::Tensor, std::vector<at::Tensor, std::allocator<at::Tensor> > >::_NonNestedTuple<const tuple<_Elements ...>&>()), bool>::type <anonymous> > constexpr std::tuple< <template-parameter-1-1> >::tuple(const std::tuple<_Args1 ...>&) [with _UElements = {at::Tensor, at::Tensor, at::Tensor, std::vector<at::Tensor, std::allocator<at::Tensor> >}; _Dummy = void; typename std::enable_if<((std::_TC<(1ul == sizeof... (_UElements)), at::Tensor, at::Tensor, at::Tensor, std::vector<at::Tensor, std::allocator<at::Tensor> > >::_ConstructibleTuple<_UElements ...>() && std::_TC<(1ul == sizeof... (_UElements)), at::Tensor, at::Tensor, at::Tensor, std::vector<at::Tensor, std::allocator<at::Tensor> > >::_ImplicitlyConvertibleTuple<_UElements ...>()) && std::_TC<(std::is_same<_Dummy, void>::value && (1ul == 1)), at::Tensor, at::Tensor, at::Tensor, std::vector<at::Tensor, std::allocator<at::Tensor> > >::_NonNestedTuple<const tuple<_Elements ...>&>()), bool>::type <anonymous> = <missing>]’
/home/josh/.local/lib/python3.6/site-packages/torch/lib/include/ATen/Functions.h:3602:267:   required from here
/usr/include/c++/6/tuple:495:244: error: wrong number of template arguments (5, should be 2)
       return  __and_<__not_<is_same<tuple<_Elements...>,
                                                                                                                                                                                                                                                    ^    
/usr/include/c++/6/type_traits:1558:8: note: provided for ‘template<class _From, class _To> struct std::is_convertible’
     struct is_convertible
        ^~~~~~~~~~~~~~
/usr/include/c++/6/tuple:502:1: error: body of constexpr function ‘static constexpr bool std::_TC<<anonymous>, _Elements>::_NonNestedTuple() [with _SrcTuple = const std::tuple<at::Tensor, at::Tensor, at::Tensor, std::vector<at::Tensor, std::allocator<at::Tensor> > >&; bool <anonymous> = true; _Elements = {at::Tensor, at::Tensor, at::Tensor, std::vector<at::Tensor, std::allocator<at::Tensor> >}]’ not a return-statement
     }
 ^
/usr/include/c++/6/tuple: In instantiation of ‘static constexpr bool std::_TC<<anonymous>, _Elements>::_NonNestedTuple() [with _SrcTuple = std::tuple<at::Tensor, at::Tensor, at::Tensor, std::vector<at::Tensor, std::allocator<at::Tensor> > >&&; bool <anonymous> = true; _Elements = {at::Tensor, at::Tensor, at::Tensor, std::vector<at::Tensor, std::allocator<at::Tensor> >}]’:
/usr/include/c++/6/tuple:686:422:   required by substitution of ‘template<class ... _UElements, class _Dummy, typename std::enable_if<((std::_TC<(1ul == sizeof... (_UElements)), at::Tensor, at::Tensor, at::Tensor, std::vector<at::Tensor, std::allocator<at::Tensor> > >::_MoveConstructibleTuple<_UElements ...>() && std::_TC<(1ul == sizeof... (_UElements)), at::Tensor, at::Tensor, at::Tensor, std::vector<at::Tensor, std::allocator<at::Tensor> > >::_ImplicitlyMoveConvertibleTuple<_UElements ...>()) && std::_TC<(std::is_same<_Dummy, void>::value && (1ul == 1)), at::Tensor, at::Tensor, at::Tensor, std::vector<at::Tensor, std::allocator<at::Tensor> > >::_NonNestedTuple<tuple<_Elements ...>&&>()), bool>::type <anonymous> > constexpr std::tuple< <template-parameter-1-1> >::tuple(std::tuple<_Args1 ...>&&) [with _UElements = {at::Tensor, at::Tensor, at::Tensor, std::vector<at::Tensor, std::allocator<at::Tensor> >}; _Dummy = void; typename std::enable_if<((std::_TC<(1ul == sizeof... (_UElements)), at::Tensor, at::Tensor, at::Tensor, std::vector<at::Tensor, std::allocator<at::Tensor> > >::_MoveConstructibleTuple<_UElements ...>() && std::_TC<(1ul == sizeof... (_UElements)), at::Tensor, at::Tensor, at::Tensor, std::vector<at::Tensor, std::allocator<at::Tensor> > >::_ImplicitlyMoveConvertibleTuple<_UElements ...>()) && std::_TC<(std::is_same<_Dummy, void>::value && (1ul == 1)), at::Tensor, at::Tensor, at::Tensor, std::vector<at::Tensor, std::allocator<at::Tensor> > >::_NonNestedTuple<tuple<_Elements ...>&&>()), bool>::type <anonymous> = <missing>]’
/home/josh/.local/lib/python3.6/site-packages/torch/lib/include/ATen/Functions.h:3602:267:   required from here
/usr/include/c++/6/tuple:495:244: error: wrong number of template arguments (5, should be 2)
       return  __and_<__not_<is_same<tuple<_Elements...>,
                                                                                                                                                                                                                                                    ^    
/usr/include/c++/6/type_traits:1558:8: note: provided for ‘template<class _From, class _To> struct std::is_convertible’
     struct is_convertible
        ^~~~~~~~~~~~~~
/usr/include/c++/6/tuple:502:1: error: body of constexpr function ‘static constexpr bool std::_TC<<anonymous>, _Elements>::_NonNestedTuple() [with _SrcTuple = std::tuple<at::Tensor, at::Tensor, at::Tensor, std::vector<at::Tensor, std::allocator<at::Tensor> > >&&; bool <anonymous> = true; _Elements = {at::Tensor, at::Tensor, at::Tensor, std::vector<at::Tensor, std::allocator<at::Tensor> >}]’ not a return-statement
     }
 ^
/usr/include/c++/6/tuple: In instantiation of ‘static constexpr bool std::_TC<<anonymous>, _Elements>::_MoveConstructibleTuple() [with _UElements = {std::tuple<at::Tensor, at::Tensor, at::Tensor, at::Tensor>}; bool <anonymous> = true; _Elements = {at::Tensor, at::Tensor, at::Tensor, at::Tensor}]’:
/usr/include/c++/6/tuple:626:248:   required by substitution of ‘template<class ... _UElements, typename std::enable_if<(((std::_TC<(sizeof... (_UElements) == 1), at::Tensor, at::Tensor, at::Tensor, at::Tensor>::_NotSameTuple<_UElements ...>() && std::_TC<(1ul == sizeof... (_UElements)), at::Tensor, at::Tensor, at::Tensor, at::Tensor>::_MoveConstructibleTuple<_UElements ...>()) && std::_TC<(1ul == sizeof... (_UElements)), at::Tensor, at::Tensor, at::Tensor, at::Tensor>::_ImplicitlyMoveConvertibleTuple<_UElements ...>()) && (4ul >= 1)), bool>::type <anonymous> > constexpr std::tuple< <template-parameter-1-1> >::tuple(_UElements&& ...) [with _UElements = {std::tuple<at::Tensor, at::Tensor, at::Tensor, at::Tensor>}; typename std::enable_if<(((std::_TC<(sizeof... (_UElements) == 1), at::Tensor, at::Tensor, at::Tensor, at::Tensor>::_NotSameTuple<_UElements ...>() && std::_TC<(1ul == sizeof... (_UElements)), at::Tensor, at::Tensor, at::Tensor, at::Tensor>::_MoveConstructibleTuple<_UElements ...>()) && std::_TC<(1ul == sizeof... (_UElements)), at::Tensor, at::Tensor, at::Tensor, at::Tensor>::_ImplicitlyMoveConvertibleTuple<_UElements ...>()) && (4ul >= 1)), bool>::type <anonymous> = <missing>]’
/home/josh/.local/lib/python3.6/site-packages/torch/lib/include/ATen/Functions.h:4095:107:   required from here
/usr/include/c++/6/tuple:483:67: error: mismatched argument pack lengths while expanding ‘std::is_constructible<_Elements, _UElements&&>’
       return __and_<is_constructible<_Elements, _UElements&&>...>::value;
                                                                   ^~~~~
/usr/include/c++/6/tuple:484:1: error: body of constexpr function ‘static constexpr bool std::_TC<<anonymous>, _Elements>::_MoveConstructibleTuple() [with _UElements = {std::tuple<at::Tensor, at::Tensor, at::Tensor, at::Tensor>}; bool <anonymous> = true; _Elements = {at::Tensor, at::Tensor, at::Tensor, at::Tensor}]’ not a return-statement
     }
 ^
/usr/include/c++/6/tuple: In instantiation of ‘static constexpr bool std::_TC<<anonymous>, _Elements>::_ImplicitlyMoveConvertibleTuple() [with _UElements = {std::tuple<at::Tensor, at::Tensor, at::Tensor, at::Tensor>}; bool <anonymous> = true; _Elements = {at::Tensor, at::Tensor, at::Tensor, at::Tensor}]’:
/usr/include/c++/6/tuple:626:362:   required by substitution of ‘template<class ... _UElements, typename std::enable_if<(((std::_TC<(sizeof... (_UElements) == 1), at::Tensor, at::Tensor, at::Tensor, at::Tensor>::_NotSameTuple<_UElements ...>() && std::_TC<(1ul == sizeof... (_UElements)), at::Tensor, at::Tensor, at::Tensor, at::Tensor>::_MoveConstructibleTuple<_UElements ...>()) && std::_TC<(1ul == sizeof... (_UElements)), at::Tensor, at::Tensor, at::Tensor, at::Tensor>::_ImplicitlyMoveConvertibleTuple<_UElements ...>()) && (4ul >= 1)), bool>::type <anonymous> > constexpr std::tuple< <template-parameter-1-1> >::tuple(_UElements&& ...) [with _UElements = {std::tuple<at::Tensor, at::Tensor, at::Tensor, at::Tensor>}; typename std::enable_if<(((std::_TC<(sizeof... (_UElements) == 1), at::Tensor, at::Tensor, at::Tensor, at::Tensor>::_NotSameTuple<_UElements ...>() && std::_TC<(1ul == sizeof... (_UElements)), at::Tensor, at::Tensor, at::Tensor, at::Tensor>::_MoveConstructibleTuple<_UElements ...>()) && std::_TC<(1ul == sizeof... (_UElements)), at::Tensor, at::Tensor, at::Tensor, at::Tensor>::_ImplicitlyMoveConvertibleTuple<_UElements ...>()) && (4ul >= 1)), bool>::type <anonymous> = <missing>]’
/home/josh/.local/lib/python3.6/site-packages/torch/lib/include/ATen/Functions.h:4095:107:   required from here
/usr/include/c++/6/tuple:489:65: error: mismatched argument pack lengths while expanding ‘std::is_convertible<_UElements&&, _Elements>’
       return __and_<is_convertible<_UElements&&, _Elements>...>::value;
                                                                 ^~~~~
/usr/include/c++/6/tuple:490:1: error: body of constexpr function ‘static constexpr bool std::_TC<<anonymous>, _Elements>::_ImplicitlyMoveConvertibleTuple() [with _UElements = {std::tuple<at::Tensor, at::Tensor, at::Tensor, at::Tensor>}; bool <anonymous> = true; _Elements = {at::Tensor, at::Tensor, at::Tensor, at::Tensor}]’ not a return-statement
     }
 ^
/usr/include/c++/6/tuple: In instantiation of ‘static constexpr bool std::_TC<<anonymous>, _Elements>::_NonNestedTuple() [with _SrcTuple = const std::tuple<at::Tensor, at::Tensor, at::Tensor, at::Tensor>&; bool <anonymous> = true; _Elements = {at::Tensor, at::Tensor, at::Tensor, at::Tensor}]’:
/usr/include/c++/6/tuple:662:419:   required by substitution of ‘template<class ... _UElements, class _Dummy, typename std::enable_if<((std::_TC<(1ul == sizeof... (_UElements)), at::Tensor, at::Tensor, at::Tensor, at::Tensor>::_ConstructibleTuple<_UElements ...>() && std::_TC<(1ul == sizeof... (_UElements)), at::Tensor, at::Tensor, at::Tensor, at::Tensor>::_ImplicitlyConvertibleTuple<_UElements ...>()) && std::_TC<(std::is_same<_Dummy, void>::value && (1ul == 1)), at::Tensor, at::Tensor, at::Tensor, at::Tensor>::_NonNestedTuple<const tuple<_Elements ...>&>()), bool>::type <anonymous> > constexpr std::tuple< <template-parameter-1-1> >::tuple(const std::tuple<_Args1 ...>&) [with _UElements = {at::Tensor, at::Tensor, at::Tensor, at::Tensor}; _Dummy = void; typename std::enable_if<((std::_TC<(1ul == sizeof... (_UElements)), at::Tensor, at::Tensor, at::Tensor, at::Tensor>::_ConstructibleTuple<_UElements ...>() && std::_TC<(1ul == sizeof... (_UElements)), at::Tensor, at::Tensor, at::Tensor, at::Tensor>::_ImplicitlyConvertibleTuple<_UElements ...>()) && std::_TC<(std::is_same<_Dummy, void>::value && (1ul == 1)), at::Tensor, at::Tensor, at::Tensor, at::Tensor>::_NonNestedTuple<const tuple<_Elements ...>&>()), bool>::type <anonymous> = <missing>]’
/home/josh/.local/lib/python3.6/site-packages/torch/lib/include/ATen/Functions.h:4095:107:   required from here
/usr/include/c++/6/tuple:495:244: error: wrong number of template arguments (5, should be 2)
       return  __and_<__not_<is_same<tuple<_Elements...>,
                                                                                                                                                                                                                                                    ^    
/usr/include/c++/6/type_traits:1558:8: note: provided for ‘template<class _From, class _To> struct std::is_convertible’
     struct is_convertible
        ^~~~~~~~~~~~~~
/usr/include/c++/6/tuple:502:1: error: body of constexpr function ‘static constexpr bool std::_TC<<anonymous>, _Elements>::_NonNestedTuple() [with _SrcTuple = const std::tuple<at::Tensor, at::Tensor, at::Tensor, at::Tensor>&; bool <anonymous> = true; _Elements = {at::Tensor, at::Tensor, at::Tensor, at::Tensor}]’ not a return-statement
     }
 ^
/usr/include/c++/6/tuple: In instantiation of ‘static constexpr bool std::_TC<<anonymous>, _Elements>::_NonNestedTuple() [with _SrcTuple = std::tuple<at::Tensor, at::Tensor, at::Tensor, at::Tensor>&&; bool <anonymous> = true; _Elements = {at::Tensor, at::Tensor, at::Tensor, at::Tensor}]’:
/usr/include/c++/6/tuple:686:422:   required by substitution of ‘template<class ... _UElements, class _Dummy, typename std::enable_if<((std::_TC<(1ul == sizeof... (_UElements)), at::Tensor, at::Tensor, at::Tensor, at::Tensor>::_MoveConstructibleTuple<_UElements ...>() && std::_TC<(1ul == sizeof... (_UElements)), at::Tensor, at::Tensor, at::Tensor, at::Tensor>::_ImplicitlyMoveConvertibleTuple<_UElements ...>()) && std::_TC<(std::is_same<_Dummy, void>::value && (1ul == 1)), at::Tensor, at::Tensor, at::Tensor, at::Tensor>::_NonNestedTuple<tuple<_Elements ...>&&>()), bool>::type <anonymous> > constexpr std::tuple< <template-parameter-1-1> >::tuple(std::tuple<_Args1 ...>&&) [with _UElements = {at::Tensor, at::Tensor, at::Tensor, at::Tensor}; _Dummy = void; typename std::enable_if<((std::_TC<(1ul == sizeof... (_UElements)), at::Tensor, at::Tensor, at::Tensor, at::Tensor>::_MoveConstructibleTuple<_UElements ...>() && std::_TC<(1ul == sizeof... (_UElements)), at::Tensor, at::Tensor, at::Tensor, at::Tensor>::_ImplicitlyMoveConvertibleTuple<_UElements ...>()) && std::_TC<(std::is_same<_Dummy, void>::value && (1ul == 1)), at::Tensor, at::Tensor, at::Tensor, at::Tensor>::_NonNestedTuple<tuple<_Elements ...>&&>()), bool>::type <anonymous> = <missing>]’
/home/josh/.local/lib/python3.6/site-packages/torch/lib/include/ATen/Functions.h:4095:107:   required from here
/usr/include/c++/6/tuple:495:244: error: wrong number of template arguments (5, should be 2)
       return  __and_<__not_<is_same<tuple<_Elements...>,
                                                                                                                                                                                                                                                    ^    
/usr/include/c++/6/type_traits:1558:8: note: provided for ‘template<class _From, class _To> struct std::is_convertible’
     struct is_convertible
        ^~~~~~~~~~~~~~
/usr/include/c++/6/tuple:502:1: error: body of constexpr function ‘static constexpr bool std::_TC<<anonymous>, _Elements>::_NonNestedTuple() [with _SrcTuple = std::tuple<at::Tensor, at::Tensor, at::Tensor, at::Tensor>&&; bool <anonymous> = true; _Elements = {at::Tensor, at::Tensor, at::Tensor, at::Tensor}]’ not a return-statement
     }
 ^
error: command '/usr/local/cuda/bin/nvcc' failed with exit status 1
JoshuaMitton commented 5 years ago

Ok, so I have to apologise for wasting your time and thank you for being patient!

The issue was with my installation of torch-scatter, I was using gcc/g++ 6 and I changed to use gcc/g++ 5 as recomended here: https://github.com/facebookresearch/maskrcnn-benchmark/issues/25#issuecomment-470716587

This fixed the torch-scatter installation and python setup.py test runs.

In turn this also fixed the issue I was having with the PPI example not working due to torch-scatter.

Thanks for your help, I wouldn't have got it working otherwise!

rusty1s commented 5 years ago

Cool :)