"self.dtype", then the size of the last dimension of the output
   will be scaled proportionally.  For instance, if "dtype" element
   size is twice that of "self.dtype", then each pair of elements in
   the last dimension of "self" will be combined, and the size of the
   last dimension of the output will be half that of "self". If
   "dtype" element size is half that of "self.dtype", then each
   element in the last dimension of "self" will be split in two, and
   the size of the last dimension of the output will be double that of
   "self". For this to be possible, the following conditions must be
   true:
  * "self.dim()" must be greater than 0.

  * "self.stride(-1)" must be 1.

Additionally, if the element size of "dtype" is greater than that
   of "self.dtype", the following conditions must be true as well:
  * "self.size(-1)" must be divisible by the ratio between the
    element sizes of the dtypes.

  * "self.storage_offset()" must be divisible by the ratio between
