anchor.diff:          Shape.checkCanGather a.shape dim indices.shape indices.dtype
           let inline fRaw(a:RawTensor) = a.GatherT(dim, indices.primalRaw)
           let inline fTensor(a:Tensor) = a.gather(dim, indices)
  -        let inline dfTensorFwd(ap,ad:Tensor,cp) = ad.gather(dim, indices)
  -        let inline dfTensorRev(a) = GatherT(a, dim, indices)
  -        Tensor.OpUnary(a, fRaw, fTensor, dfTensorFwd, dfTensorRev)
  +        let inline dfFwd(ap,ad:Tensor,fp) = ad.gather(dim, indices)
  +        let inline dfRev(a) = GatherT(a, dim, indices)
  +        Tensor.OpUnary(a, fRaw, fTensor, dfFwd, dfRev)
   
       /// <summary>Returns a new tensor with the same data as the self tensor but of a different shape.</summary>
       /// <remarks>
  
positive.code:     member a.log() =
          let inline fRaw(a:RawTensor) = a.LogT()
          let inline fTensor(a:Tensor) = a.log()
          let inline dfTensorFwd(ap,ad,cp) = ad / ap
          let inline dfTensorRev(a) = LogT(a)
          Tensor.OpUnary(a, fRaw, fTensor, dfTensorFwd, dfTensorRev)
  
      /// <summary>A method to enable the use of the F# function <c>log</c>.</summary>
      static member Log(a:Tensor) = a.log() // needed for FSharp.Core log operator overload
  
negative.code:         let mutable b = b
          if dilation > 1 then
              b <- b.dilate([|1; 1; dilation|])
          let fderivative = a
          let a = a.zerosLike(outputShape)
          // Use convolution reverse mode to implement transposed convolution
          let (aderivative:Tensor), _ = Tensor.conv1dReverseDiff(a, b, fderivative, aConst=false, bConst=true, stride=stride, padding=padding)
          aderivative
  
      /// <summary>Applies a 2D convolution over an input signal composed of several input planes</summary>
  