anchor.diff:          let i5max = i5
           let bounds = array2D [[i0min; i0max]; [i1min; i1max]; [i2min; i2max]; [i3min; i3max]; [i4min; i4max]; [i5min; i5max]]
           t.GetSlice(bounds)
  -
       member t.GetSlice(i0:int, i1min:int option, i1max:int option, i2:int, i3:int, i4:int, i5min:int option, i5max:int option) =
           let i0min = i0
           let i0max = i0
  
positive.code:             Tensor.OpBinary(a, b, fRaw, fTensor, dfTensorFwdTT, dfTensorFwdTC, dfTensorFwdCT, dfTensorRevTT, dfTensorRevTC, dfTensorRevCT)
          // TODO: implement general broadcasting?
          else failwithf "Cannot add Tensors with shapes %A, %A" a.Shape b.Shape
  
      static member (*) (a:Tensor, b) = a * a.Create(b)
  
      static member (*) (a, b:Tensor) = b.Create(a) * b
  
      member t1.Mul(t2:Tensor) = t1 * t2
  
      member t1.Mul(t2) = t1 * t1.Create(t2)
  
      static member (/) (a:Tensor, b:Tensor) =
  
negative.code:         let i5max = defaultArg i5max (t.Shape.[5] - 1)
          let bounds = array2D [[i0min; i0max]; [i1min; i1max]; [i2min; i2max]; [i3min; i3max]; [i4min; i4max]; [i5min; i5max]]
          t.GetSlice(bounds)
      member t.GetSlice(i0min:int option, i0max:int option, i1min:int option, i1max:int option, i2:int, i3min:int option, i3max:int option, i4:int, i5:int) =
          let i0min = defaultArg i0min 0
          let i0max = defaultArg i0max (t.Shape.[0] - 1)
  