anchor.diff:              let stop = fullBounds.[i,1] + 1
   
               let len = stop - start
  -            let idxs = LongTensor.Arange(int64 start, int64 stop, 1L)
  +            let idxs = LongTensor.Arange(int64 start, int64 stop, 1L, device=toTorchDevice t.Device)
               res <- res.IndexSelect(int64 dim, idxs)  // yield len // if len=1 then squeeze this dimension
               if fullBounds.[i, 2] = 1 && len = 1 then 
                   res <- res.Squeeze(int64 dim)  // yield len // if len=1 then squeeze this dimension
  
positive.code:                 DoubleTensor.From (data, toTorchShape shape) 
              | Dtype.Other _ -> failwith "deserialize other type in torch nyi"
  
          TorchRawTensor(tt, shape, dtype, device)
  
      interface System.Runtime.Serialization.ISerializable with
  
          //[SecurityPermissionAttribute(SecurityAction.Demand,  SerializationFormatter = true)]
          member t.GetObjectData(info, _context) =
              info.AddValue("device", device)
              info.AddValue("dtype", dtype)
              info.AddValue("shape", shape)
              info.AddValue("data", t.ToRawData())
  
  /// The concrete implementation of BackendStatics for Float32 data.
  type TorchStatics<'T, 'T2>
  
negative.code:         | Dtype.Other _ -> failwith "Torch GetItem TBD other type"
  
      member t.ToRawData<'T>() : 'T[] =
          match device with 
          | Device.CPU -> ()
          | _ -> invalidOp (sprintf "can't access raw data of '%A' tensor" device)
          let data = tt.Data<'T>()
          let res = Array.zeroCreate<'T> (int32 tt.NumberOfElements)
          for i in 0 .. int32 tt.NumberOfElements - 1 do
  