pyg-nightly 2.7.0.dev20250216__py3-none-any.whl → 2.7.0.dev20250217__py3-none-any.whl

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: pyg-nightly
3
- Version: 2.7.0.dev20250216
3
+ Version: 2.7.0.dev20250217
4
4
  Summary: Graph Neural Network Library for PyTorch
5
5
  Keywords: deep-learning,pytorch,geometric-deep-learning,graph-neural-networks,graph-convolutional-networks
6
6
  Author-email: Matthias Fey <matthias@pyg.org>
@@ -1,4 +1,4 @@
1
- torch_geometric/__init__.py,sha256=QlYg3d7vRWC0k_OzPCmAanyTUBiTvikPuzM9feT0REk,1978
1
+ torch_geometric/__init__.py,sha256=LZOz8NuqxM3Gqi_c9iZqnbd58Dk5w1hMcWGTBRlN8jM,1978
2
2
  torch_geometric/_compile.py,sha256=f-WQeH4VLi5Hn9lrgztFUCSrN_FImjhQa6BxFzcYC38,1338
3
3
  torch_geometric/_onnx.py,sha256=V9ffrIKSqhDw6xUZ12lkuSfNs48cQp2EeJ6Z19GfnVw,349
4
4
  torch_geometric/backend.py,sha256=lVaf7aLoVaB3M-UcByUJ1G4T4FOK6LXAg0CF4W3E8jo,1575
@@ -9,7 +9,7 @@ torch_geometric/deprecation.py,sha256=dWRymDIUkUVI2MeEmBG5WF4R6jObZeseSBV9G6FNfj
9
9
  torch_geometric/device.py,sha256=tU5-_lBNVbVHl_kUmWPwiG5mQ1pyapwMF4JkmtNN3MM,1224
10
10
  torch_geometric/edge_index.py,sha256=BsLh5tOZRjjSYDkjqOFAdBuvMaDg7EWaaLELYsUL0Z8,70048
11
11
  torch_geometric/experimental.py,sha256=JbtNNEXjFGI8hZ9raM6-qrZURP6Z5nlDK8QicZUIbz0,4756
12
- torch_geometric/hash_tensor.py,sha256=VBuz9n16ouSk2u4DifpCIW5MXiuoH5UGO4rPj-Celjw,4418
12
+ torch_geometric/hash_tensor.py,sha256=N4_LPbg9F35g_e9Wy2WgkLMA9kJPnKiYEgTn_4YrypU,5976
13
13
  torch_geometric/home.py,sha256=EV54B4Dmiv61GDbkCwtCfWGWJ4eFGwZ8s3KOgGjwYgY,790
14
14
  torch_geometric/index.py,sha256=9ChzWFCwj2slNcVBOgfV-wQn-KscJe_y7502w-Vf76w,24045
15
15
  torch_geometric/inspector.py,sha256=nKi5o4Mn6xsG0Ex1GudTEQt_EqnF9mcMqGtp7Shh9sQ,19336
@@ -633,6 +633,6 @@ torch_geometric/utils/undirected.py,sha256=H_nfpI0_WluOG6VfjPyldvcjL4w5USAKWu2x5
633
633
  torch_geometric/visualization/__init__.py,sha256=PyR_4K5SafsJrBr6qWrkjKr6GBL1b7FtZybyXCDEVwY,154
634
634
  torch_geometric/visualization/graph.py,sha256=ZuLPL92yGRi7lxlqsUPwL_EVVXF7P2kMcveTtW79vpA,4784
635
635
  torch_geometric/visualization/influence.py,sha256=CWMvuNA_Nf1sfbJmQgn58yS4OFpeKXeZPe7kEuvkUBw,477
636
- pyg_nightly-2.7.0.dev20250216.dist-info/WHEEL,sha256=CpUCUxeHQbRN5UGRQHYRJorO5Af-Qy_fHMctcQ8DSGI,82
637
- pyg_nightly-2.7.0.dev20250216.dist-info/METADATA,sha256=nrJ478w_yYVSpIyqlfR5lxdYTu6NOIzCv_atkMY5w5w,62999
638
- pyg_nightly-2.7.0.dev20250216.dist-info/RECORD,,
636
+ pyg_nightly-2.7.0.dev20250217.dist-info/WHEEL,sha256=CpUCUxeHQbRN5UGRQHYRJorO5Af-Qy_fHMctcQ8DSGI,82
637
+ pyg_nightly-2.7.0.dev20250217.dist-info/METADATA,sha256=ACH7q4dHQ_l_FbmuJwFJ_K6syGHcHVDwHD3WlqPs0lw,62999
638
+ pyg_nightly-2.7.0.dev20250217.dist-info/RECORD,,
@@ -31,7 +31,7 @@ from .lazy_loader import LazyLoader
31
31
  contrib = LazyLoader('contrib', globals(), 'torch_geometric.contrib')
32
32
  graphgym = LazyLoader('graphgym', globals(), 'torch_geometric.graphgym')
33
33
 
34
- __version__ = '2.7.0.dev20250216'
34
+ __version__ = '2.7.0.dev20250217'
35
35
 
36
36
  __all__ = [
37
37
  'Index',
@@ -5,6 +5,7 @@ import torch.utils._pytree as pytree
5
5
  import xxhash
6
6
  from torch import Tensor
7
7
 
8
+ import torch_geometric.typing
8
9
  from torch_geometric.typing import CPUHashMap, CUDAHashMap
9
10
 
10
11
  HANDLED_FUNCTIONS: Dict[Callable, Callable] = {}
@@ -18,9 +19,16 @@ def as_key_tensor(
18
19
  try:
19
20
  key = torch.as_tensor(key, device=device)
20
21
  except Exception:
21
- key = torch.tensor([
22
- xxhash.xxh64(item).intdigest() & 0x7FFFFFFFFFFFFFFF for item in key
23
- ], dtype=torch.int64, device=device)
22
+ device = device or torch.get_default_device()
23
+ # On GPU, we default to int32 for faster 'CUDAHashMap' implementation:
24
+ if device.type == 'cuda':
25
+ key = torch.tensor(
26
+ [xxhash.xxh32(x).intdigest() & 0x7FFFFFFF for x in key],
27
+ dtype=torch.int32, device=device)
28
+ else:
29
+ key = torch.tensor([
30
+ xxhash.xxh64(x).intdigest() & 0x7FFFFFFFFFFFFFFF for x in key
31
+ ], dtype=torch.int64, device=device)
24
32
 
25
33
  if key.element_size() == 1:
26
34
  key = key.view(torch.uint8)
@@ -40,6 +48,8 @@ def as_key_tensor(
40
48
  class HashTensor(Tensor):
41
49
  _map: Union[Tensor, CPUHashMap, CUDAHashMap]
42
50
  _value: Optional[Tensor]
51
+ _min_key: Tensor
52
+ _max_key: Tensor
43
53
 
44
54
  @staticmethod
45
55
  def __new__(
@@ -102,6 +112,34 @@ class HashTensor(Tensor):
102
112
 
103
113
  out._value = value
104
114
 
115
+ out._min_key = key.min() if key.numel() > 0 else key.new_zeros(())
116
+ out._max_key = key.max() if key.numel() > 0 else key.new_zeros(())
117
+
118
+ _range = out._max_key - out._min_key
119
+ # TODO Expose fixed threshold as argument.
120
+ if (key.dtype in {torch.uint8, torch.int16} or _range <= 1_000_000
121
+ or _range <= 2 * key.numel()):
122
+ out._map = torch.full(
123
+ size=(_range + 2, ),
124
+ fill_value=-1,
125
+ dtype=torch.int64,
126
+ device=device,
127
+ )
128
+ out._map[(key - (out._min_key - 1)).long()] = torch.arange(
129
+ key.numel(),
130
+ dtype=out._map.dtype,
131
+ device=out._map.device,
132
+ )
133
+ elif torch_geometric.typing.WITH_CUDA_HASH_MAP and key.is_cuda:
134
+ # TODO Convert int64 to int32.
135
+ out._map = CUDAHashMap(key, 0.5)
136
+ elif torch_geometric.typing.WITH_CPU_HASH_MAP and key.is_cpu:
137
+ out._map = CPUHashMap(key, -1)
138
+ else:
139
+ # TODO Expose pandas fallback.
140
+ # warnings.warn()
141
+ raise NotImplementedError
142
+
105
143
  return out
106
144
 
107
145
  def as_tensor(self) -> Tensor: