When "obj" is not a tensor, NumPy Array, or DLPack capsule but
   implements Python's buffer protocol then the buffer is interpreted
   as an array of bytes grouped according to the size of the datatype
   passed to the "dtype" keyword argument. (If no datatype is passed
   then the default floating point datatype is used, instead.) The
   returned tensor will have the specified datatype (or default
   floating point datatype if none is specified) and, by default, be
   on the CPU device and share memory with the buffer.
When "obj" is none of the above but a scalar or sequence of scalars
   then the returned tensor will, by default, infer its datatype from
   the scalar values, be on the CPU device, and not share its memory.
See also:
 "torch.tensor()" creates a tensor that always copies the data
 from the input object. "torch.from_numpy()" creates a tensor that
 always shares memory from NumPy arrays. "torch.frombuffer()"
