code: def test_basic_feature_store():
      data = Data()
      x = torch.randn(20, 20)
      data.not_a_tensor_attr = 10  # don't include, not a tensor attr
      data.bad_attr = torch.randn(10, 20)  # don't include, bad cat_dim
  
      # Put tensor:
      assert data.put_tensor(
          copy.deepcopy(x), attr_name="x", index=None
      )
      assert torch.equal(data.x, x)
  
      # Put (modify) tensor slice:
      x[15:] = 0
      data.put_tensor(0, attr_name="x", index=slice(15, None, None))
  
      # Get tensor:
      out = data.get_tensor(attr_name="x", index=None)
      assert torch.equal(x, out)
  
      # Get tensor size:
      assert data.get_tensor_size(attr_name="x") == (20, 20)
  
      # Get tensor attrs:
      tensor_attrs = data.get_all_tensor_attrs()
      assert len(tensor_attrs) == 1
      assert tensor_attrs[0].attr_name == "x"
  
      # Remove tensor:
      assert "x" in data.__dict__["_store"]
      data.remove_tensor(attr_name="x", index=None)
      assert "x" not in data.__dict__["_store"]
  
imports: import copy
  import pytest
  import torch
  import torch.multiprocessing
  import torch_geometric
  from torch_geometric.data import Data
  from torch_geometric.data.storage import AttrType
  from torch_geometric.testing import get_random_tensor_frame, withPackage
label_desc: Use image node_id 14 for calling a global function with example usage: test_basic_feature_store() without return types