code: def val_like(mat: SparseMatrix, val: torch.Tensor) -> SparseMatrix:
      """Creates a sparse matrix from an existing sparse matrix using new values.
  
      The new sparse matrix will have the same non-zero indices as the given
      sparse matrix and use the given values as the new non-zero values.
  
      Parameters
      ----------
      mat : SparseMatrix
          An existing sparse matrix with non-zero values
      val : torch.Tensor
          The new values of the non-zero elements, a tensor of shape ``(nnz)`` or
          ``(nnz, D)``
  
      Returns
      -------
      SparseMatrix
          New sparse matrix
  
      Examples
      --------
  
      >>> indices = torch.tensor([[1, 1, 2], [2, 4, 3]])
      >>> val = torch.ones(3)
      >>> A = dglsp.spmatrix(indices, val)
      >>> A = dglsp.val_like(A, torch.tensor([2, 2, 2]))
      SparseMatrix(indices=tensor([[1, 1, 2],
                                   [2, 4, 3]]),
                   values=tensor([2, 2, 2]),
                   shape=(3, 5), nnz=3)
      """
      assert (
          val.dim() <= 2
      ), "The values of a SparseMatrix can only be scalars or vectors."
  
      return SparseMatrix(
          torch.ops.dgl_sparse.val_like(mat.c_sparse_matrix, val)
      )
  
imports: from typing import Optional, Tuple
  import torch
label_desc: Use image node_id 5 for calling a global function with example usage: val_like(mat, val) and returns: SparseMatrix