diff --git a/cbits/state_stuff.c b/cbits/state_stuff.c
new file mode 100644
--- /dev/null
+++ b/cbits/state_stuff.c
@@ -0,0 +1,13 @@
+#ifdef CUDA
+#include "THC/THCGeneral.h"
+void free_CTHState(THCState* s)
+{
+  THCudaShutdown(s);
+  THCState_free(s);
+}
+#else
+void free_CTHState(int* s)
+{
+  return;
+}
+#endif
diff --git a/hasktorch-ffi-thc.cabal b/hasktorch-ffi-thc.cabal
new file mode 100644
--- /dev/null
+++ b/hasktorch-ffi-thc.cabal
@@ -0,0 +1,273 @@
+cabal-version: 2.2
+-- * * * * * * * * * * * * WARNING * * * * * * * * * * * *
+-- This file has been AUTO-GENERATED by dhall-to-cabal.
+--
+-- Do not edit it by hand, because your changes will be over-written!
+--
+-- Instead, edit the source Dhall file, namely
+-- 'ffi/ffi/thc/hasktorch-ffi-thc.dhall', and re-generate this file by running
+-- 'dhall-to-cabal -- ffi/ffi/thc/hasktorch-ffi-thc.dhall > hasktorch-ffi-thc.cabal'.
+-- * * * * * * * * * * * * WARNING * * * * * * * * * * * *
+name: hasktorch-ffi-thc
+version: 0.0.1.0
+license: BSD-3-Clause
+maintainer: Sam Stites <fnz@fgvgrf.vb>, Austin Huang <nhfgvau@nyhz.zvg.rqh> - cipher:ROT13
+author: Hasktorch dev team
+homepage: https://github.com/hasktorch/hasktorch#readme
+bug-reports: https://github.com/hasktorch/hasktorch/issues
+synopsis: Bindings to Cutorch
+description:
+    Cutorch (and THCUNN) FFI bindings for GPU-based tensors and neural networks in Haskell
+category: Tensors, Machine Learning, AI, FFI
+build-type: Simple
+
+source-repository head
+    type: git
+    location: https://github.com/hasktorch/hasktorch
+
+flag half
+    description:
+        build with half support
+    default: False
+
+flag lite
+    description:
+        only build with Double and Long support
+    default: False
+
+flag float
+    description:
+        Build with float support. THC doesn't seem to build uniform Float types by default.
+    default: False
+
+flag with_nn
+    description:
+        build with nn support
+
+library
+    exposed-modules:
+        Torch.FFI.THC.State
+        Torch.FFI.THC.Stream
+        Torch.FFI.THC.Blas
+        Torch.FFI.THC.Half
+        Torch.FFI.THC.CachingHostAllocator
+        Torch.FFI.THC.CachingAllocator
+        Torch.FFI.THC.Sleep
+        Torch.FFI.THC.TensorMath
+        Torch.FFI.THC.TensorRandom
+        Torch.FFI.THC.General
+        Torch.FFI.THC.Long.Storage
+        Torch.FFI.THC.Long.StorageCopy
+        Torch.FFI.THC.Long.Tensor
+        Torch.FFI.THC.Long.TensorCopy
+        Torch.FFI.THC.Long.TensorIndex
+        Torch.FFI.THC.Long.TensorMode
+        Torch.FFI.THC.Long.TensorMath
+        Torch.FFI.THC.Long.TensorMathCompareT
+        Torch.FFI.THC.Long.TensorMathScan
+        Torch.FFI.THC.Long.TensorMathPairwise
+        Torch.FFI.THC.Long.TensorMathPointwise
+        Torch.FFI.THC.Long.TensorMathReduce
+        Torch.FFI.THC.Long.TensorMasked
+        Torch.FFI.THC.Long.TensorMathCompare
+        Torch.FFI.THC.Long.TensorRandom
+        Torch.FFI.THC.Long.TensorScatterGather
+        Torch.FFI.THC.Long.TensorSort
+        Torch.FFI.THC.Long.TensorTopK
+        Torch.FFI.THC.Double.Storage
+        Torch.FFI.THC.Double.StorageCopy
+        Torch.FFI.THC.Double.Tensor
+        Torch.FFI.THC.Double.TensorCopy
+        Torch.FFI.THC.Double.TensorIndex
+        Torch.FFI.THC.Double.TensorMode
+        Torch.FFI.THC.Double.TensorMath
+        Torch.FFI.THC.Double.TensorMathCompareT
+        Torch.FFI.THC.Double.TensorMathScan
+        Torch.FFI.THC.Double.TensorMathPairwise
+        Torch.FFI.THC.Double.TensorMathPointwise
+        Torch.FFI.THC.Double.TensorMathReduce
+        Torch.FFI.THC.Double.TensorMasked
+        Torch.FFI.THC.Double.TensorMathCompare
+        Torch.FFI.THC.Double.TensorRandom
+        Torch.FFI.THC.Double.TensorScatterGather
+        Torch.FFI.THC.Double.TensorSort
+        Torch.FFI.THC.Double.TensorTopK
+        Torch.FFI.THC.Double.TensorMathMagma
+        Torch.FFI.THC.Double.TensorMathBlas
+    build-tools: c2hs -any
+    cpp-options: -DCUDA
+    c-sources:
+        cbits/state_stuff.c
+    hs-source-dirs: src nn state
+    other-modules:
+        Paths_hasktorch_ffi_thc
+    autogen-modules:
+        Paths_hasktorch_ffi_thc
+    default-language: Haskell2010
+    extra-libraries:
+        ATen
+    build-depends:
+        base (==4.7 || >4.7) && <5,
+        hasktorch-types-th (==0.0.1 || >0.0.1) && <0.0.2,
+        hasktorch-types-thc (==0.0.1 || >0.0.1) && <0.0.2,
+        inline-c ==0.5 || >0.5,
+        text ==1.2.2 || >1.2.2
+    
+    if flag(lite)
+        
+        if flag(float)
+        else
+        
+        if flag(half)
+        else
+    else
+        exposed-modules:
+            Torch.FFI.THC.Byte.Storage
+            Torch.FFI.THC.Byte.StorageCopy
+            Torch.FFI.THC.Byte.Tensor
+            Torch.FFI.THC.Byte.TensorCopy
+            Torch.FFI.THC.Byte.TensorIndex
+            Torch.FFI.THC.Byte.TensorMode
+            Torch.FFI.THC.Byte.TensorMath
+            Torch.FFI.THC.Byte.TensorMathCompareT
+            Torch.FFI.THC.Byte.TensorMathScan
+            Torch.FFI.THC.Byte.TensorMathPairwise
+            Torch.FFI.THC.Byte.TensorMathPointwise
+            Torch.FFI.THC.Byte.TensorMathReduce
+            Torch.FFI.THC.Byte.TensorMasked
+            Torch.FFI.THC.Byte.TensorMathCompare
+            Torch.FFI.THC.Byte.TensorRandom
+            Torch.FFI.THC.Byte.TensorScatterGather
+            Torch.FFI.THC.Byte.TensorSort
+            Torch.FFI.THC.Byte.TensorTopK
+            Torch.FFI.THC.Char.Storage
+            Torch.FFI.THC.Char.StorageCopy
+            Torch.FFI.THC.Char.Tensor
+            Torch.FFI.THC.Char.TensorCopy
+            Torch.FFI.THC.Char.TensorIndex
+            Torch.FFI.THC.Char.TensorMode
+            Torch.FFI.THC.Char.TensorMath
+            Torch.FFI.THC.Char.TensorMathCompareT
+            Torch.FFI.THC.Char.TensorMathScan
+            Torch.FFI.THC.Char.TensorMathPairwise
+            Torch.FFI.THC.Char.TensorMathPointwise
+            Torch.FFI.THC.Char.TensorMathReduce
+            Torch.FFI.THC.Char.TensorMasked
+            Torch.FFI.THC.Char.TensorMathCompare
+            Torch.FFI.THC.Char.TensorRandom
+            Torch.FFI.THC.Char.TensorScatterGather
+            Torch.FFI.THC.Char.TensorSort
+            Torch.FFI.THC.Char.TensorTopK
+            Torch.FFI.THC.Int.Storage
+            Torch.FFI.THC.Int.StorageCopy
+            Torch.FFI.THC.Int.Tensor
+            Torch.FFI.THC.Int.TensorCopy
+            Torch.FFI.THC.Int.TensorIndex
+            Torch.FFI.THC.Int.TensorMode
+            Torch.FFI.THC.Int.TensorMath
+            Torch.FFI.THC.Int.TensorMathCompareT
+            Torch.FFI.THC.Int.TensorMathScan
+            Torch.FFI.THC.Int.TensorMathPairwise
+            Torch.FFI.THC.Int.TensorMathPointwise
+            Torch.FFI.THC.Int.TensorMathReduce
+            Torch.FFI.THC.Int.TensorMasked
+            Torch.FFI.THC.Int.TensorMathCompare
+            Torch.FFI.THC.Int.TensorRandom
+            Torch.FFI.THC.Int.TensorScatterGather
+            Torch.FFI.THC.Int.TensorSort
+            Torch.FFI.THC.Int.TensorTopK
+            Torch.FFI.THC.Short.Storage
+            Torch.FFI.THC.Short.StorageCopy
+            Torch.FFI.THC.Short.Tensor
+            Torch.FFI.THC.Short.TensorCopy
+            Torch.FFI.THC.Short.TensorIndex
+            Torch.FFI.THC.Short.TensorMode
+            Torch.FFI.THC.Short.TensorMath
+            Torch.FFI.THC.Short.TensorMathCompareT
+            Torch.FFI.THC.Short.TensorMathScan
+            Torch.FFI.THC.Short.TensorMathPairwise
+            Torch.FFI.THC.Short.TensorMathPointwise
+            Torch.FFI.THC.Short.TensorMathReduce
+            Torch.FFI.THC.Short.TensorMasked
+            Torch.FFI.THC.Short.TensorMathCompare
+            Torch.FFI.THC.Short.TensorRandom
+            Torch.FFI.THC.Short.TensorScatterGather
+            Torch.FFI.THC.Short.TensorSort
+            Torch.FFI.THC.Short.TensorTopK
+        
+        if flag(float)
+            exposed-modules:
+                Torch.FFI.THC.Float.Storage
+                Torch.FFI.THC.Float.StorageCopy
+                Torch.FFI.THC.Float.Tensor
+                Torch.FFI.THC.Float.TensorCopy
+                Torch.FFI.THC.Float.TensorIndex
+                Torch.FFI.THC.Float.TensorMode
+                Torch.FFI.THC.Float.TensorMath
+                Torch.FFI.THC.Float.TensorMathCompareT
+                Torch.FFI.THC.Float.TensorMathScan
+                Torch.FFI.THC.Float.TensorMathPairwise
+                Torch.FFI.THC.Float.TensorMathPointwise
+                Torch.FFI.THC.Float.TensorMathReduce
+                Torch.FFI.THC.Float.TensorMasked
+                Torch.FFI.THC.Float.TensorMathCompare
+                Torch.FFI.THC.Float.TensorRandom
+                Torch.FFI.THC.Float.TensorScatterGather
+                Torch.FFI.THC.Float.TensorSort
+                Torch.FFI.THC.Float.TensorTopK
+                Torch.FFI.THC.Float.TensorMathMagma
+                Torch.FFI.THC.Float.TensorMathBlas
+        else
+        
+        if flag(half)
+            exposed-modules:
+                Torch.FFI.THC.Half.Storage
+                Torch.FFI.THC.Half.StorageCopy
+                Torch.FFI.THC.Half.Tensor
+                Torch.FFI.THC.Half.TensorCopy
+                Torch.FFI.THC.Half.TensorIndex
+                Torch.FFI.THC.Half.TensorMode
+                Torch.FFI.THC.Half.TensorMath
+                Torch.FFI.THC.Half.TensorMathCompareT
+                Torch.FFI.THC.Half.TensorMathScan
+                Torch.FFI.THC.Half.TensorMathPairwise
+                Torch.FFI.THC.Half.TensorMathPointwise
+                Torch.FFI.THC.Half.TensorMathReduce
+                Torch.FFI.THC.Half.TensorMasked
+                Torch.FFI.THC.Half.TensorMathCompare
+                Torch.FFI.THC.Half.TensorRandom
+                Torch.FFI.THC.Half.TensorScatterGather
+                Torch.FFI.THC.Half.TensorSort
+                Torch.FFI.THC.Half.TensorTopK
+        else
+    
+    if flag(with_nn)
+        exposed-modules:
+            Torch.FFI.THC.NN.Double
+    else
+
+test-suite spec
+    type: exitcode-stdio-1.0
+    main-is: Spec.hs
+    hs-source-dirs: tests
+    other-modules:
+        MathSpec
+        TensorSpec
+        Internal
+    default-language: Haskell2010
+    build-depends:
+        base (==4.7 || >4.7) && <5,
+        QuickCheck ==2.11 || >2.11,
+        hasktorch-ffi-tests (==0.0.1 || >0.0.1) && <0.0.2,
+        hasktorch-ffi-th (==0.0.1 || >0.0.1) && <0.0.2,
+        hasktorch-ffi-thc -any,
+        hasktorch-types-th (==0.0.1 || >0.0.1) && <0.0.2,
+        hasktorch-types-thc (==0.0.1 || >0.0.1) && <0.0.2,
+        hspec ==2.4.4 || >2.4.4,
+        text ==1.2.2 || >1.2.2
+    
+    if flag(with_nn)
+        other-modules:
+            NNSpec
+    else
+
diff --git a/nn/Torch/FFI/THC/NN/Double.hs b/nn/Torch/FFI/THC/NN/Double.hs
new file mode 100644
--- /dev/null
+++ b/nn/Torch/FFI/THC/NN/Double.hs
@@ -0,0 +1,1465 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.NN.Double where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_Abs_updateOutput :  state input output -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleAbs_updateOutput"
+  c_Abs_updateOutput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_Abs_updateGradInput :  state input gradOutput gradInput -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleAbs_updateGradInput"
+  c_Abs_updateGradInput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_AbsCriterion_updateOutput :  state input target output sizeAverage reduce -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleAbsCriterion_updateOutput"
+  c_AbsCriterion_updateOutput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CBool -> CBool -> IO ()
+
+-- | c_AbsCriterion_updateGradInput :  state input target gradOutput gradInput sizeAverage reduce -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleAbsCriterion_updateGradInput"
+  c_AbsCriterion_updateGradInput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CBool -> CBool -> IO ()
+
+-- | c_BatchNormalization_updateOutput :  state input_ output_ weight_ bias_ runningMean_ runningVar_ saveMean_ saveStd_ train momentum eps -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleBatchNormalization_updateOutput"
+  c_BatchNormalization_updateOutput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CBool -> CDouble -> CDouble -> IO ()
+
+-- | c_BatchNormalization_backward :  state input_ gradOutput_ gradInput_ gradWeight_ gradBias_ weight_ runningMean_ runningVar_ saveMean_ saveStd_ train scale eps -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleBatchNormalization_backward"
+  c_BatchNormalization_backward :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CBool -> CDouble -> CDouble -> IO ()
+
+-- | c_BCECriterion_updateOutput :  state input target output sizeAverage weights reduce -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleBCECriterion_updateOutput"
+  c_BCECriterion_updateOutput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CBool -> Ptr C'THCudaDoubleTensor -> CBool -> IO ()
+
+-- | c_BCECriterion_updateGradInput :  state input target gradOutput gradInput sizeAverage weights reduce -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleBCECriterion_updateGradInput"
+  c_BCECriterion_updateGradInput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CBool -> Ptr C'THCudaDoubleTensor -> CBool -> IO ()
+
+-- | c_ClassNLLCriterion_updateOutput :  state input target output sizeAverage weights total_weight ignore_index reduce -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleClassNLLCriterion_updateOutput"
+  c_ClassNLLCriterion_updateOutput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCIndexTensor -> Ptr C'THCudaDoubleTensor -> CBool -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CLLong -> CBool -> IO ()
+
+-- | c_ClassNLLCriterion_updateGradInput :  state input target gradOutput gradInput sizeAverage weights total_weight ignore_index reduce -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleClassNLLCriterion_updateGradInput"
+  c_ClassNLLCriterion_updateGradInput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCIndexTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CBool -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CLLong -> CBool -> IO ()
+
+-- | c_DistKLDivCriterion_updateOutput :  state input target output sizeAverage reduce -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleDistKLDivCriterion_updateOutput"
+  c_DistKLDivCriterion_updateOutput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CBool -> CBool -> IO ()
+
+-- | c_DistKLDivCriterion_updateGradInput :  state input target gradOutput gradInput sizeAverage reduce -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleDistKLDivCriterion_updateGradInput"
+  c_DistKLDivCriterion_updateGradInput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CBool -> CBool -> IO ()
+
+-- | c_ELU_updateOutput :  state input output alpha scale inplace -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleELU_updateOutput"
+  c_ELU_updateOutput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> CDouble -> CBool -> IO ()
+
+-- | c_ELU_updateGradInput :  state gradOutput gradInput output alpha scale -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleELU_updateGradInput"
+  c_ELU_updateGradInput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> CDouble -> IO ()
+
+-- | c_FeatureLPPooling_updateOutput :  state inputTH outputTH power width stride batchMode -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleFeatureLPPooling_updateOutput"
+  c_FeatureLPPooling_updateOutput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> CInt -> CInt -> CBool -> IO ()
+
+-- | c_FeatureLPPooling_updateGradInput :  state gradOutputTH inputTH outputTH gradInputTH power width stride batchMode -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleFeatureLPPooling_updateGradInput"
+  c_FeatureLPPooling_updateGradInput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> CInt -> CInt -> CBool -> IO ()
+
+-- | c_HardTanh_updateOutput :  state input output min_val max_val inplace -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleHardTanh_updateOutput"
+  c_HardTanh_updateOutput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> CDouble -> CBool -> IO ()
+
+-- | c_HardTanh_updateGradInput :  state input gradOutput gradInput min_val max_val inplace -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleHardTanh_updateGradInput"
+  c_HardTanh_updateGradInput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> CDouble -> CBool -> IO ()
+
+-- | c_GatedLinear_updateOutput :  state input output dim -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleGatedLinear_updateOutput"
+  c_GatedLinear_updateOutput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> IO ()
+
+-- | c_GatedLinear_updateGradInput :  state input gradOutput gradInput dim -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleGatedLinear_updateGradInput"
+  c_GatedLinear_updateGradInput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> IO ()
+
+-- | c_Im2Col_updateOutput :  state input output kH kW dH dW padH padW sH sW -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleIm2Col_updateOutput"
+  c_Im2Col_updateOutput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> IO ()
+
+-- | c_Im2Col_updateGradInput :  state gradOutput gradInput inputHeight inputWidth kH kW dH dW padH padW sH sW -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleIm2Col_updateGradInput"
+  c_Im2Col_updateGradInput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> IO ()
+
+-- | c_Col2Im_updateOutput :  state input output outputHeight outputWidth kH kW dH dW padH padW sH sW -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleCol2Im_updateOutput"
+  c_Col2Im_updateOutput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> IO ()
+
+-- | c_Col2Im_updateGradInput :  state gradOutput gradInput kH kW dH dW padH padW sH sW -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleCol2Im_updateGradInput"
+  c_Col2Im_updateGradInput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> IO ()
+
+-- | c_LeakyReLU_updateOutput :  state input output negval inplace -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleLeakyReLU_updateOutput"
+  c_LeakyReLU_updateOutput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> CBool -> IO ()
+
+-- | c_LeakyReLU_updateGradInput :  state input gradOutput gradInput negval inplace -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleLeakyReLU_updateGradInput"
+  c_LeakyReLU_updateGradInput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> CBool -> IO ()
+
+-- | c_GRUFused_updateOutput :  state input hidden bias1 bias2 hx hy storage -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleGRUFused_updateOutput"
+  c_GRUFused_updateOutput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_GRUFused_updateGradInput :  state gradInInput gradInHidden gradOutput gradInputHx storage -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleGRUFused_updateGradInput"
+  c_GRUFused_updateGradInput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_LSTMFused_updateOutput :  state input hidden bias1 bias2 cx hy cy -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleLSTMFused_updateOutput"
+  c_LSTMFused_updateOutput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_LSTMFused_updateGradInput :  state storage gradInGates prevC cy gradOutput gradOutputCell gradInputCx -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleLSTMFused_updateGradInput"
+  c_LSTMFused_updateGradInput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_LogSigmoid_updateOutput :  state input output buffer -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleLogSigmoid_updateOutput"
+  c_LogSigmoid_updateOutput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_LogSigmoid_updateGradInput :  state input gradOutput gradInput buffer -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleLogSigmoid_updateGradInput"
+  c_LogSigmoid_updateGradInput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_LogSoftMax_updateOutput :  state input output dim -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleLogSoftMax_updateOutput"
+  c_LogSoftMax_updateOutput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> IO ()
+
+-- | c_LogSoftMax_updateGradInput :  state input gradOutput gradInput output dim -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleLogSoftMax_updateGradInput"
+  c_LogSoftMax_updateGradInput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> IO ()
+
+-- | c_LookupTable_accGradParameters :  state input gradOutput gradWeight count sorted indices scaleGradByFreq paddingValue scale -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleLookupTable_accGradParameters"
+  c_LookupTable_accGradParameters :: Ptr C'THCState -> Ptr C'THCIndexTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCIndexTensor -> Ptr C'THCIndexTensor -> Ptr C'THCIndexTensor -> CBool -> CInt -> CDouble -> IO ()
+
+-- | c_LookupTable_renorm :  state idx weight maxNorm normType -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleLookupTable_renorm"
+  c_LookupTable_renorm :: Ptr C'THCState -> Ptr C'THCIndexTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> CDouble -> IO ()
+
+-- | c_LookupTableBag_updateOutput :  state input offsets weight output offset2bag mode seq_length -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleLookupTableBag_updateOutput"
+  c_LookupTableBag_updateOutput :: Ptr C'THCState -> Ptr C'THCIndexTensor -> Ptr C'THCIndexTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCIndexTensor -> CInt -> Ptr C'THCIndexTensor -> IO ()
+
+-- | c_LookupTableBag_accGradParameters :  state input gradOutput gradWeight offset2bag count sortedIndices origIndices scaleGradByFreq mode seq_length scale_ -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleLookupTableBag_accGradParameters"
+  c_LookupTableBag_accGradParameters :: Ptr C'THCState -> Ptr C'THCIndexTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCIndexTensor -> Ptr C'THCIndexTensor -> Ptr C'THCIndexTensor -> Ptr C'THCIndexTensor -> CBool -> CInt -> Ptr C'THCIndexTensor -> CDouble -> IO ()
+
+-- | c_L1Cost_updateOutput :  state input output -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleL1Cost_updateOutput"
+  c_L1Cost_updateOutput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_L1Cost_updateGradInput :  state input gradOutput gradInput -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleL1Cost_updateGradInput"
+  c_L1Cost_updateGradInput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_MarginCriterion_updateOutput :  state input target output sizeAverage margin -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleMarginCriterion_updateOutput"
+  c_MarginCriterion_updateOutput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CBool -> CDouble -> IO ()
+
+-- | c_MarginCriterion_updateGradInput :  state input target gradInput sizeAverage margin -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleMarginCriterion_updateGradInput"
+  c_MarginCriterion_updateGradInput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CBool -> CDouble -> IO ()
+
+-- | c_MSECriterion_updateOutput :  state input target output sizeAverage reduce -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleMSECriterion_updateOutput"
+  c_MSECriterion_updateOutput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CBool -> CBool -> IO ()
+
+-- | c_MSECriterion_updateGradInput :  state input target gradOutput gradInput sizeAverage reduce -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleMSECriterion_updateGradInput"
+  c_MSECriterion_updateGradInput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CBool -> CBool -> IO ()
+
+-- | c_MultiLabelMarginCriterion_updateOutput :  state input target output istarget sizeaverage reduce -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleMultiLabelMarginCriterion_updateOutput"
+  c_MultiLabelMarginCriterion_updateOutput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCIndexTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CBool -> CBool -> IO ()
+
+-- | c_MultiLabelMarginCriterion_updateGradInput :  state input target gradOutput gradInput istarget sizeaverage reduce -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleMultiLabelMarginCriterion_updateGradInput"
+  c_MultiLabelMarginCriterion_updateGradInput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCIndexTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CBool -> CBool -> IO ()
+
+-- | c_MultiMarginCriterion_updateOutput :  state input target output sizeAverage p weights margin reduce -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleMultiMarginCriterion_updateOutput"
+  c_MultiMarginCriterion_updateOutput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCIndexTensor -> Ptr C'THCudaDoubleTensor -> CBool -> CInt -> Ptr C'THCudaDoubleTensor -> CDouble -> CBool -> IO ()
+
+-- | c_MultiMarginCriterion_updateGradInput :  state input target gradOutput gradInput sizeAverage p weights margin reduce -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleMultiMarginCriterion_updateGradInput"
+  c_MultiMarginCriterion_updateGradInput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCIndexTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CBool -> CInt -> Ptr C'THCudaDoubleTensor -> CDouble -> CBool -> IO ()
+
+-- | c_PReLU_updateOutput :  state input output weight -> void
+foreign import ccall "THCUNN.h THNN_CudaDoublePReLU_updateOutput"
+  c_PReLU_updateOutput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_PReLU_updateGradInput :  state input gradOutput gradInput weight -> void
+foreign import ccall "THCUNN.h THNN_CudaDoublePReLU_updateGradInput"
+  c_PReLU_updateGradInput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_PReLU_accGradParameters :  state input gradOutput gradInput weight gradWeight scale -> void
+foreign import ccall "THCUNN.h THNN_CudaDoublePReLU_accGradParameters"
+  c_PReLU_accGradParameters :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> IO ()
+
+-- | c_SmoothL1Criterion_updateOutput :  state input target output sizeAverage reduce -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleSmoothL1Criterion_updateOutput"
+  c_SmoothL1Criterion_updateOutput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CBool -> CBool -> IO ()
+
+-- | c_SmoothL1Criterion_updateGradInput :  state input target gradOutput gradInput sizeAverage reduce -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleSmoothL1Criterion_updateGradInput"
+  c_SmoothL1Criterion_updateGradInput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CBool -> CBool -> IO ()
+
+-- | c_SparseLinear_updateOutput :  state input output weight bias -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleSparseLinear_updateOutput"
+  c_SparseLinear_updateOutput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_SparseLinear_accGradParameters :  state input gradOutput gradWeight gradBias weight bias weightDecay scale -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleSparseLinear_accGradParameters"
+  c_SparseLinear_accGradParameters :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> CDouble -> IO ()
+
+-- | c_SparseLinear_legacyUpdateOutput :  state input output weight bias -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleSparseLinear_legacyUpdateOutput"
+  c_SparseLinear_legacyUpdateOutput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_SparseLinear_legacyAccGradParameters :  state input gradOutput gradWeight gradBias weight bias weightDecay scale -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleSparseLinear_legacyAccGradParameters"
+  c_SparseLinear_legacyAccGradParameters :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> CDouble -> IO ()
+
+-- | c_SparseLinear_zeroGradParameters :  state gradWeight gradBias lastInput -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleSparseLinear_zeroGradParameters"
+  c_SparseLinear_zeroGradParameters :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_SparseLinear_updateParameters :  state weight bias gradWeight gradBias lastInput learningRate -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleSparseLinear_updateParameters"
+  c_SparseLinear_updateParameters :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> IO ()
+
+-- | c_IndexLinear_updateOutput :  state keys keysOffset values sizes cumSumSizes output weight bias normalizedValues train -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleIndexLinear_updateOutput"
+  c_IndexLinear_updateOutput :: Ptr C'THCState -> Ptr C'THCIndexTensor -> CLLong -> Ptr C'THCudaDoubleTensor -> Ptr C'THCIndexTensor -> Ptr C'THCIndexTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> IO ()
+
+-- | c_IndexLinear_accGradParameters :  state keys keysOffset values sizes cumSumSizes gradOutput gradWeight gradBias weight bias valuesBuffer weightDecay scale -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleIndexLinear_accGradParameters"
+  c_IndexLinear_accGradParameters :: Ptr C'THCState -> Ptr C'THCIndexTensor -> CLLong -> Ptr C'THCudaDoubleTensor -> Ptr C'THCIndexTensor -> Ptr C'THCIndexTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> CDouble -> IO ()
+
+-- | c_IndexLinear_accUpdateGradParameters :  state keys keysOffset values sizes cumSumSizes gradOutput weight bias weightDecay scale -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleIndexLinear_accUpdateGradParameters"
+  c_IndexLinear_accUpdateGradParameters :: Ptr C'THCState -> Ptr C'THCIndexTensor -> CLLong -> Ptr C'THCudaDoubleTensor -> Ptr C'THCIndexTensor -> Ptr C'THCIndexTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> CDouble -> IO ()
+
+-- | c_IndexLinear_updateParameters :  state gradWeight gradBias weight bias runningKeys cumSumSizes keysOffset weightDecay learningRate -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleIndexLinear_updateParameters"
+  c_IndexLinear_updateParameters :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCIndexTensor -> Ptr C'THCIndexTensor -> CLLong -> CDouble -> CDouble -> IO ()
+
+-- | c_SpatialAdaptiveMaxPooling_updateOutput :  state input output indices osizeW osizeH -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleSpatialAdaptiveMaxPooling_updateOutput"
+  c_SpatialAdaptiveMaxPooling_updateOutput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCIndexTensor -> CInt -> CInt -> IO ()
+
+-- | c_SpatialAdaptiveMaxPooling_updateGradInput :  state input gradOutput gradInput indices -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleSpatialAdaptiveMaxPooling_updateGradInput"
+  c_SpatialAdaptiveMaxPooling_updateGradInput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCIndexTensor -> IO ()
+
+-- | c_SpatialAdaptiveAveragePooling_updateOutput :  state input output osizeW osizeH -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleSpatialAdaptiveAveragePooling_updateOutput"
+  c_SpatialAdaptiveAveragePooling_updateOutput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> IO ()
+
+-- | c_SpatialAdaptiveAveragePooling_updateGradInput :  state input gradOutput gradInput -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleSpatialAdaptiveAveragePooling_updateGradInput"
+  c_SpatialAdaptiveAveragePooling_updateGradInput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_SpatialAveragePooling_updateOutput :  state input output kW kH dW dH padW padH ceil_mode count_include_pad -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleSpatialAveragePooling_updateOutput"
+  c_SpatialAveragePooling_updateOutput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CBool -> CBool -> IO ()
+
+-- | c_SpatialAveragePooling_updateGradInput :  state input gradOutput gradInput kW kH dW dH padW padH ceil_mode count_include_pad -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleSpatialAveragePooling_updateGradInput"
+  c_SpatialAveragePooling_updateGradInput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CBool -> CBool -> IO ()
+
+-- | c_SpatialClassNLLCriterion_updateOutput :  state input target output sizeAverage weights total_weight ignore_index reduce -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleSpatialClassNLLCriterion_updateOutput"
+  c_SpatialClassNLLCriterion_updateOutput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCIndexTensor -> Ptr C'THCudaDoubleTensor -> CBool -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CLLong -> CBool -> IO ()
+
+-- | c_SpatialClassNLLCriterion_updateGradInput :  state input target gradOutput gradInput sizeAverage weights total_weight ignore_index reduce -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleSpatialClassNLLCriterion_updateGradInput"
+  c_SpatialClassNLLCriterion_updateGradInput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCIndexTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CBool -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CLLong -> CBool -> IO ()
+
+-- | c_SpatialConvolutionLocal_updateOutput :  state input output weight bias finput fgradInput kW kH dW dH padW padH inputWidth inputHeight outputWidth outputHeight -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleSpatialConvolutionLocal_updateOutput"
+  c_SpatialConvolutionLocal_updateOutput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CLLong -> CLLong -> CLLong -> CLLong -> IO ()
+
+-- | c_SpatialConvolutionLocal_updateGradInput :  state input gradOutput gradInput weight finput fgradInput kW kH dW dH padW padH inputWidth inputHeight outputWidth outputHeight -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleSpatialConvolutionLocal_updateGradInput"
+  c_SpatialConvolutionLocal_updateGradInput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CLLong -> CLLong -> CLLong -> CLLong -> IO ()
+
+-- | c_SpatialConvolutionLocal_accGradParameters :  state input gradOutput gradWeight gradBias finput fgradInput kW kH dW dH padW padH inputWidth inputHeight outputWidth outputHeight scale -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleSpatialConvolutionLocal_accGradParameters"
+  c_SpatialConvolutionLocal_accGradParameters :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CLLong -> CLLong -> CLLong -> CLLong -> CDouble -> IO ()
+
+-- | c_SpatialConvolutionMM_updateOutput :  state input output weight bias columns ones kW kH dW dH padW padH -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleSpatialConvolutionMM_updateOutput"
+  c_SpatialConvolutionMM_updateOutput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> IO ()
+
+-- | c_SpatialConvolutionMM_updateGradInput :  state input gradOutput gradInput weight columns ones kW kH dW dH padW padH -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleSpatialConvolutionMM_updateGradInput"
+  c_SpatialConvolutionMM_updateGradInput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> IO ()
+
+-- | c_SpatialConvolutionMM_accGradParameters :  state input gradOutput gradWeight gradBias columns ones kW kH dW dH padW padH scale -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleSpatialConvolutionMM_accGradParameters"
+  c_SpatialConvolutionMM_accGradParameters :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CDouble -> IO ()
+
+-- | c_SpatialDepthwiseConvolution_updateOutput :  state input output weight bias kW kH dW dH padW padH dilationW dilationH -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleSpatialDepthwiseConvolution_updateOutput"
+  c_SpatialDepthwiseConvolution_updateOutput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> IO ()
+
+-- | c_SpatialDepthwiseConvolution_updateGradInput :  state input gradOutput gradInput weight kW kH dW dH padW padH dilationW dilationH -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleSpatialDepthwiseConvolution_updateGradInput"
+  c_SpatialDepthwiseConvolution_updateGradInput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> IO ()
+
+-- | c_SpatialDepthwiseConvolution_accGradParameters :  state input gradOutput gradWeight kW kH dW dH padW padH dilationW dilationH -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleSpatialDepthwiseConvolution_accGradParameters"
+  c_SpatialDepthwiseConvolution_accGradParameters :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> IO ()
+
+-- | c_SpatialCrossMapLRN_updateOutput :  state input output scale size alpha beta k -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleSpatialCrossMapLRN_updateOutput"
+  c_SpatialCrossMapLRN_updateOutput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CDouble -> CDouble -> CDouble -> IO ()
+
+-- | c_SpatialCrossMapLRN_updateGradInput :  state input gradOutput gradInput scale output size alpha beta k -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleSpatialCrossMapLRN_updateGradInput"
+  c_SpatialCrossMapLRN_updateGradInput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CDouble -> CDouble -> CDouble -> IO ()
+
+-- | c_SpatialDilatedConvolution_updateOutput :  state input output weight bias columns ones kW kH dW dH padW padH dilationW dilationH -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleSpatialDilatedConvolution_updateOutput"
+  c_SpatialDilatedConvolution_updateOutput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> IO ()
+
+-- | c_SpatialDilatedConvolution_updateGradInput :  state input gradOutput gradInput weight columns kW kH dW dH padW padH dilationW dilationH -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleSpatialDilatedConvolution_updateGradInput"
+  c_SpatialDilatedConvolution_updateGradInput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> IO ()
+
+-- | c_SpatialDilatedConvolution_accGradParameters :  state input gradOutput gradWeight gradBias columns ones kW kH dW dH padW padH dilationW dilationH scale -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleSpatialDilatedConvolution_accGradParameters"
+  c_SpatialDilatedConvolution_accGradParameters :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CDouble -> IO ()
+
+-- | c_SpatialFullDilatedConvolution_updateOutput :  state input output weight bias columns ones kW kH dW dH padW padH dilationW dilationH adjW adjH -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleSpatialFullDilatedConvolution_updateOutput"
+  c_SpatialFullDilatedConvolution_updateOutput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> IO ()
+
+-- | c_SpatialFullDilatedConvolution_updateGradInput :  state input gradOutput gradInput weight columns kW kH dW dH padW padH dilationW dilationH adjW adjH -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleSpatialFullDilatedConvolution_updateGradInput"
+  c_SpatialFullDilatedConvolution_updateGradInput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> IO ()
+
+-- | c_SpatialFullDilatedConvolution_accGradParameters :  state input gradOutput gradWeight gradBias columns ones kW kH dW dH padW padH dilationW dilationH adjW adjH scale -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleSpatialFullDilatedConvolution_accGradParameters"
+  c_SpatialFullDilatedConvolution_accGradParameters :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CDouble -> IO ()
+
+-- | c_SpatialDilatedMaxPooling_updateOutput :  state input output indices kW kH dW dH padW padH dilationW dilationH ceil_mode -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleSpatialDilatedMaxPooling_updateOutput"
+  c_SpatialDilatedMaxPooling_updateOutput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCIndexTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CBool -> IO ()
+
+-- | c_SpatialDilatedMaxPooling_updateGradInput :  state input gradOutput gradInput indices kW kH dW dH padW padH dilationW dilationH ceil_mode -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleSpatialDilatedMaxPooling_updateGradInput"
+  c_SpatialDilatedMaxPooling_updateGradInput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCIndexTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CBool -> IO ()
+
+-- | c_SpatialFractionalMaxPooling_updateOutput :  state input output outputW outputH poolSizeW poolSizeH indices randomSamples -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleSpatialFractionalMaxPooling_updateOutput"
+  c_SpatialFractionalMaxPooling_updateOutput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> CInt -> Ptr C'THCIndexTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_SpatialFractionalMaxPooling_updateGradInput :  state input gradOutput gradInput outputW outputH poolSizeW poolSizeH indices -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleSpatialFractionalMaxPooling_updateGradInput"
+  c_SpatialFractionalMaxPooling_updateGradInput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> CInt -> Ptr C'THCIndexTensor -> IO ()
+
+-- | c_SpatialFullConvolution_updateOutput :  state input output weight bias columns ones kW kH dW dH padW padH adjW adjH -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleSpatialFullConvolution_updateOutput"
+  c_SpatialFullConvolution_updateOutput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> IO ()
+
+-- | c_SpatialFullConvolution_updateGradInput :  state input gradOutput gradInput weight columns kW kH dW dH padW padH adjW adjH -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleSpatialFullConvolution_updateGradInput"
+  c_SpatialFullConvolution_updateGradInput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> IO ()
+
+-- | c_SpatialFullConvolution_accGradParameters :  state input gradOutput gradWeight gradBias columns ones kW kH dW dH padW padH adjW adjH scale -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleSpatialFullConvolution_accGradParameters"
+  c_SpatialFullConvolution_accGradParameters :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CDouble -> IO ()
+
+-- | c_SpatialMaxPooling_updateOutput :  state input output indices kW kH dW dH padW padH ceil_mode -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleSpatialMaxPooling_updateOutput"
+  c_SpatialMaxPooling_updateOutput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCIndexTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CBool -> IO ()
+
+-- | c_SpatialMaxPooling_updateGradInput :  state input gradOutput gradInput indices kW kH dW dH padW padH ceil_mode -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleSpatialMaxPooling_updateGradInput"
+  c_SpatialMaxPooling_updateGradInput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCIndexTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CBool -> IO ()
+
+-- | c_SpatialMaxUnpooling_updateOutput :  state input output indices owidth oheight -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleSpatialMaxUnpooling_updateOutput"
+  c_SpatialMaxUnpooling_updateOutput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCIndexTensor -> CInt -> CInt -> IO ()
+
+-- | c_SpatialMaxUnpooling_updateGradInput :  state input gradOutput gradInput indices owidth oheight -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleSpatialMaxUnpooling_updateGradInput"
+  c_SpatialMaxUnpooling_updateGradInput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCIndexTensor -> CInt -> CInt -> IO ()
+
+-- | c_SpatialReflectionPadding_updateOutput :  state input output padL padR padT padB -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleSpatialReflectionPadding_updateOutput"
+  c_SpatialReflectionPadding_updateOutput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> CInt -> IO ()
+
+-- | c_SpatialReflectionPadding_updateGradInput :  state input gradOutput gradInput padL padR padT padB -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleSpatialReflectionPadding_updateGradInput"
+  c_SpatialReflectionPadding_updateGradInput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> CInt -> IO ()
+
+-- | c_SpatialReplicationPadding_updateOutput :  state input output padL padR padT padB -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleSpatialReplicationPadding_updateOutput"
+  c_SpatialReplicationPadding_updateOutput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> CInt -> IO ()
+
+-- | c_SpatialReplicationPadding_updateGradInput :  state input gradOutput gradInput padL padR padT padB -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleSpatialReplicationPadding_updateGradInput"
+  c_SpatialReplicationPadding_updateGradInput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> CInt -> IO ()
+
+-- | c_SpatialSubSampling_updateOutput :  state input output weight bias kW kH dW dH -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleSpatialSubSampling_updateOutput"
+  c_SpatialSubSampling_updateOutput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> CInt -> IO ()
+
+-- | c_SpatialSubSampling_updateGradInput :  state input gradOutput gradInput weight kW kH dW dH -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleSpatialSubSampling_updateGradInput"
+  c_SpatialSubSampling_updateGradInput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> CInt -> IO ()
+
+-- | c_SpatialSubSampling_accGradParameters :  state input gradOutput gradWeight gradBias kW kH dW dH scale -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleSpatialSubSampling_accGradParameters"
+  c_SpatialSubSampling_accGradParameters :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> CInt -> CDouble -> IO ()
+
+-- | c_SpatialUpSamplingBilinear_updateOutput :  state input output outputHeight outputWidth -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleSpatialUpSamplingBilinear_updateOutput"
+  c_SpatialUpSamplingBilinear_updateOutput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> IO ()
+
+-- | c_SpatialUpSamplingBilinear_updateGradInput :  state gradOutput gradInput nbatch nchannels inputHeight inputWidth outputHeight outputWidth -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleSpatialUpSamplingBilinear_updateGradInput"
+  c_SpatialUpSamplingBilinear_updateGradInput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> IO ()
+
+-- | c_SpatialUpSamplingNearest_updateGradInput :  state input gradOutput gradInput scale_factor -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleSpatialUpSamplingNearest_updateGradInput"
+  c_SpatialUpSamplingNearest_updateGradInput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> IO ()
+
+-- | c_SpatialUpSamplingNearest_updateOutput :  state input output scale_factor -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleSpatialUpSamplingNearest_updateOutput"
+  c_SpatialUpSamplingNearest_updateOutput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> IO ()
+
+-- | c_SpatialGridSamplerBilinear_updateOutput :  state input grid output padding_mode -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleSpatialGridSamplerBilinear_updateOutput"
+  c_SpatialGridSamplerBilinear_updateOutput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> IO ()
+
+-- | c_SpatialGridSamplerBilinear_updateGradInput :  state input gradInput grid gradGrid gradOutput padding_mode -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleSpatialGridSamplerBilinear_updateGradInput"
+  c_SpatialGridSamplerBilinear_updateGradInput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> IO ()
+
+-- | c_VolumetricGridSamplerBilinear_updateOutput :  state input grid output padding_mode -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleVolumetricGridSamplerBilinear_updateOutput"
+  c_VolumetricGridSamplerBilinear_updateOutput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> IO ()
+
+-- | c_VolumetricGridSamplerBilinear_updateGradInput :  state input gradInput grid gradGrid gradOutput padding_mode -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleVolumetricGridSamplerBilinear_updateGradInput"
+  c_VolumetricGridSamplerBilinear_updateGradInput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> IO ()
+
+-- | c_RReLU_updateOutput :  state input output noise lower upper train inplace generator -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleRReLU_updateOutput"
+  c_RReLU_updateOutput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> CDouble -> CBool -> CBool -> Ptr () -> IO ()
+
+-- | c_RReLU_updateGradInput :  state input gradOutput gradInput noise lower upper train inplace -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleRReLU_updateGradInput"
+  c_RReLU_updateGradInput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> CDouble -> CBool -> CBool -> IO ()
+
+-- | c_Sigmoid_updateOutput :  state input output -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleSigmoid_updateOutput"
+  c_Sigmoid_updateOutput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_Sigmoid_updateGradInput :  state gradOutput gradInput output -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleSigmoid_updateGradInput"
+  c_Sigmoid_updateGradInput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_SoftMarginCriterion_updateOutput :  state input target output sizeAverage reduce -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleSoftMarginCriterion_updateOutput"
+  c_SoftMarginCriterion_updateOutput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CBool -> CBool -> IO ()
+
+-- | c_SoftMarginCriterion_updateGradInput :  state input target gradOutput gradInput sizeAverage reduce -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleSoftMarginCriterion_updateGradInput"
+  c_SoftMarginCriterion_updateGradInput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CBool -> CBool -> IO ()
+
+-- | c_SoftMax_updateOutput :  state input output dim -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleSoftMax_updateOutput"
+  c_SoftMax_updateOutput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> IO ()
+
+-- | c_SoftMax_updateGradInput :  state input gradOutput gradInput output dim -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleSoftMax_updateGradInput"
+  c_SoftMax_updateGradInput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> IO ()
+
+-- | c_SoftPlus_updateOutput :  state input output beta threshold -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleSoftPlus_updateOutput"
+  c_SoftPlus_updateOutput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> CDouble -> IO ()
+
+-- | c_SoftPlus_updateGradInput :  state input gradOutput gradInput output beta threshold -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleSoftPlus_updateGradInput"
+  c_SoftPlus_updateGradInput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> CDouble -> IO ()
+
+-- | c_SoftShrink_updateOutput :  state input output lambda -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleSoftShrink_updateOutput"
+  c_SoftShrink_updateOutput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> IO ()
+
+-- | c_SoftShrink_updateGradInput :  state input gradOutput gradInput lambda -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleSoftShrink_updateGradInput"
+  c_SoftShrink_updateGradInput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> IO ()
+
+-- | c_Square_updateOutput :  state input output -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleSquare_updateOutput"
+  c_Square_updateOutput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_Square_updateGradInput :  state input gradOutput gradInput -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleSquare_updateGradInput"
+  c_Square_updateGradInput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_Sqrt_updateOutput :  state input output eps -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleSqrt_updateOutput"
+  c_Sqrt_updateOutput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> IO ()
+
+-- | c_Sqrt_updateGradInput :  state input gradOutput gradInput output -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleSqrt_updateGradInput"
+  c_Sqrt_updateGradInput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_Tanh_updateOutput :  state input output -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleTanh_updateOutput"
+  c_Tanh_updateOutput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_Tanh_updateGradInput :  state gradOutput gradInput output -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleTanh_updateGradInput"
+  c_Tanh_updateGradInput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_TemporalConvolution_updateOutput :  state input output weight bias kW dW inputFrameSize outputFrameSize -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleTemporalConvolution_updateOutput"
+  c_TemporalConvolution_updateOutput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> CInt -> IO ()
+
+-- | c_TemporalConvolution_updateGradInput :  state input gradOutput gradInput weight kW dW -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleTemporalConvolution_updateGradInput"
+  c_TemporalConvolution_updateGradInput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> IO ()
+
+-- | c_TemporalConvolution_accGradParameters :  state input gradOutput gradWeight gradBias kW dW scale -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleTemporalConvolution_accGradParameters"
+  c_TemporalConvolution_accGradParameters :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CDouble -> IO ()
+
+-- | c_TemporalMaxPooling_updateOutput :  state input output indices kW dW -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleTemporalMaxPooling_updateOutput"
+  c_TemporalMaxPooling_updateOutput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCIndexTensor -> CInt -> CInt -> IO ()
+
+-- | c_TemporalMaxPooling_updateGradInput :  state input gradOutput gradInput indices kW dW -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleTemporalMaxPooling_updateGradInput"
+  c_TemporalMaxPooling_updateGradInput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCIndexTensor -> CInt -> CInt -> IO ()
+
+-- | c_TemporalRowConvolution_updateOutput :  state input output weight bias finput fgradInput kW dW padW featFirst -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleTemporalRowConvolution_updateOutput"
+  c_TemporalRowConvolution_updateOutput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> CBool -> IO ()
+
+-- | c_TemporalRowConvolution_updateGradInput :  state input gradOutput gradInput weight finput fgradInput kW dW padW featFirst -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleTemporalRowConvolution_updateGradInput"
+  c_TemporalRowConvolution_updateGradInput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> CBool -> IO ()
+
+-- | c_TemporalRowConvolution_accGradParameters :  state input gradOutput gradWeight gradBias finput fgradInput kW dW padW featFirst scale -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleTemporalRowConvolution_accGradParameters"
+  c_TemporalRowConvolution_accGradParameters :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> CBool -> CDouble -> IO ()
+
+-- | c_TemporalReflectionPadding_updateOutput :  state input output padL padR -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleTemporalReflectionPadding_updateOutput"
+  c_TemporalReflectionPadding_updateOutput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> IO ()
+
+-- | c_TemporalReflectionPadding_updateGradInput :  state input gradOutput gradInput padL padR -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleTemporalReflectionPadding_updateGradInput"
+  c_TemporalReflectionPadding_updateGradInput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> IO ()
+
+-- | c_TemporalReplicationPadding_updateOutput :  state input output padL padR -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleTemporalReplicationPadding_updateOutput"
+  c_TemporalReplicationPadding_updateOutput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> IO ()
+
+-- | c_TemporalReplicationPadding_updateGradInput :  state input gradOutput gradInput padL padR -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleTemporalReplicationPadding_updateGradInput"
+  c_TemporalReplicationPadding_updateGradInput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> IO ()
+
+-- | c_TemporalUpSamplingLinear_updateOutput :  state input output outputWidth -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleTemporalUpSamplingLinear_updateOutput"
+  c_TemporalUpSamplingLinear_updateOutput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> IO ()
+
+-- | c_TemporalUpSamplingLinear_updateGradInput :  state gradOutput gradInput nbatch nchannels inputWidth outputWidth -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleTemporalUpSamplingLinear_updateGradInput"
+  c_TemporalUpSamplingLinear_updateGradInput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> CInt -> IO ()
+
+-- | c_TemporalUpSamplingNearest_updateGradInput :  state input gradOutput gradInput scale_factor -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleTemporalUpSamplingNearest_updateGradInput"
+  c_TemporalUpSamplingNearest_updateGradInput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> IO ()
+
+-- | c_TemporalUpSamplingNearest_updateOutput :  state input output scale_factor -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleTemporalUpSamplingNearest_updateOutput"
+  c_TemporalUpSamplingNearest_updateOutput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> IO ()
+
+-- | c_Threshold_updateOutput :  state input output threshold val inplace -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleThreshold_updateOutput"
+  c_Threshold_updateOutput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> CDouble -> CBool -> IO ()
+
+-- | c_Threshold_updateGradInput :  state input gradOutput gradInput threshold val inplace -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleThreshold_updateGradInput"
+  c_Threshold_updateGradInput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> CDouble -> CBool -> IO ()
+
+-- | c_VolumetricAveragePooling_updateOutput :  state input output kT kW kH dT dW dH padT padW padH ceil_mode count_include_pad -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleVolumetricAveragePooling_updateOutput"
+  c_VolumetricAveragePooling_updateOutput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CBool -> CBool -> IO ()
+
+-- | c_VolumetricAveragePooling_updateGradInput :  state input gradOutput gradInput kT kW kH dT dW dH padT padW padH ceil_mode count_include_pad -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleVolumetricAveragePooling_updateGradInput"
+  c_VolumetricAveragePooling_updateGradInput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CBool -> CBool -> IO ()
+
+-- | c_VolumetricConvolution_updateOutput :  state input output weight bias finput fgradInput dT dW dH padT padW padH -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleVolumetricConvolution_updateOutput"
+  c_VolumetricConvolution_updateOutput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> IO ()
+
+-- | c_VolumetricConvolution_updateGradInput :  state input gradOutput gradInput weight finput dT dW dH padT padW padH -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleVolumetricConvolution_updateGradInput"
+  c_VolumetricConvolution_updateGradInput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> IO ()
+
+-- | c_VolumetricConvolution_accGradParameters :  state input gradOutput gradWeight gradBias finput fgradInput dT dW dH padT padW padH scale -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleVolumetricConvolution_accGradParameters"
+  c_VolumetricConvolution_accGradParameters :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CDouble -> IO ()
+
+-- | c_VolumetricDilatedConvolution_updateOutput :  state input output weight bias columns ones kT kW kH dT dW dH padT padW padH dilationT dilationW dilationH -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleVolumetricDilatedConvolution_updateOutput"
+  c_VolumetricDilatedConvolution_updateOutput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> IO ()
+
+-- | c_VolumetricDilatedConvolution_updateGradInput :  state input gradOutput gradInput weight columns kT kW kH dT dW dH padT padW padH dilationT dilationW dilationH -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleVolumetricDilatedConvolution_updateGradInput"
+  c_VolumetricDilatedConvolution_updateGradInput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> IO ()
+
+-- | c_VolumetricDilatedConvolution_accGradParameters :  state input gradOutput gradWeight gradBias columns ones kT kW kH dT dW dH padT padW padH dilationT dilationW dilationH scale -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleVolumetricDilatedConvolution_accGradParameters"
+  c_VolumetricDilatedConvolution_accGradParameters :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CDouble -> IO ()
+
+-- | c_VolumetricFullDilatedConvolution_updateOutput :  state input output weight bias finput fgradInput kT kW kH dT dW dH padT padW padH dilationT dilationW dilationH adjT adjW adjH -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleVolumetricFullDilatedConvolution_updateOutput"
+  c_VolumetricFullDilatedConvolution_updateOutput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> IO ()
+
+-- | c_VolumetricFullDilatedConvolution_updateGradInput :  state input gradOutput gradInput weight finput fgradInput kT kW kH dT dW dH padT padW padH dilationT dilationW dilationH adjT adjW adjH -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleVolumetricFullDilatedConvolution_updateGradInput"
+  c_VolumetricFullDilatedConvolution_updateGradInput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> IO ()
+
+-- | c_VolumetricFullDilatedConvolution_accGradParameters :  state input gradOutput gradWeight gradBias finput fgradInput kT kW kH dT dW dH padT padW padH dilationT dilationW dilationH adjT adjW adjH scale -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleVolumetricFullDilatedConvolution_accGradParameters"
+  c_VolumetricFullDilatedConvolution_accGradParameters :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CDouble -> IO ()
+
+-- | c_VolumetricDilatedMaxPooling_updateOutput :  state input output indices kT kW kH dT dW dH padT padW padH dilationT dilationW dilationH ceilMode -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleVolumetricDilatedMaxPooling_updateOutput"
+  c_VolumetricDilatedMaxPooling_updateOutput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCIndexTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CBool -> IO ()
+
+-- | c_VolumetricDilatedMaxPooling_updateGradInput :  state input gradOutput gradInput indices kT kW kH dT dW dH padT padW padH dilationT dilationW dilationH ceilMode -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleVolumetricDilatedMaxPooling_updateGradInput"
+  c_VolumetricDilatedMaxPooling_updateGradInput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCIndexTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CBool -> IO ()
+
+-- | c_VolumetricFractionalMaxPooling_updateOutput :  state input output outputT outputW outputH poolSizeT poolSizeW poolSizeH indices randomSamples -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleVolumetricFractionalMaxPooling_updateOutput"
+  c_VolumetricFractionalMaxPooling_updateOutput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> Ptr C'THCIndexTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_VolumetricFractionalMaxPooling_updateGradInput :  state input gradOutput gradInput outputT outputW outputH poolSizeT poolSizeW poolSizeH indices -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleVolumetricFractionalMaxPooling_updateGradInput"
+  c_VolumetricFractionalMaxPooling_updateGradInput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> Ptr C'THCIndexTensor -> IO ()
+
+-- | c_VolumetricFullConvolution_updateOutput :  state input output weight bias finput fgradInput kT kW kH dT dW dH padT padW padH adjT adjW adjH -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleVolumetricFullConvolution_updateOutput"
+  c_VolumetricFullConvolution_updateOutput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> IO ()
+
+-- | c_VolumetricFullConvolution_updateGradInput :  state input gradOutput gradInput weight finput fgradInput kT kW kH dT dW dH padT padW padH adjT adjW adjH -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleVolumetricFullConvolution_updateGradInput"
+  c_VolumetricFullConvolution_updateGradInput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> IO ()
+
+-- | c_VolumetricFullConvolution_accGradParameters :  state input gradOutput gradWeight gradBias finput fgradInput kT kW kH dT dW dH padT padW padH adjT adjW adjH scale -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleVolumetricFullConvolution_accGradParameters"
+  c_VolumetricFullConvolution_accGradParameters :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CDouble -> IO ()
+
+-- | c_VolumetricMaxPooling_updateOutput :  state input output indices kT kW kH dT dW dH padT padW padH ceilMode -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleVolumetricMaxPooling_updateOutput"
+  c_VolumetricMaxPooling_updateOutput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCIndexTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CBool -> IO ()
+
+-- | c_VolumetricMaxPooling_updateGradInput :  state input gradOutput gradInput indices kT kW kH dT dW dH padT padW padH ceilMode -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleVolumetricMaxPooling_updateGradInput"
+  c_VolumetricMaxPooling_updateGradInput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCIndexTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CBool -> IO ()
+
+-- | c_VolumetricMaxUnpooling_updateOutput :  state input output indices outputTime outputWidth outputHeight dT dW dH padT padW padH -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleVolumetricMaxUnpooling_updateOutput"
+  c_VolumetricMaxUnpooling_updateOutput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCIndexTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> IO ()
+
+-- | c_VolumetricMaxUnpooling_updateGradInput :  state input gradOutput gradInput indices outputTime outputWidth outputHeight dT dW dH padT padW padH -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleVolumetricMaxUnpooling_updateGradInput"
+  c_VolumetricMaxUnpooling_updateGradInput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCIndexTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> IO ()
+
+-- | c_VolumetricAdaptiveMaxPooling_updateOutput :  state input output indices osizeT osizeW osizeH -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleVolumetricAdaptiveMaxPooling_updateOutput"
+  c_VolumetricAdaptiveMaxPooling_updateOutput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCIndexTensor -> CInt -> CInt -> CInt -> IO ()
+
+-- | c_VolumetricAdaptiveMaxPooling_updateGradInput :  state input gradOutput gradInput indices -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleVolumetricAdaptiveMaxPooling_updateGradInput"
+  c_VolumetricAdaptiveMaxPooling_updateGradInput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCIndexTensor -> IO ()
+
+-- | c_VolumetricAdaptiveAveragePooling_updateOutput :  state input output osizeT osizeW osizeH -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleVolumetricAdaptiveAveragePooling_updateOutput"
+  c_VolumetricAdaptiveAveragePooling_updateOutput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> IO ()
+
+-- | c_VolumetricAdaptiveAveragePooling_updateGradInput :  state input gradOutput gradInput -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleVolumetricAdaptiveAveragePooling_updateGradInput"
+  c_VolumetricAdaptiveAveragePooling_updateGradInput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_VolumetricReplicationPadding_updateOutput :  state input output pleft pright ptop pbottom pfront pback -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleVolumetricReplicationPadding_updateOutput"
+  c_VolumetricReplicationPadding_updateOutput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> IO ()
+
+-- | c_VolumetricReplicationPadding_updateGradInput :  state input gradOutput gradInput pleft pright ptop pbottom pfront pback -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleVolumetricReplicationPadding_updateGradInput"
+  c_VolumetricReplicationPadding_updateGradInput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> IO ()
+
+-- | c_VolumetricUpSamplingNearest_updateGradInput :  state input gradOutput gradInput scale_factor -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleVolumetricUpSamplingNearest_updateGradInput"
+  c_VolumetricUpSamplingNearest_updateGradInput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> IO ()
+
+-- | c_VolumetricUpSamplingNearest_updateOutput :  state input output scale_factor -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleVolumetricUpSamplingNearest_updateOutput"
+  c_VolumetricUpSamplingNearest_updateOutput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> IO ()
+
+-- | c_VolumetricUpSamplingTrilinear_updateOutput :  state input output outputDepth outputHeight outputWidth -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleVolumetricUpSamplingTrilinear_updateOutput"
+  c_VolumetricUpSamplingTrilinear_updateOutput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> IO ()
+
+-- | c_VolumetricUpSamplingTrilinear_updateGradInput :  state gradOutput gradInput nbatch nchannels inputDepth inputHeight inputWidth outputDepth outputHeight outputWidth -> void
+foreign import ccall "THCUNN.h THNN_CudaDoubleVolumetricUpSamplingTrilinear_updateGradInput"
+  c_VolumetricUpSamplingTrilinear_updateGradInput :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> IO ()
+
+-- | p_Abs_updateOutput : Pointer to function : state input output -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleAbs_updateOutput"
+  p_Abs_updateOutput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_Abs_updateGradInput : Pointer to function : state input gradOutput gradInput -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleAbs_updateGradInput"
+  p_Abs_updateGradInput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_AbsCriterion_updateOutput : Pointer to function : state input target output sizeAverage reduce -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleAbsCriterion_updateOutput"
+  p_AbsCriterion_updateOutput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CBool -> CBool -> IO ())
+
+-- | p_AbsCriterion_updateGradInput : Pointer to function : state input target gradOutput gradInput sizeAverage reduce -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleAbsCriterion_updateGradInput"
+  p_AbsCriterion_updateGradInput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CBool -> CBool -> IO ())
+
+-- | p_BatchNormalization_updateOutput : Pointer to function : state input_ output_ weight_ bias_ runningMean_ runningVar_ saveMean_ saveStd_ train momentum eps -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleBatchNormalization_updateOutput"
+  p_BatchNormalization_updateOutput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CBool -> CDouble -> CDouble -> IO ())
+
+-- | p_BatchNormalization_backward : Pointer to function : state input_ gradOutput_ gradInput_ gradWeight_ gradBias_ weight_ runningMean_ runningVar_ saveMean_ saveStd_ train scale eps -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleBatchNormalization_backward"
+  p_BatchNormalization_backward :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CBool -> CDouble -> CDouble -> IO ())
+
+-- | p_BCECriterion_updateOutput : Pointer to function : state input target output sizeAverage weights reduce -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleBCECriterion_updateOutput"
+  p_BCECriterion_updateOutput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CBool -> Ptr C'THCudaDoubleTensor -> CBool -> IO ())
+
+-- | p_BCECriterion_updateGradInput : Pointer to function : state input target gradOutput gradInput sizeAverage weights reduce -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleBCECriterion_updateGradInput"
+  p_BCECriterion_updateGradInput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CBool -> Ptr C'THCudaDoubleTensor -> CBool -> IO ())
+
+-- | p_ClassNLLCriterion_updateOutput : Pointer to function : state input target output sizeAverage weights total_weight ignore_index reduce -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleClassNLLCriterion_updateOutput"
+  p_ClassNLLCriterion_updateOutput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCIndexTensor -> Ptr C'THCudaDoubleTensor -> CBool -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CLLong -> CBool -> IO ())
+
+-- | p_ClassNLLCriterion_updateGradInput : Pointer to function : state input target gradOutput gradInput sizeAverage weights total_weight ignore_index reduce -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleClassNLLCriterion_updateGradInput"
+  p_ClassNLLCriterion_updateGradInput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCIndexTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CBool -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CLLong -> CBool -> IO ())
+
+-- | p_DistKLDivCriterion_updateOutput : Pointer to function : state input target output sizeAverage reduce -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleDistKLDivCriterion_updateOutput"
+  p_DistKLDivCriterion_updateOutput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CBool -> CBool -> IO ())
+
+-- | p_DistKLDivCriterion_updateGradInput : Pointer to function : state input target gradOutput gradInput sizeAverage reduce -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleDistKLDivCriterion_updateGradInput"
+  p_DistKLDivCriterion_updateGradInput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CBool -> CBool -> IO ())
+
+-- | p_ELU_updateOutput : Pointer to function : state input output alpha scale inplace -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleELU_updateOutput"
+  p_ELU_updateOutput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> CDouble -> CBool -> IO ())
+
+-- | p_ELU_updateGradInput : Pointer to function : state gradOutput gradInput output alpha scale -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleELU_updateGradInput"
+  p_ELU_updateGradInput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> CDouble -> IO ())
+
+-- | p_FeatureLPPooling_updateOutput : Pointer to function : state inputTH outputTH power width stride batchMode -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleFeatureLPPooling_updateOutput"
+  p_FeatureLPPooling_updateOutput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> CInt -> CInt -> CBool -> IO ())
+
+-- | p_FeatureLPPooling_updateGradInput : Pointer to function : state gradOutputTH inputTH outputTH gradInputTH power width stride batchMode -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleFeatureLPPooling_updateGradInput"
+  p_FeatureLPPooling_updateGradInput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> CInt -> CInt -> CBool -> IO ())
+
+-- | p_HardTanh_updateOutput : Pointer to function : state input output min_val max_val inplace -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleHardTanh_updateOutput"
+  p_HardTanh_updateOutput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> CDouble -> CBool -> IO ())
+
+-- | p_HardTanh_updateGradInput : Pointer to function : state input gradOutput gradInput min_val max_val inplace -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleHardTanh_updateGradInput"
+  p_HardTanh_updateGradInput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> CDouble -> CBool -> IO ())
+
+-- | p_GatedLinear_updateOutput : Pointer to function : state input output dim -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleGatedLinear_updateOutput"
+  p_GatedLinear_updateOutput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> IO ())
+
+-- | p_GatedLinear_updateGradInput : Pointer to function : state input gradOutput gradInput dim -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleGatedLinear_updateGradInput"
+  p_GatedLinear_updateGradInput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> IO ())
+
+-- | p_Im2Col_updateOutput : Pointer to function : state input output kH kW dH dW padH padW sH sW -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleIm2Col_updateOutput"
+  p_Im2Col_updateOutput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> IO ())
+
+-- | p_Im2Col_updateGradInput : Pointer to function : state gradOutput gradInput inputHeight inputWidth kH kW dH dW padH padW sH sW -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleIm2Col_updateGradInput"
+  p_Im2Col_updateGradInput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> IO ())
+
+-- | p_Col2Im_updateOutput : Pointer to function : state input output outputHeight outputWidth kH kW dH dW padH padW sH sW -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleCol2Im_updateOutput"
+  p_Col2Im_updateOutput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> IO ())
+
+-- | p_Col2Im_updateGradInput : Pointer to function : state gradOutput gradInput kH kW dH dW padH padW sH sW -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleCol2Im_updateGradInput"
+  p_Col2Im_updateGradInput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> IO ())
+
+-- | p_LeakyReLU_updateOutput : Pointer to function : state input output negval inplace -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleLeakyReLU_updateOutput"
+  p_LeakyReLU_updateOutput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> CBool -> IO ())
+
+-- | p_LeakyReLU_updateGradInput : Pointer to function : state input gradOutput gradInput negval inplace -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleLeakyReLU_updateGradInput"
+  p_LeakyReLU_updateGradInput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> CBool -> IO ())
+
+-- | p_GRUFused_updateOutput : Pointer to function : state input hidden bias1 bias2 hx hy storage -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleGRUFused_updateOutput"
+  p_GRUFused_updateOutput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_GRUFused_updateGradInput : Pointer to function : state gradInInput gradInHidden gradOutput gradInputHx storage -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleGRUFused_updateGradInput"
+  p_GRUFused_updateGradInput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_LSTMFused_updateOutput : Pointer to function : state input hidden bias1 bias2 cx hy cy -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleLSTMFused_updateOutput"
+  p_LSTMFused_updateOutput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_LSTMFused_updateGradInput : Pointer to function : state storage gradInGates prevC cy gradOutput gradOutputCell gradInputCx -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleLSTMFused_updateGradInput"
+  p_LSTMFused_updateGradInput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_LogSigmoid_updateOutput : Pointer to function : state input output buffer -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleLogSigmoid_updateOutput"
+  p_LogSigmoid_updateOutput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_LogSigmoid_updateGradInput : Pointer to function : state input gradOutput gradInput buffer -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleLogSigmoid_updateGradInput"
+  p_LogSigmoid_updateGradInput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_LogSoftMax_updateOutput : Pointer to function : state input output dim -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleLogSoftMax_updateOutput"
+  p_LogSoftMax_updateOutput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> IO ())
+
+-- | p_LogSoftMax_updateGradInput : Pointer to function : state input gradOutput gradInput output dim -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleLogSoftMax_updateGradInput"
+  p_LogSoftMax_updateGradInput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> IO ())
+
+-- | p_LookupTable_accGradParameters : Pointer to function : state input gradOutput gradWeight count sorted indices scaleGradByFreq paddingValue scale -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleLookupTable_accGradParameters"
+  p_LookupTable_accGradParameters :: FunPtr (Ptr C'THCState -> Ptr C'THCIndexTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCIndexTensor -> Ptr C'THCIndexTensor -> Ptr C'THCIndexTensor -> CBool -> CInt -> CDouble -> IO ())
+
+-- | p_LookupTable_renorm : Pointer to function : state idx weight maxNorm normType -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleLookupTable_renorm"
+  p_LookupTable_renorm :: FunPtr (Ptr C'THCState -> Ptr C'THCIndexTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> CDouble -> IO ())
+
+-- | p_LookupTableBag_updateOutput : Pointer to function : state input offsets weight output offset2bag mode seq_length -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleLookupTableBag_updateOutput"
+  p_LookupTableBag_updateOutput :: FunPtr (Ptr C'THCState -> Ptr C'THCIndexTensor -> Ptr C'THCIndexTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCIndexTensor -> CInt -> Ptr C'THCIndexTensor -> IO ())
+
+-- | p_LookupTableBag_accGradParameters : Pointer to function : state input gradOutput gradWeight offset2bag count sortedIndices origIndices scaleGradByFreq mode seq_length scale_ -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleLookupTableBag_accGradParameters"
+  p_LookupTableBag_accGradParameters :: FunPtr (Ptr C'THCState -> Ptr C'THCIndexTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCIndexTensor -> Ptr C'THCIndexTensor -> Ptr C'THCIndexTensor -> Ptr C'THCIndexTensor -> CBool -> CInt -> Ptr C'THCIndexTensor -> CDouble -> IO ())
+
+-- | p_L1Cost_updateOutput : Pointer to function : state input output -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleL1Cost_updateOutput"
+  p_L1Cost_updateOutput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_L1Cost_updateGradInput : Pointer to function : state input gradOutput gradInput -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleL1Cost_updateGradInput"
+  p_L1Cost_updateGradInput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_MarginCriterion_updateOutput : Pointer to function : state input target output sizeAverage margin -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleMarginCriterion_updateOutput"
+  p_MarginCriterion_updateOutput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CBool -> CDouble -> IO ())
+
+-- | p_MarginCriterion_updateGradInput : Pointer to function : state input target gradInput sizeAverage margin -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleMarginCriterion_updateGradInput"
+  p_MarginCriterion_updateGradInput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CBool -> CDouble -> IO ())
+
+-- | p_MSECriterion_updateOutput : Pointer to function : state input target output sizeAverage reduce -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleMSECriterion_updateOutput"
+  p_MSECriterion_updateOutput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CBool -> CBool -> IO ())
+
+-- | p_MSECriterion_updateGradInput : Pointer to function : state input target gradOutput gradInput sizeAverage reduce -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleMSECriterion_updateGradInput"
+  p_MSECriterion_updateGradInput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CBool -> CBool -> IO ())
+
+-- | p_MultiLabelMarginCriterion_updateOutput : Pointer to function : state input target output istarget sizeaverage reduce -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleMultiLabelMarginCriterion_updateOutput"
+  p_MultiLabelMarginCriterion_updateOutput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCIndexTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CBool -> CBool -> IO ())
+
+-- | p_MultiLabelMarginCriterion_updateGradInput : Pointer to function : state input target gradOutput gradInput istarget sizeaverage reduce -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleMultiLabelMarginCriterion_updateGradInput"
+  p_MultiLabelMarginCriterion_updateGradInput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCIndexTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CBool -> CBool -> IO ())
+
+-- | p_MultiMarginCriterion_updateOutput : Pointer to function : state input target output sizeAverage p weights margin reduce -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleMultiMarginCriterion_updateOutput"
+  p_MultiMarginCriterion_updateOutput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCIndexTensor -> Ptr C'THCudaDoubleTensor -> CBool -> CInt -> Ptr C'THCudaDoubleTensor -> CDouble -> CBool -> IO ())
+
+-- | p_MultiMarginCriterion_updateGradInput : Pointer to function : state input target gradOutput gradInput sizeAverage p weights margin reduce -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleMultiMarginCriterion_updateGradInput"
+  p_MultiMarginCriterion_updateGradInput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCIndexTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CBool -> CInt -> Ptr C'THCudaDoubleTensor -> CDouble -> CBool -> IO ())
+
+-- | p_PReLU_updateOutput : Pointer to function : state input output weight -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoublePReLU_updateOutput"
+  p_PReLU_updateOutput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_PReLU_updateGradInput : Pointer to function : state input gradOutput gradInput weight -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoublePReLU_updateGradInput"
+  p_PReLU_updateGradInput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_PReLU_accGradParameters : Pointer to function : state input gradOutput gradInput weight gradWeight scale -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoublePReLU_accGradParameters"
+  p_PReLU_accGradParameters :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> IO ())
+
+-- | p_SmoothL1Criterion_updateOutput : Pointer to function : state input target output sizeAverage reduce -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleSmoothL1Criterion_updateOutput"
+  p_SmoothL1Criterion_updateOutput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CBool -> CBool -> IO ())
+
+-- | p_SmoothL1Criterion_updateGradInput : Pointer to function : state input target gradOutput gradInput sizeAverage reduce -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleSmoothL1Criterion_updateGradInput"
+  p_SmoothL1Criterion_updateGradInput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CBool -> CBool -> IO ())
+
+-- | p_SparseLinear_updateOutput : Pointer to function : state input output weight bias -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleSparseLinear_updateOutput"
+  p_SparseLinear_updateOutput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_SparseLinear_accGradParameters : Pointer to function : state input gradOutput gradWeight gradBias weight bias weightDecay scale -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleSparseLinear_accGradParameters"
+  p_SparseLinear_accGradParameters :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> CDouble -> IO ())
+
+-- | p_SparseLinear_legacyUpdateOutput : Pointer to function : state input output weight bias -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleSparseLinear_legacyUpdateOutput"
+  p_SparseLinear_legacyUpdateOutput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_SparseLinear_legacyAccGradParameters : Pointer to function : state input gradOutput gradWeight gradBias weight bias weightDecay scale -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleSparseLinear_legacyAccGradParameters"
+  p_SparseLinear_legacyAccGradParameters :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> CDouble -> IO ())
+
+-- | p_SparseLinear_zeroGradParameters : Pointer to function : state gradWeight gradBias lastInput -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleSparseLinear_zeroGradParameters"
+  p_SparseLinear_zeroGradParameters :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_SparseLinear_updateParameters : Pointer to function : state weight bias gradWeight gradBias lastInput learningRate -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleSparseLinear_updateParameters"
+  p_SparseLinear_updateParameters :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> IO ())
+
+-- | p_IndexLinear_updateOutput : Pointer to function : state keys keysOffset values sizes cumSumSizes output weight bias normalizedValues train -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleIndexLinear_updateOutput"
+  p_IndexLinear_updateOutput :: FunPtr (Ptr C'THCState -> Ptr C'THCIndexTensor -> CLLong -> Ptr C'THCudaDoubleTensor -> Ptr C'THCIndexTensor -> Ptr C'THCIndexTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> IO ())
+
+-- | p_IndexLinear_accGradParameters : Pointer to function : state keys keysOffset values sizes cumSumSizes gradOutput gradWeight gradBias weight bias valuesBuffer weightDecay scale -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleIndexLinear_accGradParameters"
+  p_IndexLinear_accGradParameters :: FunPtr (Ptr C'THCState -> Ptr C'THCIndexTensor -> CLLong -> Ptr C'THCudaDoubleTensor -> Ptr C'THCIndexTensor -> Ptr C'THCIndexTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> CDouble -> IO ())
+
+-- | p_IndexLinear_accUpdateGradParameters : Pointer to function : state keys keysOffset values sizes cumSumSizes gradOutput weight bias weightDecay scale -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleIndexLinear_accUpdateGradParameters"
+  p_IndexLinear_accUpdateGradParameters :: FunPtr (Ptr C'THCState -> Ptr C'THCIndexTensor -> CLLong -> Ptr C'THCudaDoubleTensor -> Ptr C'THCIndexTensor -> Ptr C'THCIndexTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> CDouble -> IO ())
+
+-- | p_IndexLinear_updateParameters : Pointer to function : state gradWeight gradBias weight bias runningKeys cumSumSizes keysOffset weightDecay learningRate -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleIndexLinear_updateParameters"
+  p_IndexLinear_updateParameters :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCIndexTensor -> Ptr C'THCIndexTensor -> CLLong -> CDouble -> CDouble -> IO ())
+
+-- | p_SpatialAdaptiveMaxPooling_updateOutput : Pointer to function : state input output indices osizeW osizeH -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleSpatialAdaptiveMaxPooling_updateOutput"
+  p_SpatialAdaptiveMaxPooling_updateOutput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCIndexTensor -> CInt -> CInt -> IO ())
+
+-- | p_SpatialAdaptiveMaxPooling_updateGradInput : Pointer to function : state input gradOutput gradInput indices -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleSpatialAdaptiveMaxPooling_updateGradInput"
+  p_SpatialAdaptiveMaxPooling_updateGradInput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCIndexTensor -> IO ())
+
+-- | p_SpatialAdaptiveAveragePooling_updateOutput : Pointer to function : state input output osizeW osizeH -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleSpatialAdaptiveAveragePooling_updateOutput"
+  p_SpatialAdaptiveAveragePooling_updateOutput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> IO ())
+
+-- | p_SpatialAdaptiveAveragePooling_updateGradInput : Pointer to function : state input gradOutput gradInput -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleSpatialAdaptiveAveragePooling_updateGradInput"
+  p_SpatialAdaptiveAveragePooling_updateGradInput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_SpatialAveragePooling_updateOutput : Pointer to function : state input output kW kH dW dH padW padH ceil_mode count_include_pad -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleSpatialAveragePooling_updateOutput"
+  p_SpatialAveragePooling_updateOutput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CBool -> CBool -> IO ())
+
+-- | p_SpatialAveragePooling_updateGradInput : Pointer to function : state input gradOutput gradInput kW kH dW dH padW padH ceil_mode count_include_pad -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleSpatialAveragePooling_updateGradInput"
+  p_SpatialAveragePooling_updateGradInput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CBool -> CBool -> IO ())
+
+-- | p_SpatialClassNLLCriterion_updateOutput : Pointer to function : state input target output sizeAverage weights total_weight ignore_index reduce -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleSpatialClassNLLCriterion_updateOutput"
+  p_SpatialClassNLLCriterion_updateOutput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCIndexTensor -> Ptr C'THCudaDoubleTensor -> CBool -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CLLong -> CBool -> IO ())
+
+-- | p_SpatialClassNLLCriterion_updateGradInput : Pointer to function : state input target gradOutput gradInput sizeAverage weights total_weight ignore_index reduce -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleSpatialClassNLLCriterion_updateGradInput"
+  p_SpatialClassNLLCriterion_updateGradInput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCIndexTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CBool -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CLLong -> CBool -> IO ())
+
+-- | p_SpatialConvolutionLocal_updateOutput : Pointer to function : state input output weight bias finput fgradInput kW kH dW dH padW padH inputWidth inputHeight outputWidth outputHeight -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleSpatialConvolutionLocal_updateOutput"
+  p_SpatialConvolutionLocal_updateOutput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CLLong -> CLLong -> CLLong -> CLLong -> IO ())
+
+-- | p_SpatialConvolutionLocal_updateGradInput : Pointer to function : state input gradOutput gradInput weight finput fgradInput kW kH dW dH padW padH inputWidth inputHeight outputWidth outputHeight -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleSpatialConvolutionLocal_updateGradInput"
+  p_SpatialConvolutionLocal_updateGradInput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CLLong -> CLLong -> CLLong -> CLLong -> IO ())
+
+-- | p_SpatialConvolutionLocal_accGradParameters : Pointer to function : state input gradOutput gradWeight gradBias finput fgradInput kW kH dW dH padW padH inputWidth inputHeight outputWidth outputHeight scale -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleSpatialConvolutionLocal_accGradParameters"
+  p_SpatialConvolutionLocal_accGradParameters :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CLLong -> CLLong -> CLLong -> CLLong -> CDouble -> IO ())
+
+-- | p_SpatialConvolutionMM_updateOutput : Pointer to function : state input output weight bias columns ones kW kH dW dH padW padH -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleSpatialConvolutionMM_updateOutput"
+  p_SpatialConvolutionMM_updateOutput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> IO ())
+
+-- | p_SpatialConvolutionMM_updateGradInput : Pointer to function : state input gradOutput gradInput weight columns ones kW kH dW dH padW padH -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleSpatialConvolutionMM_updateGradInput"
+  p_SpatialConvolutionMM_updateGradInput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> IO ())
+
+-- | p_SpatialConvolutionMM_accGradParameters : Pointer to function : state input gradOutput gradWeight gradBias columns ones kW kH dW dH padW padH scale -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleSpatialConvolutionMM_accGradParameters"
+  p_SpatialConvolutionMM_accGradParameters :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CDouble -> IO ())
+
+-- | p_SpatialDepthwiseConvolution_updateOutput : Pointer to function : state input output weight bias kW kH dW dH padW padH dilationW dilationH -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleSpatialDepthwiseConvolution_updateOutput"
+  p_SpatialDepthwiseConvolution_updateOutput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> IO ())
+
+-- | p_SpatialDepthwiseConvolution_updateGradInput : Pointer to function : state input gradOutput gradInput weight kW kH dW dH padW padH dilationW dilationH -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleSpatialDepthwiseConvolution_updateGradInput"
+  p_SpatialDepthwiseConvolution_updateGradInput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> IO ())
+
+-- | p_SpatialDepthwiseConvolution_accGradParameters : Pointer to function : state input gradOutput gradWeight kW kH dW dH padW padH dilationW dilationH -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleSpatialDepthwiseConvolution_accGradParameters"
+  p_SpatialDepthwiseConvolution_accGradParameters :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> IO ())
+
+-- | p_SpatialCrossMapLRN_updateOutput : Pointer to function : state input output scale size alpha beta k -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleSpatialCrossMapLRN_updateOutput"
+  p_SpatialCrossMapLRN_updateOutput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CDouble -> CDouble -> CDouble -> IO ())
+
+-- | p_SpatialCrossMapLRN_updateGradInput : Pointer to function : state input gradOutput gradInput scale output size alpha beta k -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleSpatialCrossMapLRN_updateGradInput"
+  p_SpatialCrossMapLRN_updateGradInput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CDouble -> CDouble -> CDouble -> IO ())
+
+-- | p_SpatialDilatedConvolution_updateOutput : Pointer to function : state input output weight bias columns ones kW kH dW dH padW padH dilationW dilationH -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleSpatialDilatedConvolution_updateOutput"
+  p_SpatialDilatedConvolution_updateOutput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> IO ())
+
+-- | p_SpatialDilatedConvolution_updateGradInput : Pointer to function : state input gradOutput gradInput weight columns kW kH dW dH padW padH dilationW dilationH -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleSpatialDilatedConvolution_updateGradInput"
+  p_SpatialDilatedConvolution_updateGradInput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> IO ())
+
+-- | p_SpatialDilatedConvolution_accGradParameters : Pointer to function : state input gradOutput gradWeight gradBias columns ones kW kH dW dH padW padH dilationW dilationH scale -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleSpatialDilatedConvolution_accGradParameters"
+  p_SpatialDilatedConvolution_accGradParameters :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CDouble -> IO ())
+
+-- | p_SpatialFullDilatedConvolution_updateOutput : Pointer to function : state input output weight bias columns ones kW kH dW dH padW padH dilationW dilationH adjW adjH -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleSpatialFullDilatedConvolution_updateOutput"
+  p_SpatialFullDilatedConvolution_updateOutput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> IO ())
+
+-- | p_SpatialFullDilatedConvolution_updateGradInput : Pointer to function : state input gradOutput gradInput weight columns kW kH dW dH padW padH dilationW dilationH adjW adjH -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleSpatialFullDilatedConvolution_updateGradInput"
+  p_SpatialFullDilatedConvolution_updateGradInput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> IO ())
+
+-- | p_SpatialFullDilatedConvolution_accGradParameters : Pointer to function : state input gradOutput gradWeight gradBias columns ones kW kH dW dH padW padH dilationW dilationH adjW adjH scale -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleSpatialFullDilatedConvolution_accGradParameters"
+  p_SpatialFullDilatedConvolution_accGradParameters :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CDouble -> IO ())
+
+-- | p_SpatialDilatedMaxPooling_updateOutput : Pointer to function : state input output indices kW kH dW dH padW padH dilationW dilationH ceil_mode -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleSpatialDilatedMaxPooling_updateOutput"
+  p_SpatialDilatedMaxPooling_updateOutput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCIndexTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CBool -> IO ())
+
+-- | p_SpatialDilatedMaxPooling_updateGradInput : Pointer to function : state input gradOutput gradInput indices kW kH dW dH padW padH dilationW dilationH ceil_mode -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleSpatialDilatedMaxPooling_updateGradInput"
+  p_SpatialDilatedMaxPooling_updateGradInput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCIndexTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CBool -> IO ())
+
+-- | p_SpatialFractionalMaxPooling_updateOutput : Pointer to function : state input output outputW outputH poolSizeW poolSizeH indices randomSamples -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleSpatialFractionalMaxPooling_updateOutput"
+  p_SpatialFractionalMaxPooling_updateOutput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> CInt -> Ptr C'THCIndexTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_SpatialFractionalMaxPooling_updateGradInput : Pointer to function : state input gradOutput gradInput outputW outputH poolSizeW poolSizeH indices -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleSpatialFractionalMaxPooling_updateGradInput"
+  p_SpatialFractionalMaxPooling_updateGradInput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> CInt -> Ptr C'THCIndexTensor -> IO ())
+
+-- | p_SpatialFullConvolution_updateOutput : Pointer to function : state input output weight bias columns ones kW kH dW dH padW padH adjW adjH -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleSpatialFullConvolution_updateOutput"
+  p_SpatialFullConvolution_updateOutput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> IO ())
+
+-- | p_SpatialFullConvolution_updateGradInput : Pointer to function : state input gradOutput gradInput weight columns kW kH dW dH padW padH adjW adjH -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleSpatialFullConvolution_updateGradInput"
+  p_SpatialFullConvolution_updateGradInput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> IO ())
+
+-- | p_SpatialFullConvolution_accGradParameters : Pointer to function : state input gradOutput gradWeight gradBias columns ones kW kH dW dH padW padH adjW adjH scale -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleSpatialFullConvolution_accGradParameters"
+  p_SpatialFullConvolution_accGradParameters :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CDouble -> IO ())
+
+-- | p_SpatialMaxPooling_updateOutput : Pointer to function : state input output indices kW kH dW dH padW padH ceil_mode -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleSpatialMaxPooling_updateOutput"
+  p_SpatialMaxPooling_updateOutput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCIndexTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CBool -> IO ())
+
+-- | p_SpatialMaxPooling_updateGradInput : Pointer to function : state input gradOutput gradInput indices kW kH dW dH padW padH ceil_mode -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleSpatialMaxPooling_updateGradInput"
+  p_SpatialMaxPooling_updateGradInput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCIndexTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CBool -> IO ())
+
+-- | p_SpatialMaxUnpooling_updateOutput : Pointer to function : state input output indices owidth oheight -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleSpatialMaxUnpooling_updateOutput"
+  p_SpatialMaxUnpooling_updateOutput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCIndexTensor -> CInt -> CInt -> IO ())
+
+-- | p_SpatialMaxUnpooling_updateGradInput : Pointer to function : state input gradOutput gradInput indices owidth oheight -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleSpatialMaxUnpooling_updateGradInput"
+  p_SpatialMaxUnpooling_updateGradInput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCIndexTensor -> CInt -> CInt -> IO ())
+
+-- | p_SpatialReflectionPadding_updateOutput : Pointer to function : state input output padL padR padT padB -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleSpatialReflectionPadding_updateOutput"
+  p_SpatialReflectionPadding_updateOutput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> CInt -> IO ())
+
+-- | p_SpatialReflectionPadding_updateGradInput : Pointer to function : state input gradOutput gradInput padL padR padT padB -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleSpatialReflectionPadding_updateGradInput"
+  p_SpatialReflectionPadding_updateGradInput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> CInt -> IO ())
+
+-- | p_SpatialReplicationPadding_updateOutput : Pointer to function : state input output padL padR padT padB -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleSpatialReplicationPadding_updateOutput"
+  p_SpatialReplicationPadding_updateOutput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> CInt -> IO ())
+
+-- | p_SpatialReplicationPadding_updateGradInput : Pointer to function : state input gradOutput gradInput padL padR padT padB -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleSpatialReplicationPadding_updateGradInput"
+  p_SpatialReplicationPadding_updateGradInput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> CInt -> IO ())
+
+-- | p_SpatialSubSampling_updateOutput : Pointer to function : state input output weight bias kW kH dW dH -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleSpatialSubSampling_updateOutput"
+  p_SpatialSubSampling_updateOutput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> CInt -> IO ())
+
+-- | p_SpatialSubSampling_updateGradInput : Pointer to function : state input gradOutput gradInput weight kW kH dW dH -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleSpatialSubSampling_updateGradInput"
+  p_SpatialSubSampling_updateGradInput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> CInt -> IO ())
+
+-- | p_SpatialSubSampling_accGradParameters : Pointer to function : state input gradOutput gradWeight gradBias kW kH dW dH scale -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleSpatialSubSampling_accGradParameters"
+  p_SpatialSubSampling_accGradParameters :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> CInt -> CDouble -> IO ())
+
+-- | p_SpatialUpSamplingBilinear_updateOutput : Pointer to function : state input output outputHeight outputWidth -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleSpatialUpSamplingBilinear_updateOutput"
+  p_SpatialUpSamplingBilinear_updateOutput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> IO ())
+
+-- | p_SpatialUpSamplingBilinear_updateGradInput : Pointer to function : state gradOutput gradInput nbatch nchannels inputHeight inputWidth outputHeight outputWidth -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleSpatialUpSamplingBilinear_updateGradInput"
+  p_SpatialUpSamplingBilinear_updateGradInput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> IO ())
+
+-- | p_SpatialUpSamplingNearest_updateGradInput : Pointer to function : state input gradOutput gradInput scale_factor -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleSpatialUpSamplingNearest_updateGradInput"
+  p_SpatialUpSamplingNearest_updateGradInput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> IO ())
+
+-- | p_SpatialUpSamplingNearest_updateOutput : Pointer to function : state input output scale_factor -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleSpatialUpSamplingNearest_updateOutput"
+  p_SpatialUpSamplingNearest_updateOutput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> IO ())
+
+-- | p_SpatialGridSamplerBilinear_updateOutput : Pointer to function : state input grid output padding_mode -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleSpatialGridSamplerBilinear_updateOutput"
+  p_SpatialGridSamplerBilinear_updateOutput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> IO ())
+
+-- | p_SpatialGridSamplerBilinear_updateGradInput : Pointer to function : state input gradInput grid gradGrid gradOutput padding_mode -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleSpatialGridSamplerBilinear_updateGradInput"
+  p_SpatialGridSamplerBilinear_updateGradInput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> IO ())
+
+-- | p_VolumetricGridSamplerBilinear_updateOutput : Pointer to function : state input grid output padding_mode -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleVolumetricGridSamplerBilinear_updateOutput"
+  p_VolumetricGridSamplerBilinear_updateOutput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> IO ())
+
+-- | p_VolumetricGridSamplerBilinear_updateGradInput : Pointer to function : state input gradInput grid gradGrid gradOutput padding_mode -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleVolumetricGridSamplerBilinear_updateGradInput"
+  p_VolumetricGridSamplerBilinear_updateGradInput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> IO ())
+
+-- | p_RReLU_updateOutput : Pointer to function : state input output noise lower upper train inplace generator -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleRReLU_updateOutput"
+  p_RReLU_updateOutput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> CDouble -> CBool -> CBool -> Ptr () -> IO ())
+
+-- | p_RReLU_updateGradInput : Pointer to function : state input gradOutput gradInput noise lower upper train inplace -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleRReLU_updateGradInput"
+  p_RReLU_updateGradInput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> CDouble -> CBool -> CBool -> IO ())
+
+-- | p_Sigmoid_updateOutput : Pointer to function : state input output -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleSigmoid_updateOutput"
+  p_Sigmoid_updateOutput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_Sigmoid_updateGradInput : Pointer to function : state gradOutput gradInput output -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleSigmoid_updateGradInput"
+  p_Sigmoid_updateGradInput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_SoftMarginCriterion_updateOutput : Pointer to function : state input target output sizeAverage reduce -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleSoftMarginCriterion_updateOutput"
+  p_SoftMarginCriterion_updateOutput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CBool -> CBool -> IO ())
+
+-- | p_SoftMarginCriterion_updateGradInput : Pointer to function : state input target gradOutput gradInput sizeAverage reduce -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleSoftMarginCriterion_updateGradInput"
+  p_SoftMarginCriterion_updateGradInput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CBool -> CBool -> IO ())
+
+-- | p_SoftMax_updateOutput : Pointer to function : state input output dim -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleSoftMax_updateOutput"
+  p_SoftMax_updateOutput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> IO ())
+
+-- | p_SoftMax_updateGradInput : Pointer to function : state input gradOutput gradInput output dim -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleSoftMax_updateGradInput"
+  p_SoftMax_updateGradInput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> IO ())
+
+-- | p_SoftPlus_updateOutput : Pointer to function : state input output beta threshold -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleSoftPlus_updateOutput"
+  p_SoftPlus_updateOutput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> CDouble -> IO ())
+
+-- | p_SoftPlus_updateGradInput : Pointer to function : state input gradOutput gradInput output beta threshold -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleSoftPlus_updateGradInput"
+  p_SoftPlus_updateGradInput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> CDouble -> IO ())
+
+-- | p_SoftShrink_updateOutput : Pointer to function : state input output lambda -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleSoftShrink_updateOutput"
+  p_SoftShrink_updateOutput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> IO ())
+
+-- | p_SoftShrink_updateGradInput : Pointer to function : state input gradOutput gradInput lambda -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleSoftShrink_updateGradInput"
+  p_SoftShrink_updateGradInput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> IO ())
+
+-- | p_Square_updateOutput : Pointer to function : state input output -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleSquare_updateOutput"
+  p_Square_updateOutput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_Square_updateGradInput : Pointer to function : state input gradOutput gradInput -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleSquare_updateGradInput"
+  p_Square_updateGradInput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_Sqrt_updateOutput : Pointer to function : state input output eps -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleSqrt_updateOutput"
+  p_Sqrt_updateOutput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> IO ())
+
+-- | p_Sqrt_updateGradInput : Pointer to function : state input gradOutput gradInput output -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleSqrt_updateGradInput"
+  p_Sqrt_updateGradInput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_Tanh_updateOutput : Pointer to function : state input output -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleTanh_updateOutput"
+  p_Tanh_updateOutput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_Tanh_updateGradInput : Pointer to function : state gradOutput gradInput output -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleTanh_updateGradInput"
+  p_Tanh_updateGradInput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_TemporalConvolution_updateOutput : Pointer to function : state input output weight bias kW dW inputFrameSize outputFrameSize -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleTemporalConvolution_updateOutput"
+  p_TemporalConvolution_updateOutput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> CInt -> IO ())
+
+-- | p_TemporalConvolution_updateGradInput : Pointer to function : state input gradOutput gradInput weight kW dW -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleTemporalConvolution_updateGradInput"
+  p_TemporalConvolution_updateGradInput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> IO ())
+
+-- | p_TemporalConvolution_accGradParameters : Pointer to function : state input gradOutput gradWeight gradBias kW dW scale -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleTemporalConvolution_accGradParameters"
+  p_TemporalConvolution_accGradParameters :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CDouble -> IO ())
+
+-- | p_TemporalMaxPooling_updateOutput : Pointer to function : state input output indices kW dW -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleTemporalMaxPooling_updateOutput"
+  p_TemporalMaxPooling_updateOutput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCIndexTensor -> CInt -> CInt -> IO ())
+
+-- | p_TemporalMaxPooling_updateGradInput : Pointer to function : state input gradOutput gradInput indices kW dW -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleTemporalMaxPooling_updateGradInput"
+  p_TemporalMaxPooling_updateGradInput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCIndexTensor -> CInt -> CInt -> IO ())
+
+-- | p_TemporalRowConvolution_updateOutput : Pointer to function : state input output weight bias finput fgradInput kW dW padW featFirst -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleTemporalRowConvolution_updateOutput"
+  p_TemporalRowConvolution_updateOutput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> CBool -> IO ())
+
+-- | p_TemporalRowConvolution_updateGradInput : Pointer to function : state input gradOutput gradInput weight finput fgradInput kW dW padW featFirst -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleTemporalRowConvolution_updateGradInput"
+  p_TemporalRowConvolution_updateGradInput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> CBool -> IO ())
+
+-- | p_TemporalRowConvolution_accGradParameters : Pointer to function : state input gradOutput gradWeight gradBias finput fgradInput kW dW padW featFirst scale -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleTemporalRowConvolution_accGradParameters"
+  p_TemporalRowConvolution_accGradParameters :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> CBool -> CDouble -> IO ())
+
+-- | p_TemporalReflectionPadding_updateOutput : Pointer to function : state input output padL padR -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleTemporalReflectionPadding_updateOutput"
+  p_TemporalReflectionPadding_updateOutput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> IO ())
+
+-- | p_TemporalReflectionPadding_updateGradInput : Pointer to function : state input gradOutput gradInput padL padR -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleTemporalReflectionPadding_updateGradInput"
+  p_TemporalReflectionPadding_updateGradInput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> IO ())
+
+-- | p_TemporalReplicationPadding_updateOutput : Pointer to function : state input output padL padR -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleTemporalReplicationPadding_updateOutput"
+  p_TemporalReplicationPadding_updateOutput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> IO ())
+
+-- | p_TemporalReplicationPadding_updateGradInput : Pointer to function : state input gradOutput gradInput padL padR -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleTemporalReplicationPadding_updateGradInput"
+  p_TemporalReplicationPadding_updateGradInput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> IO ())
+
+-- | p_TemporalUpSamplingLinear_updateOutput : Pointer to function : state input output outputWidth -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleTemporalUpSamplingLinear_updateOutput"
+  p_TemporalUpSamplingLinear_updateOutput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> IO ())
+
+-- | p_TemporalUpSamplingLinear_updateGradInput : Pointer to function : state gradOutput gradInput nbatch nchannels inputWidth outputWidth -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleTemporalUpSamplingLinear_updateGradInput"
+  p_TemporalUpSamplingLinear_updateGradInput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> CInt -> IO ())
+
+-- | p_TemporalUpSamplingNearest_updateGradInput : Pointer to function : state input gradOutput gradInput scale_factor -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleTemporalUpSamplingNearest_updateGradInput"
+  p_TemporalUpSamplingNearest_updateGradInput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> IO ())
+
+-- | p_TemporalUpSamplingNearest_updateOutput : Pointer to function : state input output scale_factor -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleTemporalUpSamplingNearest_updateOutput"
+  p_TemporalUpSamplingNearest_updateOutput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> IO ())
+
+-- | p_Threshold_updateOutput : Pointer to function : state input output threshold val inplace -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleThreshold_updateOutput"
+  p_Threshold_updateOutput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> CDouble -> CBool -> IO ())
+
+-- | p_Threshold_updateGradInput : Pointer to function : state input gradOutput gradInput threshold val inplace -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleThreshold_updateGradInput"
+  p_Threshold_updateGradInput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> CDouble -> CBool -> IO ())
+
+-- | p_VolumetricAveragePooling_updateOutput : Pointer to function : state input output kT kW kH dT dW dH padT padW padH ceil_mode count_include_pad -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleVolumetricAveragePooling_updateOutput"
+  p_VolumetricAveragePooling_updateOutput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CBool -> CBool -> IO ())
+
+-- | p_VolumetricAveragePooling_updateGradInput : Pointer to function : state input gradOutput gradInput kT kW kH dT dW dH padT padW padH ceil_mode count_include_pad -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleVolumetricAveragePooling_updateGradInput"
+  p_VolumetricAveragePooling_updateGradInput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CBool -> CBool -> IO ())
+
+-- | p_VolumetricConvolution_updateOutput : Pointer to function : state input output weight bias finput fgradInput dT dW dH padT padW padH -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleVolumetricConvolution_updateOutput"
+  p_VolumetricConvolution_updateOutput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> IO ())
+
+-- | p_VolumetricConvolution_updateGradInput : Pointer to function : state input gradOutput gradInput weight finput dT dW dH padT padW padH -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleVolumetricConvolution_updateGradInput"
+  p_VolumetricConvolution_updateGradInput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> IO ())
+
+-- | p_VolumetricConvolution_accGradParameters : Pointer to function : state input gradOutput gradWeight gradBias finput fgradInput dT dW dH padT padW padH scale -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleVolumetricConvolution_accGradParameters"
+  p_VolumetricConvolution_accGradParameters :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CDouble -> IO ())
+
+-- | p_VolumetricDilatedConvolution_updateOutput : Pointer to function : state input output weight bias columns ones kT kW kH dT dW dH padT padW padH dilationT dilationW dilationH -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleVolumetricDilatedConvolution_updateOutput"
+  p_VolumetricDilatedConvolution_updateOutput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> IO ())
+
+-- | p_VolumetricDilatedConvolution_updateGradInput : Pointer to function : state input gradOutput gradInput weight columns kT kW kH dT dW dH padT padW padH dilationT dilationW dilationH -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleVolumetricDilatedConvolution_updateGradInput"
+  p_VolumetricDilatedConvolution_updateGradInput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> IO ())
+
+-- | p_VolumetricDilatedConvolution_accGradParameters : Pointer to function : state input gradOutput gradWeight gradBias columns ones kT kW kH dT dW dH padT padW padH dilationT dilationW dilationH scale -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleVolumetricDilatedConvolution_accGradParameters"
+  p_VolumetricDilatedConvolution_accGradParameters :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CDouble -> IO ())
+
+-- | p_VolumetricFullDilatedConvolution_updateOutput : Pointer to function : state input output weight bias finput fgradInput kT kW kH dT dW dH padT padW padH dilationT dilationW dilationH adjT adjW adjH -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleVolumetricFullDilatedConvolution_updateOutput"
+  p_VolumetricFullDilatedConvolution_updateOutput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> IO ())
+
+-- | p_VolumetricFullDilatedConvolution_updateGradInput : Pointer to function : state input gradOutput gradInput weight finput fgradInput kT kW kH dT dW dH padT padW padH dilationT dilationW dilationH adjT adjW adjH -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleVolumetricFullDilatedConvolution_updateGradInput"
+  p_VolumetricFullDilatedConvolution_updateGradInput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> IO ())
+
+-- | p_VolumetricFullDilatedConvolution_accGradParameters : Pointer to function : state input gradOutput gradWeight gradBias finput fgradInput kT kW kH dT dW dH padT padW padH dilationT dilationW dilationH adjT adjW adjH scale -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleVolumetricFullDilatedConvolution_accGradParameters"
+  p_VolumetricFullDilatedConvolution_accGradParameters :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CDouble -> IO ())
+
+-- | p_VolumetricDilatedMaxPooling_updateOutput : Pointer to function : state input output indices kT kW kH dT dW dH padT padW padH dilationT dilationW dilationH ceilMode -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleVolumetricDilatedMaxPooling_updateOutput"
+  p_VolumetricDilatedMaxPooling_updateOutput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCIndexTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CBool -> IO ())
+
+-- | p_VolumetricDilatedMaxPooling_updateGradInput : Pointer to function : state input gradOutput gradInput indices kT kW kH dT dW dH padT padW padH dilationT dilationW dilationH ceilMode -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleVolumetricDilatedMaxPooling_updateGradInput"
+  p_VolumetricDilatedMaxPooling_updateGradInput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCIndexTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CBool -> IO ())
+
+-- | p_VolumetricFractionalMaxPooling_updateOutput : Pointer to function : state input output outputT outputW outputH poolSizeT poolSizeW poolSizeH indices randomSamples -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleVolumetricFractionalMaxPooling_updateOutput"
+  p_VolumetricFractionalMaxPooling_updateOutput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> Ptr C'THCIndexTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_VolumetricFractionalMaxPooling_updateGradInput : Pointer to function : state input gradOutput gradInput outputT outputW outputH poolSizeT poolSizeW poolSizeH indices -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleVolumetricFractionalMaxPooling_updateGradInput"
+  p_VolumetricFractionalMaxPooling_updateGradInput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> Ptr C'THCIndexTensor -> IO ())
+
+-- | p_VolumetricFullConvolution_updateOutput : Pointer to function : state input output weight bias finput fgradInput kT kW kH dT dW dH padT padW padH adjT adjW adjH -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleVolumetricFullConvolution_updateOutput"
+  p_VolumetricFullConvolution_updateOutput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> IO ())
+
+-- | p_VolumetricFullConvolution_updateGradInput : Pointer to function : state input gradOutput gradInput weight finput fgradInput kT kW kH dT dW dH padT padW padH adjT adjW adjH -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleVolumetricFullConvolution_updateGradInput"
+  p_VolumetricFullConvolution_updateGradInput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> IO ())
+
+-- | p_VolumetricFullConvolution_accGradParameters : Pointer to function : state input gradOutput gradWeight gradBias finput fgradInput kT kW kH dT dW dH padT padW padH adjT adjW adjH scale -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleVolumetricFullConvolution_accGradParameters"
+  p_VolumetricFullConvolution_accGradParameters :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CDouble -> IO ())
+
+-- | p_VolumetricMaxPooling_updateOutput : Pointer to function : state input output indices kT kW kH dT dW dH padT padW padH ceilMode -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleVolumetricMaxPooling_updateOutput"
+  p_VolumetricMaxPooling_updateOutput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCIndexTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CBool -> IO ())
+
+-- | p_VolumetricMaxPooling_updateGradInput : Pointer to function : state input gradOutput gradInput indices kT kW kH dT dW dH padT padW padH ceilMode -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleVolumetricMaxPooling_updateGradInput"
+  p_VolumetricMaxPooling_updateGradInput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCIndexTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CBool -> IO ())
+
+-- | p_VolumetricMaxUnpooling_updateOutput : Pointer to function : state input output indices outputTime outputWidth outputHeight dT dW dH padT padW padH -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleVolumetricMaxUnpooling_updateOutput"
+  p_VolumetricMaxUnpooling_updateOutput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCIndexTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> IO ())
+
+-- | p_VolumetricMaxUnpooling_updateGradInput : Pointer to function : state input gradOutput gradInput indices outputTime outputWidth outputHeight dT dW dH padT padW padH -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleVolumetricMaxUnpooling_updateGradInput"
+  p_VolumetricMaxUnpooling_updateGradInput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCIndexTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> IO ())
+
+-- | p_VolumetricAdaptiveMaxPooling_updateOutput : Pointer to function : state input output indices osizeT osizeW osizeH -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleVolumetricAdaptiveMaxPooling_updateOutput"
+  p_VolumetricAdaptiveMaxPooling_updateOutput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCIndexTensor -> CInt -> CInt -> CInt -> IO ())
+
+-- | p_VolumetricAdaptiveMaxPooling_updateGradInput : Pointer to function : state input gradOutput gradInput indices -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleVolumetricAdaptiveMaxPooling_updateGradInput"
+  p_VolumetricAdaptiveMaxPooling_updateGradInput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCIndexTensor -> IO ())
+
+-- | p_VolumetricAdaptiveAveragePooling_updateOutput : Pointer to function : state input output osizeT osizeW osizeH -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleVolumetricAdaptiveAveragePooling_updateOutput"
+  p_VolumetricAdaptiveAveragePooling_updateOutput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> IO ())
+
+-- | p_VolumetricAdaptiveAveragePooling_updateGradInput : Pointer to function : state input gradOutput gradInput -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleVolumetricAdaptiveAveragePooling_updateGradInput"
+  p_VolumetricAdaptiveAveragePooling_updateGradInput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_VolumetricReplicationPadding_updateOutput : Pointer to function : state input output pleft pright ptop pbottom pfront pback -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleVolumetricReplicationPadding_updateOutput"
+  p_VolumetricReplicationPadding_updateOutput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> IO ())
+
+-- | p_VolumetricReplicationPadding_updateGradInput : Pointer to function : state input gradOutput gradInput pleft pright ptop pbottom pfront pback -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleVolumetricReplicationPadding_updateGradInput"
+  p_VolumetricReplicationPadding_updateGradInput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> IO ())
+
+-- | p_VolumetricUpSamplingNearest_updateGradInput : Pointer to function : state input gradOutput gradInput scale_factor -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleVolumetricUpSamplingNearest_updateGradInput"
+  p_VolumetricUpSamplingNearest_updateGradInput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> IO ())
+
+-- | p_VolumetricUpSamplingNearest_updateOutput : Pointer to function : state input output scale_factor -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleVolumetricUpSamplingNearest_updateOutput"
+  p_VolumetricUpSamplingNearest_updateOutput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> IO ())
+
+-- | p_VolumetricUpSamplingTrilinear_updateOutput : Pointer to function : state input output outputDepth outputHeight outputWidth -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleVolumetricUpSamplingTrilinear_updateOutput"
+  p_VolumetricUpSamplingTrilinear_updateOutput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> IO ())
+
+-- | p_VolumetricUpSamplingTrilinear_updateGradInput : Pointer to function : state gradOutput gradInput nbatch nchannels inputDepth inputHeight inputWidth outputDepth outputHeight outputWidth -> void
+foreign import ccall "THCUNN.h &THNN_CudaDoubleVolumetricUpSamplingTrilinear_updateGradInput"
+  p_VolumetricUpSamplingTrilinear_updateGradInput :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> IO ())
diff --git a/src/Torch/FFI/THC/Blas.hs b/src/Torch/FFI/THC/Blas.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Blas.hs
@@ -0,0 +1,137 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Blas where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_THCudaBlas_Sdot :  state n x incx y incy -> float
+foreign import ccall "THCBlas.h THCudaBlas_Sdot"
+  c_THCudaBlas_Sdot :: Ptr C'THCState -> CLLong -> Ptr CFloat -> CLLong -> Ptr CFloat -> CLLong -> IO CFloat
+
+-- | c_THCudaBlas_Ddot :  state n x incx y incy -> double
+foreign import ccall "THCBlas.h THCudaBlas_Ddot"
+  c_THCudaBlas_Ddot :: Ptr C'THCState -> CLLong -> Ptr CDouble -> CLLong -> Ptr CDouble -> CLLong -> IO CDouble
+
+-- | c_THCudaBlas_Sgemv :  state trans m n alpha a lda x incx beta y incy -> void
+foreign import ccall "THCBlas.h THCudaBlas_Sgemv"
+  c_THCudaBlas_Sgemv :: Ptr C'THCState -> CChar -> CLLong -> CLLong -> CFloat -> Ptr CFloat -> CLLong -> Ptr CFloat -> CLLong -> CFloat -> Ptr CFloat -> CLLong -> IO ()
+
+-- | c_THCudaBlas_Dgemv :  state trans m n alpha a lda x incx beta y incy -> void
+foreign import ccall "THCBlas.h THCudaBlas_Dgemv"
+  c_THCudaBlas_Dgemv :: Ptr C'THCState -> CChar -> CLLong -> CLLong -> CDouble -> Ptr CDouble -> CLLong -> Ptr CDouble -> CLLong -> CDouble -> Ptr CDouble -> CLLong -> IO ()
+
+-- | c_THCudaBlas_Sger :  state m n alpha x incx y incy a lda -> void
+foreign import ccall "THCBlas.h THCudaBlas_Sger"
+  c_THCudaBlas_Sger :: Ptr C'THCState -> CLLong -> CLLong -> CFloat -> Ptr CFloat -> CLLong -> Ptr CFloat -> CLLong -> Ptr CFloat -> CLLong -> IO ()
+
+-- | c_THCudaBlas_Dger :  state m n alpha x incx y incy a lda -> void
+foreign import ccall "THCBlas.h THCudaBlas_Dger"
+  c_THCudaBlas_Dger :: Ptr C'THCState -> CLLong -> CLLong -> CDouble -> Ptr CDouble -> CLLong -> Ptr CDouble -> CLLong -> Ptr CDouble -> CLLong -> IO ()
+
+-- | c_THCudaBlas_Sgemm :  state transa transb m n k alpha a lda b ldb beta c ldc -> void
+foreign import ccall "THCBlas.h THCudaBlas_Sgemm"
+  c_THCudaBlas_Sgemm :: Ptr C'THCState -> CChar -> CChar -> CLLong -> CLLong -> CLLong -> CFloat -> Ptr CFloat -> CLLong -> Ptr CFloat -> CLLong -> CFloat -> Ptr CFloat -> CLLong -> IO ()
+
+-- | c_THCudaBlas_Dgemm :  state transa transb m n k alpha a lda b ldb beta c ldc -> void
+foreign import ccall "THCBlas.h THCudaBlas_Dgemm"
+  c_THCudaBlas_Dgemm :: Ptr C'THCState -> CChar -> CChar -> CLLong -> CLLong -> CLLong -> CDouble -> Ptr CDouble -> CLLong -> Ptr CDouble -> CLLong -> CDouble -> Ptr CDouble -> CLLong -> IO ()
+
+-- | c_THCudaBlas_SgemmStridedBatched :  state transa transb m n k alpha a lda strideA b ldb strideB beta c ldc strideC batchCount -> void
+foreign import ccall "THCBlas.h THCudaBlas_SgemmStridedBatched"
+  c_THCudaBlas_SgemmStridedBatched :: Ptr C'THCState -> CChar -> CChar -> CLLong -> CLLong -> CLLong -> CFloat -> Ptr CFloat -> CLLong -> CLLong -> Ptr CFloat -> CLLong -> CLLong -> CFloat -> Ptr CFloat -> CLLong -> CLLong -> CLLong -> IO ()
+
+-- | c_THCudaBlas_DgemmStridedBatched :  state transa transb m n k alpha a lda strideA b ldb strideB beta c ldc strideC batchCount -> void
+foreign import ccall "THCBlas.h THCudaBlas_DgemmStridedBatched"
+  c_THCudaBlas_DgemmStridedBatched :: Ptr C'THCState -> CChar -> CChar -> CLLong -> CLLong -> CLLong -> CDouble -> Ptr CDouble -> CLLong -> CLLong -> Ptr CDouble -> CLLong -> CLLong -> CDouble -> Ptr CDouble -> CLLong -> CLLong -> CLLong -> IO ()
+
+-- | c_THCudaBlas_Sgetrf :  state n a lda pivot info batchSize -> void
+foreign import ccall "THCBlas.h THCudaBlas_Sgetrf"
+  c_THCudaBlas_Sgetrf :: Ptr C'THCState -> CInt -> Ptr (Ptr CFloat) -> CInt -> Ptr CInt -> Ptr CInt -> CInt -> IO ()
+
+-- | c_THCudaBlas_Dgetrf :  state n a lda pivot info batchSize -> void
+foreign import ccall "THCBlas.h THCudaBlas_Dgetrf"
+  c_THCudaBlas_Dgetrf :: Ptr C'THCState -> CInt -> Ptr (Ptr CDouble) -> CInt -> Ptr CInt -> Ptr CInt -> CInt -> IO ()
+
+-- | c_THCudaBlas_Sgetrs :  state transa n nrhs a lda pivot b ldb info batchSize -> void
+foreign import ccall "THCBlas.h THCudaBlas_Sgetrs"
+  c_THCudaBlas_Sgetrs :: Ptr C'THCState -> CChar -> CInt -> CInt -> Ptr (Ptr CFloat) -> CInt -> Ptr CInt -> Ptr (Ptr CFloat) -> CInt -> Ptr CInt -> CInt -> IO ()
+
+-- | c_THCudaBlas_Dgetrs :  state transa n nrhs a lda pivot b ldb info batchSize -> void
+foreign import ccall "THCBlas.h THCudaBlas_Dgetrs"
+  c_THCudaBlas_Dgetrs :: Ptr C'THCState -> CChar -> CInt -> CInt -> Ptr (Ptr CDouble) -> CInt -> Ptr CInt -> Ptr (Ptr CDouble) -> CInt -> Ptr CInt -> CInt -> IO ()
+
+-- | c_THCudaBlas_Sgetri :  state n a lda pivot c ldc info batchSize -> void
+foreign import ccall "THCBlas.h THCudaBlas_Sgetri"
+  c_THCudaBlas_Sgetri :: Ptr C'THCState -> CInt -> Ptr (Ptr CFloat) -> CInt -> Ptr CInt -> Ptr (Ptr CFloat) -> CInt -> Ptr CInt -> CInt -> IO ()
+
+-- | c_THCudaBlas_Dgetri :  state n a lda pivot c ldc info batchSize -> void
+foreign import ccall "THCBlas.h THCudaBlas_Dgetri"
+  c_THCudaBlas_Dgetri :: Ptr C'THCState -> CInt -> Ptr (Ptr CDouble) -> CInt -> Ptr CInt -> Ptr (Ptr CDouble) -> CInt -> Ptr CInt -> CInt -> IO ()
+
+-- | p_THCudaBlas_Sdot : Pointer to function : state n x incx y incy -> float
+foreign import ccall "THCBlas.h &THCudaBlas_Sdot"
+  p_THCudaBlas_Sdot :: FunPtr (Ptr C'THCState -> CLLong -> Ptr CFloat -> CLLong -> Ptr CFloat -> CLLong -> IO CFloat)
+
+-- | p_THCudaBlas_Ddot : Pointer to function : state n x incx y incy -> double
+foreign import ccall "THCBlas.h &THCudaBlas_Ddot"
+  p_THCudaBlas_Ddot :: FunPtr (Ptr C'THCState -> CLLong -> Ptr CDouble -> CLLong -> Ptr CDouble -> CLLong -> IO CDouble)
+
+-- | p_THCudaBlas_Sgemv : Pointer to function : state trans m n alpha a lda x incx beta y incy -> void
+foreign import ccall "THCBlas.h &THCudaBlas_Sgemv"
+  p_THCudaBlas_Sgemv :: FunPtr (Ptr C'THCState -> CChar -> CLLong -> CLLong -> CFloat -> Ptr CFloat -> CLLong -> Ptr CFloat -> CLLong -> CFloat -> Ptr CFloat -> CLLong -> IO ())
+
+-- | p_THCudaBlas_Dgemv : Pointer to function : state trans m n alpha a lda x incx beta y incy -> void
+foreign import ccall "THCBlas.h &THCudaBlas_Dgemv"
+  p_THCudaBlas_Dgemv :: FunPtr (Ptr C'THCState -> CChar -> CLLong -> CLLong -> CDouble -> Ptr CDouble -> CLLong -> Ptr CDouble -> CLLong -> CDouble -> Ptr CDouble -> CLLong -> IO ())
+
+-- | p_THCudaBlas_Sger : Pointer to function : state m n alpha x incx y incy a lda -> void
+foreign import ccall "THCBlas.h &THCudaBlas_Sger"
+  p_THCudaBlas_Sger :: FunPtr (Ptr C'THCState -> CLLong -> CLLong -> CFloat -> Ptr CFloat -> CLLong -> Ptr CFloat -> CLLong -> Ptr CFloat -> CLLong -> IO ())
+
+-- | p_THCudaBlas_Dger : Pointer to function : state m n alpha x incx y incy a lda -> void
+foreign import ccall "THCBlas.h &THCudaBlas_Dger"
+  p_THCudaBlas_Dger :: FunPtr (Ptr C'THCState -> CLLong -> CLLong -> CDouble -> Ptr CDouble -> CLLong -> Ptr CDouble -> CLLong -> Ptr CDouble -> CLLong -> IO ())
+
+-- | p_THCudaBlas_Sgemm : Pointer to function : state transa transb m n k alpha a lda b ldb beta c ldc -> void
+foreign import ccall "THCBlas.h &THCudaBlas_Sgemm"
+  p_THCudaBlas_Sgemm :: FunPtr (Ptr C'THCState -> CChar -> CChar -> CLLong -> CLLong -> CLLong -> CFloat -> Ptr CFloat -> CLLong -> Ptr CFloat -> CLLong -> CFloat -> Ptr CFloat -> CLLong -> IO ())
+
+-- | p_THCudaBlas_Dgemm : Pointer to function : state transa transb m n k alpha a lda b ldb beta c ldc -> void
+foreign import ccall "THCBlas.h &THCudaBlas_Dgemm"
+  p_THCudaBlas_Dgemm :: FunPtr (Ptr C'THCState -> CChar -> CChar -> CLLong -> CLLong -> CLLong -> CDouble -> Ptr CDouble -> CLLong -> Ptr CDouble -> CLLong -> CDouble -> Ptr CDouble -> CLLong -> IO ())
+
+-- | p_THCudaBlas_SgemmStridedBatched : Pointer to function : state transa transb m n k alpha a lda strideA b ldb strideB beta c ldc strideC batchCount -> void
+foreign import ccall "THCBlas.h &THCudaBlas_SgemmStridedBatched"
+  p_THCudaBlas_SgemmStridedBatched :: FunPtr (Ptr C'THCState -> CChar -> CChar -> CLLong -> CLLong -> CLLong -> CFloat -> Ptr CFloat -> CLLong -> CLLong -> Ptr CFloat -> CLLong -> CLLong -> CFloat -> Ptr CFloat -> CLLong -> CLLong -> CLLong -> IO ())
+
+-- | p_THCudaBlas_DgemmStridedBatched : Pointer to function : state transa transb m n k alpha a lda strideA b ldb strideB beta c ldc strideC batchCount -> void
+foreign import ccall "THCBlas.h &THCudaBlas_DgemmStridedBatched"
+  p_THCudaBlas_DgemmStridedBatched :: FunPtr (Ptr C'THCState -> CChar -> CChar -> CLLong -> CLLong -> CLLong -> CDouble -> Ptr CDouble -> CLLong -> CLLong -> Ptr CDouble -> CLLong -> CLLong -> CDouble -> Ptr CDouble -> CLLong -> CLLong -> CLLong -> IO ())
+
+-- | p_THCudaBlas_Sgetrf : Pointer to function : state n a lda pivot info batchSize -> void
+foreign import ccall "THCBlas.h &THCudaBlas_Sgetrf"
+  p_THCudaBlas_Sgetrf :: FunPtr (Ptr C'THCState -> CInt -> Ptr (Ptr CFloat) -> CInt -> Ptr CInt -> Ptr CInt -> CInt -> IO ())
+
+-- | p_THCudaBlas_Dgetrf : Pointer to function : state n a lda pivot info batchSize -> void
+foreign import ccall "THCBlas.h &THCudaBlas_Dgetrf"
+  p_THCudaBlas_Dgetrf :: FunPtr (Ptr C'THCState -> CInt -> Ptr (Ptr CDouble) -> CInt -> Ptr CInt -> Ptr CInt -> CInt -> IO ())
+
+-- | p_THCudaBlas_Sgetrs : Pointer to function : state transa n nrhs a lda pivot b ldb info batchSize -> void
+foreign import ccall "THCBlas.h &THCudaBlas_Sgetrs"
+  p_THCudaBlas_Sgetrs :: FunPtr (Ptr C'THCState -> CChar -> CInt -> CInt -> Ptr (Ptr CFloat) -> CInt -> Ptr CInt -> Ptr (Ptr CFloat) -> CInt -> Ptr CInt -> CInt -> IO ())
+
+-- | p_THCudaBlas_Dgetrs : Pointer to function : state transa n nrhs a lda pivot b ldb info batchSize -> void
+foreign import ccall "THCBlas.h &THCudaBlas_Dgetrs"
+  p_THCudaBlas_Dgetrs :: FunPtr (Ptr C'THCState -> CChar -> CInt -> CInt -> Ptr (Ptr CDouble) -> CInt -> Ptr CInt -> Ptr (Ptr CDouble) -> CInt -> Ptr CInt -> CInt -> IO ())
+
+-- | p_THCudaBlas_Sgetri : Pointer to function : state n a lda pivot c ldc info batchSize -> void
+foreign import ccall "THCBlas.h &THCudaBlas_Sgetri"
+  p_THCudaBlas_Sgetri :: FunPtr (Ptr C'THCState -> CInt -> Ptr (Ptr CFloat) -> CInt -> Ptr CInt -> Ptr (Ptr CFloat) -> CInt -> Ptr CInt -> CInt -> IO ())
+
+-- | p_THCudaBlas_Dgetri : Pointer to function : state n a lda pivot c ldc info batchSize -> void
+foreign import ccall "THCBlas.h &THCudaBlas_Dgetri"
+  p_THCudaBlas_Dgetri :: FunPtr (Ptr C'THCState -> CInt -> Ptr (Ptr CDouble) -> CInt -> Ptr CInt -> Ptr (Ptr CDouble) -> CInt -> Ptr CInt -> CInt -> IO ())
diff --git a/src/Torch/FFI/THC/Byte/Storage.hs b/src/Torch/FFI/THC/Byte/Storage.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Byte/Storage.hs
@@ -0,0 +1,161 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Byte.Storage where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_data :  state  -> real *
+foreign import ccall "THCStorage.h THCudaByteStorage_data"
+  c_data :: Ptr C'THCState -> Ptr C'THCByteStorage -> IO (Ptr CUChar)
+
+-- | c_size :  state  -> ptrdiff_t
+foreign import ccall "THCStorage.h THCudaByteStorage_size"
+  c_size :: Ptr C'THCState -> Ptr C'THCByteStorage -> IO CPtrdiff
+
+-- | c_set :  state    -> void
+foreign import ccall "THCStorage.h THCudaByteStorage_set"
+  c_set :: Ptr C'THCState -> Ptr C'THCByteStorage -> CPtrdiff -> CUChar -> IO ()
+
+-- | c_get :  state   -> real
+foreign import ccall "THCStorage.h THCudaByteStorage_get"
+  c_get :: Ptr C'THCState -> Ptr C'THCByteStorage -> CPtrdiff -> IO CUChar
+
+-- | c_new :  state -> THCStorage *
+foreign import ccall "THCStorage.h THCudaByteStorage_new"
+  c_new :: Ptr C'THCState -> IO (Ptr C'THCByteStorage)
+
+-- | c_newWithSize :  state size -> THCStorage *
+foreign import ccall "THCStorage.h THCudaByteStorage_newWithSize"
+  c_newWithSize :: Ptr C'THCState -> CPtrdiff -> IO (Ptr C'THCByteStorage)
+
+-- | c_newWithSize1 :  state  -> THCStorage *
+foreign import ccall "THCStorage.h THCudaByteStorage_newWithSize1"
+  c_newWithSize1 :: Ptr C'THCState -> CUChar -> IO (Ptr C'THCByteStorage)
+
+-- | c_newWithSize2 :  state   -> THCStorage *
+foreign import ccall "THCStorage.h THCudaByteStorage_newWithSize2"
+  c_newWithSize2 :: Ptr C'THCState -> CUChar -> CUChar -> IO (Ptr C'THCByteStorage)
+
+-- | c_newWithSize3 :  state    -> THCStorage *
+foreign import ccall "THCStorage.h THCudaByteStorage_newWithSize3"
+  c_newWithSize3 :: Ptr C'THCState -> CUChar -> CUChar -> CUChar -> IO (Ptr C'THCByteStorage)
+
+-- | c_newWithSize4 :  state     -> THCStorage *
+foreign import ccall "THCStorage.h THCudaByteStorage_newWithSize4"
+  c_newWithSize4 :: Ptr C'THCState -> CUChar -> CUChar -> CUChar -> CUChar -> IO (Ptr C'THCByteStorage)
+
+-- | c_newWithMapping :  state filename size shared -> THCStorage *
+foreign import ccall "THCStorage.h THCudaByteStorage_newWithMapping"
+  c_newWithMapping :: Ptr C'THCState -> Ptr CChar -> CPtrdiff -> CInt -> IO (Ptr C'THCByteStorage)
+
+-- | c_newWithData :  state data size -> THCStorage *
+foreign import ccall "THCStorage.h THCudaByteStorage_newWithData"
+  c_newWithData :: Ptr C'THCState -> Ptr CUChar -> CPtrdiff -> IO (Ptr C'THCByteStorage)
+
+-- | c_setFlag :  state storage flag -> void
+foreign import ccall "THCStorage.h THCudaByteStorage_setFlag"
+  c_setFlag :: Ptr C'THCState -> Ptr C'THCByteStorage -> CChar -> IO ()
+
+-- | c_clearFlag :  state storage flag -> void
+foreign import ccall "THCStorage.h THCudaByteStorage_clearFlag"
+  c_clearFlag :: Ptr C'THCState -> Ptr C'THCByteStorage -> CChar -> IO ()
+
+-- | c_retain :  state storage -> void
+foreign import ccall "THCStorage.h THCudaByteStorage_retain"
+  c_retain :: Ptr C'THCState -> Ptr C'THCByteStorage -> IO ()
+
+-- | c_free :  state storage -> void
+foreign import ccall "THCStorage.h THCudaByteStorage_free"
+  c_free :: Ptr C'THCState -> Ptr C'THCByteStorage -> IO ()
+
+-- | c_resize :  state storage size -> void
+foreign import ccall "THCStorage.h THCudaByteStorage_resize"
+  c_resize :: Ptr C'THCState -> Ptr C'THCByteStorage -> CPtrdiff -> IO ()
+
+-- | c_fill :  state storage value -> void
+foreign import ccall "THCStorage.h THCudaByteStorage_fill"
+  c_fill :: Ptr C'THCState -> Ptr C'THCByteStorage -> CUChar -> IO ()
+
+-- | c_getDevice :  state storage -> int
+foreign import ccall "THCStorage.h THCudaByteStorage_getDevice"
+  c_getDevice :: Ptr C'THCState -> Ptr C'THCByteStorage -> IO CInt
+
+-- | p_data : Pointer to function : state  -> real *
+foreign import ccall "THCStorage.h &THCudaByteStorage_data"
+  p_data :: FunPtr (Ptr C'THCState -> Ptr C'THCByteStorage -> IO (Ptr CUChar))
+
+-- | p_size : Pointer to function : state  -> ptrdiff_t
+foreign import ccall "THCStorage.h &THCudaByteStorage_size"
+  p_size :: FunPtr (Ptr C'THCState -> Ptr C'THCByteStorage -> IO CPtrdiff)
+
+-- | p_set : Pointer to function : state    -> void
+foreign import ccall "THCStorage.h &THCudaByteStorage_set"
+  p_set :: FunPtr (Ptr C'THCState -> Ptr C'THCByteStorage -> CPtrdiff -> CUChar -> IO ())
+
+-- | p_get : Pointer to function : state   -> real
+foreign import ccall "THCStorage.h &THCudaByteStorage_get"
+  p_get :: FunPtr (Ptr C'THCState -> Ptr C'THCByteStorage -> CPtrdiff -> IO CUChar)
+
+-- | p_new : Pointer to function : state -> THCStorage *
+foreign import ccall "THCStorage.h &THCudaByteStorage_new"
+  p_new :: FunPtr (Ptr C'THCState -> IO (Ptr C'THCByteStorage))
+
+-- | p_newWithSize : Pointer to function : state size -> THCStorage *
+foreign import ccall "THCStorage.h &THCudaByteStorage_newWithSize"
+  p_newWithSize :: FunPtr (Ptr C'THCState -> CPtrdiff -> IO (Ptr C'THCByteStorage))
+
+-- | p_newWithSize1 : Pointer to function : state  -> THCStorage *
+foreign import ccall "THCStorage.h &THCudaByteStorage_newWithSize1"
+  p_newWithSize1 :: FunPtr (Ptr C'THCState -> CUChar -> IO (Ptr C'THCByteStorage))
+
+-- | p_newWithSize2 : Pointer to function : state   -> THCStorage *
+foreign import ccall "THCStorage.h &THCudaByteStorage_newWithSize2"
+  p_newWithSize2 :: FunPtr (Ptr C'THCState -> CUChar -> CUChar -> IO (Ptr C'THCByteStorage))
+
+-- | p_newWithSize3 : Pointer to function : state    -> THCStorage *
+foreign import ccall "THCStorage.h &THCudaByteStorage_newWithSize3"
+  p_newWithSize3 :: FunPtr (Ptr C'THCState -> CUChar -> CUChar -> CUChar -> IO (Ptr C'THCByteStorage))
+
+-- | p_newWithSize4 : Pointer to function : state     -> THCStorage *
+foreign import ccall "THCStorage.h &THCudaByteStorage_newWithSize4"
+  p_newWithSize4 :: FunPtr (Ptr C'THCState -> CUChar -> CUChar -> CUChar -> CUChar -> IO (Ptr C'THCByteStorage))
+
+-- | p_newWithMapping : Pointer to function : state filename size shared -> THCStorage *
+foreign import ccall "THCStorage.h &THCudaByteStorage_newWithMapping"
+  p_newWithMapping :: FunPtr (Ptr C'THCState -> Ptr CChar -> CPtrdiff -> CInt -> IO (Ptr C'THCByteStorage))
+
+-- | p_newWithData : Pointer to function : state data size -> THCStorage *
+foreign import ccall "THCStorage.h &THCudaByteStorage_newWithData"
+  p_newWithData :: FunPtr (Ptr C'THCState -> Ptr CUChar -> CPtrdiff -> IO (Ptr C'THCByteStorage))
+
+-- | p_setFlag : Pointer to function : state storage flag -> void
+foreign import ccall "THCStorage.h &THCudaByteStorage_setFlag"
+  p_setFlag :: FunPtr (Ptr C'THCState -> Ptr C'THCByteStorage -> CChar -> IO ())
+
+-- | p_clearFlag : Pointer to function : state storage flag -> void
+foreign import ccall "THCStorage.h &THCudaByteStorage_clearFlag"
+  p_clearFlag :: FunPtr (Ptr C'THCState -> Ptr C'THCByteStorage -> CChar -> IO ())
+
+-- | p_retain : Pointer to function : state storage -> void
+foreign import ccall "THCStorage.h &THCudaByteStorage_retain"
+  p_retain :: FunPtr (Ptr C'THCState -> Ptr C'THCByteStorage -> IO ())
+
+-- | p_free : Pointer to function : state storage -> void
+foreign import ccall "THCStorage.h &THCudaByteStorage_free"
+  p_free :: FunPtr (Ptr C'THCState -> Ptr C'THCByteStorage -> IO ())
+
+-- | p_resize : Pointer to function : state storage size -> void
+foreign import ccall "THCStorage.h &THCudaByteStorage_resize"
+  p_resize :: FunPtr (Ptr C'THCState -> Ptr C'THCByteStorage -> CPtrdiff -> IO ())
+
+-- | p_fill : Pointer to function : state storage value -> void
+foreign import ccall "THCStorage.h &THCudaByteStorage_fill"
+  p_fill :: FunPtr (Ptr C'THCState -> Ptr C'THCByteStorage -> CUChar -> IO ())
+
+-- | p_getDevice : Pointer to function : state storage -> int
+foreign import ccall "THCStorage.h &THCudaByteStorage_getDevice"
+  p_getDevice :: FunPtr (Ptr C'THCState -> Ptr C'THCByteStorage -> IO CInt)
diff --git a/src/Torch/FFI/THC/Byte/StorageCopy.hs b/src/Torch/FFI/THC/Byte/StorageCopy.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Byte/StorageCopy.hs
@@ -0,0 +1,113 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Byte.StorageCopy where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_rawCopy :  state storage src -> void
+foreign import ccall "THCStorageCopy.h THCudaByteStorage_rawCopy"
+  c_rawCopy :: Ptr C'THCState -> Ptr C'THCByteStorage -> Ptr CUChar -> IO ()
+
+-- | c_copy :  state storage src -> void
+foreign import ccall "THCStorageCopy.h THCudaByteStorage_copy"
+  c_copy :: Ptr C'THCState -> Ptr C'THCByteStorage -> Ptr C'THCByteStorage -> IO ()
+
+-- | c_copyByte :  state storage src -> void
+foreign import ccall "THCStorageCopy.h THCudaByteStorage_copyByte"
+  c_copyByte :: Ptr C'THCState -> Ptr C'THCByteStorage -> Ptr C'THByteStorage -> IO ()
+
+-- | c_copyChar :  state storage src -> void
+foreign import ccall "THCStorageCopy.h THCudaByteStorage_copyChar"
+  c_copyChar :: Ptr C'THCState -> Ptr C'THCByteStorage -> Ptr C'THCharStorage -> IO ()
+
+-- | c_copyShort :  state storage src -> void
+foreign import ccall "THCStorageCopy.h THCudaByteStorage_copyShort"
+  c_copyShort :: Ptr C'THCState -> Ptr C'THCByteStorage -> Ptr C'THShortStorage -> IO ()
+
+-- | c_copyInt :  state storage src -> void
+foreign import ccall "THCStorageCopy.h THCudaByteStorage_copyInt"
+  c_copyInt :: Ptr C'THCState -> Ptr C'THCByteStorage -> Ptr C'THIntStorage -> IO ()
+
+-- | c_copyLong :  state storage src -> void
+foreign import ccall "THCStorageCopy.h THCudaByteStorage_copyLong"
+  c_copyLong :: Ptr C'THCState -> Ptr C'THCByteStorage -> Ptr C'THLongStorage -> IO ()
+
+-- | c_copyFloat :  state storage src -> void
+foreign import ccall "THCStorageCopy.h THCudaByteStorage_copyFloat"
+  c_copyFloat :: Ptr C'THCState -> Ptr C'THCByteStorage -> Ptr C'THFloatStorage -> IO ()
+
+-- | c_copyDouble :  state storage src -> void
+foreign import ccall "THCStorageCopy.h THCudaByteStorage_copyDouble"
+  c_copyDouble :: Ptr C'THCState -> Ptr C'THCByteStorage -> Ptr C'THDoubleStorage -> IO ()
+
+-- | c_copyHalf :  state storage src -> void
+foreign import ccall "THCStorageCopy.h THCudaByteStorage_copyHalf"
+  c_copyHalf :: Ptr C'THCState -> Ptr C'THCByteStorage -> Ptr C'THHalfStorage -> IO ()
+
+-- | c_thCopyCuda :  state self src -> void
+foreign import ccall "THCStorageCopy.h THByteStorage_copyCuda"
+  c_thCopyCuda :: Ptr C'THCState -> Ptr C'THByteStorage -> Ptr C'THCByteStorage -> IO ()
+
+-- | c_copyCuda :  state self src -> void
+foreign import ccall "THCStorageCopy.h THCudaByteStorage_copyCuda"
+  c_copyCuda :: Ptr C'THCState -> Ptr C'THCByteStorage -> Ptr C'THCByteStorage -> IO ()
+
+-- | c_copyCPU :  state self src -> void
+foreign import ccall "THCStorageCopy.h THCudaByteStorage_copyCPU"
+  c_copyCPU :: Ptr C'THCState -> Ptr C'THCByteStorage -> Ptr C'THByteStorage -> IO ()
+
+-- | p_rawCopy : Pointer to function : state storage src -> void
+foreign import ccall "THCStorageCopy.h &THCudaByteStorage_rawCopy"
+  p_rawCopy :: FunPtr (Ptr C'THCState -> Ptr C'THCByteStorage -> Ptr CUChar -> IO ())
+
+-- | p_copy : Pointer to function : state storage src -> void
+foreign import ccall "THCStorageCopy.h &THCudaByteStorage_copy"
+  p_copy :: FunPtr (Ptr C'THCState -> Ptr C'THCByteStorage -> Ptr C'THCByteStorage -> IO ())
+
+-- | p_copyByte : Pointer to function : state storage src -> void
+foreign import ccall "THCStorageCopy.h &THCudaByteStorage_copyByte"
+  p_copyByte :: FunPtr (Ptr C'THCState -> Ptr C'THCByteStorage -> Ptr C'THByteStorage -> IO ())
+
+-- | p_copyChar : Pointer to function : state storage src -> void
+foreign import ccall "THCStorageCopy.h &THCudaByteStorage_copyChar"
+  p_copyChar :: FunPtr (Ptr C'THCState -> Ptr C'THCByteStorage -> Ptr C'THCharStorage -> IO ())
+
+-- | p_copyShort : Pointer to function : state storage src -> void
+foreign import ccall "THCStorageCopy.h &THCudaByteStorage_copyShort"
+  p_copyShort :: FunPtr (Ptr C'THCState -> Ptr C'THCByteStorage -> Ptr C'THShortStorage -> IO ())
+
+-- | p_copyInt : Pointer to function : state storage src -> void
+foreign import ccall "THCStorageCopy.h &THCudaByteStorage_copyInt"
+  p_copyInt :: FunPtr (Ptr C'THCState -> Ptr C'THCByteStorage -> Ptr C'THIntStorage -> IO ())
+
+-- | p_copyLong : Pointer to function : state storage src -> void
+foreign import ccall "THCStorageCopy.h &THCudaByteStorage_copyLong"
+  p_copyLong :: FunPtr (Ptr C'THCState -> Ptr C'THCByteStorage -> Ptr C'THLongStorage -> IO ())
+
+-- | p_copyFloat : Pointer to function : state storage src -> void
+foreign import ccall "THCStorageCopy.h &THCudaByteStorage_copyFloat"
+  p_copyFloat :: FunPtr (Ptr C'THCState -> Ptr C'THCByteStorage -> Ptr C'THFloatStorage -> IO ())
+
+-- | p_copyDouble : Pointer to function : state storage src -> void
+foreign import ccall "THCStorageCopy.h &THCudaByteStorage_copyDouble"
+  p_copyDouble :: FunPtr (Ptr C'THCState -> Ptr C'THCByteStorage -> Ptr C'THDoubleStorage -> IO ())
+
+-- | p_copyHalf : Pointer to function : state storage src -> void
+foreign import ccall "THCStorageCopy.h &THCudaByteStorage_copyHalf"
+  p_copyHalf :: FunPtr (Ptr C'THCState -> Ptr C'THCByteStorage -> Ptr C'THHalfStorage -> IO ())
+
+-- | p_thCopyCuda : Pointer to function : state self src -> void
+foreign import ccall "THCStorageCopy.h &THByteStorage_copyCuda"
+  p_thCopyCuda :: FunPtr (Ptr C'THCState -> Ptr C'THByteStorage -> Ptr C'THCByteStorage -> IO ())
+
+-- | p_copyCuda : Pointer to function : state self src -> void
+foreign import ccall "THCStorageCopy.h &THCudaByteStorage_copyCuda"
+  p_copyCuda :: FunPtr (Ptr C'THCState -> Ptr C'THCByteStorage -> Ptr C'THCByteStorage -> IO ())
+
+-- | p_copyCPU : Pointer to function : state self src -> void
+foreign import ccall "THCStorageCopy.h &THCudaByteStorage_copyCPU"
+  p_copyCPU :: FunPtr (Ptr C'THCState -> Ptr C'THCByteStorage -> Ptr C'THByteStorage -> IO ())
diff --git a/src/Torch/FFI/THC/Byte/Tensor.hs b/src/Torch/FFI/THC/Byte/Tensor.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Byte/Tensor.hs
@@ -0,0 +1,593 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Byte.Tensor where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_storage :  state self -> THCStorage *
+foreign import ccall "THCTensor.h THCudaByteTensor_storage"
+  c_storage :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> IO (Ptr C'THCByteStorage)
+
+-- | c_storageOffset :  state self -> ptrdiff_t
+foreign import ccall "THCTensor.h THCudaByteTensor_storageOffset"
+  c_storageOffset :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> IO CPtrdiff
+
+-- | c_nDimension :  state self -> int
+foreign import ccall "THCTensor.h THCudaByteTensor_nDimension"
+  c_nDimension :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> IO CInt
+
+-- | c_size :  state self dim -> int64_t
+foreign import ccall "THCTensor.h THCudaByteTensor_size"
+  c_size :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> CInt -> IO CLLong
+
+-- | c_stride :  state self dim -> int64_t
+foreign import ccall "THCTensor.h THCudaByteTensor_stride"
+  c_stride :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> CInt -> IO CLLong
+
+-- | c_newSizeOf :  state self -> THLongStorage *
+foreign import ccall "THCTensor.h THCudaByteTensor_newSizeOf"
+  c_newSizeOf :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> IO (Ptr C'THLongStorage)
+
+-- | c_newStrideOf :  state self -> THLongStorage *
+foreign import ccall "THCTensor.h THCudaByteTensor_newStrideOf"
+  c_newStrideOf :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> IO (Ptr C'THLongStorage)
+
+-- | c_data :  state self -> real *
+foreign import ccall "THCTensor.h THCudaByteTensor_data"
+  c_data :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> IO (Ptr CUChar)
+
+-- | c_setFlag :  state self flag -> void
+foreign import ccall "THCTensor.h THCudaByteTensor_setFlag"
+  c_setFlag :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> CChar -> IO ()
+
+-- | c_clearFlag :  state self flag -> void
+foreign import ccall "THCTensor.h THCudaByteTensor_clearFlag"
+  c_clearFlag :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> CChar -> IO ()
+
+-- | c_new :  state -> THCTensor *
+foreign import ccall "THCTensor.h THCudaByteTensor_new"
+  c_new :: Ptr C'THCState -> IO (Ptr C'THCudaByteTensor)
+
+-- | c_newWithTensor :  state tensor -> THCTensor *
+foreign import ccall "THCTensor.h THCudaByteTensor_newWithTensor"
+  c_newWithTensor :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> IO (Ptr C'THCudaByteTensor)
+
+-- | c_newWithStorage :  state storage_ storageOffset_ size_ stride_ -> THCTensor *
+foreign import ccall "THCTensor.h THCudaByteTensor_newWithStorage"
+  c_newWithStorage :: Ptr C'THCState -> Ptr C'THCByteStorage -> CPtrdiff -> Ptr C'THLongStorage -> Ptr C'THLongStorage -> IO (Ptr C'THCudaByteTensor)
+
+-- | c_newWithStorage1d :  state storage_ storageOffset_ size0_ stride0_ -> THCTensor *
+foreign import ccall "THCTensor.h THCudaByteTensor_newWithStorage1d"
+  c_newWithStorage1d :: Ptr C'THCState -> Ptr C'THCByteStorage -> CPtrdiff -> CLLong -> CLLong -> IO (Ptr C'THCudaByteTensor)
+
+-- | c_newWithStorage2d :  state storage_ storageOffset_ size0_ stride0_ size1_ stride1_ -> THCTensor *
+foreign import ccall "THCTensor.h THCudaByteTensor_newWithStorage2d"
+  c_newWithStorage2d :: Ptr C'THCState -> Ptr C'THCByteStorage -> CPtrdiff -> CLLong -> CLLong -> CLLong -> CLLong -> IO (Ptr C'THCudaByteTensor)
+
+-- | c_newWithStorage3d :  state storage_ storageOffset_ size0_ stride0_ size1_ stride1_ size2_ stride2_ -> THCTensor *
+foreign import ccall "THCTensor.h THCudaByteTensor_newWithStorage3d"
+  c_newWithStorage3d :: Ptr C'THCState -> Ptr C'THCByteStorage -> CPtrdiff -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> IO (Ptr C'THCudaByteTensor)
+
+-- | c_newWithStorage4d :  state storage_ storageOffset_ size0_ stride0_ size1_ stride1_ size2_ stride2_ size3_ stride3_ -> THCTensor *
+foreign import ccall "THCTensor.h THCudaByteTensor_newWithStorage4d"
+  c_newWithStorage4d :: Ptr C'THCState -> Ptr C'THCByteStorage -> CPtrdiff -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> IO (Ptr C'THCudaByteTensor)
+
+-- | c_newWithSize :  state size_ stride_ -> THCTensor *
+foreign import ccall "THCTensor.h THCudaByteTensor_newWithSize"
+  c_newWithSize :: Ptr C'THCState -> Ptr C'THLongStorage -> Ptr C'THLongStorage -> IO (Ptr C'THCudaByteTensor)
+
+-- | c_newWithSize1d :  state size0_ -> THCTensor *
+foreign import ccall "THCTensor.h THCudaByteTensor_newWithSize1d"
+  c_newWithSize1d :: Ptr C'THCState -> CLLong -> IO (Ptr C'THCudaByteTensor)
+
+-- | c_newWithSize2d :  state size0_ size1_ -> THCTensor *
+foreign import ccall "THCTensor.h THCudaByteTensor_newWithSize2d"
+  c_newWithSize2d :: Ptr C'THCState -> CLLong -> CLLong -> IO (Ptr C'THCudaByteTensor)
+
+-- | c_newWithSize3d :  state size0_ size1_ size2_ -> THCTensor *
+foreign import ccall "THCTensor.h THCudaByteTensor_newWithSize3d"
+  c_newWithSize3d :: Ptr C'THCState -> CLLong -> CLLong -> CLLong -> IO (Ptr C'THCudaByteTensor)
+
+-- | c_newWithSize4d :  state size0_ size1_ size2_ size3_ -> THCTensor *
+foreign import ccall "THCTensor.h THCudaByteTensor_newWithSize4d"
+  c_newWithSize4d :: Ptr C'THCState -> CLLong -> CLLong -> CLLong -> CLLong -> IO (Ptr C'THCudaByteTensor)
+
+-- | c_newClone :  state self -> THCTensor *
+foreign import ccall "THCTensor.h THCudaByteTensor_newClone"
+  c_newClone :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> IO (Ptr C'THCudaByteTensor)
+
+-- | c_newContiguous :  state tensor -> THCTensor *
+foreign import ccall "THCTensor.h THCudaByteTensor_newContiguous"
+  c_newContiguous :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> IO (Ptr C'THCudaByteTensor)
+
+-- | c_newSelect :  state tensor dimension_ sliceIndex_ -> THCTensor *
+foreign import ccall "THCTensor.h THCudaByteTensor_newSelect"
+  c_newSelect :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> CInt -> CLLong -> IO (Ptr C'THCudaByteTensor)
+
+-- | c_newNarrow :  state tensor dimension_ firstIndex_ size_ -> THCTensor *
+foreign import ccall "THCTensor.h THCudaByteTensor_newNarrow"
+  c_newNarrow :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> CInt -> CLLong -> CLLong -> IO (Ptr C'THCudaByteTensor)
+
+-- | c_newTranspose :  state tensor dimension1_ dimension2_ -> THCTensor *
+foreign import ccall "THCTensor.h THCudaByteTensor_newTranspose"
+  c_newTranspose :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> CInt -> CInt -> IO (Ptr C'THCudaByteTensor)
+
+-- | c_newUnfold :  state tensor dimension_ size_ step_ -> THCTensor *
+foreign import ccall "THCTensor.h THCudaByteTensor_newUnfold"
+  c_newUnfold :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> CInt -> CLLong -> CLLong -> IO (Ptr C'THCudaByteTensor)
+
+-- | c_newView :  state tensor size -> THCTensor *
+foreign import ccall "THCTensor.h THCudaByteTensor_newView"
+  c_newView :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THLongStorage -> IO (Ptr C'THCudaByteTensor)
+
+-- | c_newFoldBatchDim :  state input -> THCTensor *
+foreign import ccall "THCTensor.h THCudaByteTensor_newFoldBatchDim"
+  c_newFoldBatchDim :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> IO (Ptr C'THCudaByteTensor)
+
+-- | c_newExpand :  state tensor size -> THCTensor *
+foreign import ccall "THCTensor.h THCudaByteTensor_newExpand"
+  c_newExpand :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THLongStorage -> IO (Ptr C'THCudaByteTensor)
+
+-- | c_expand :  state r tensor sizes -> void
+foreign import ccall "THCTensor.h THCudaByteTensor_expand"
+  c_expand :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> Ptr C'THLongStorage -> IO ()
+
+-- | c_expandNd :  state rets ops count -> void
+foreign import ccall "THCTensor.h THCudaByteTensor_expandNd"
+  c_expandNd :: Ptr C'THCState -> Ptr (Ptr C'THCudaByteTensor) -> Ptr (Ptr C'THCudaByteTensor) -> CInt -> IO ()
+
+-- | c_resize :  state tensor size stride -> void
+foreign import ccall "THCTensor.h THCudaByteTensor_resize"
+  c_resize :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THLongStorage -> Ptr C'THLongStorage -> IO ()
+
+-- | c_resizeAs :  state tensor src -> void
+foreign import ccall "THCTensor.h THCudaByteTensor_resizeAs"
+  c_resizeAs :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> IO ()
+
+-- | c_resize1d :  state tensor size0_ -> void
+foreign import ccall "THCTensor.h THCudaByteTensor_resize1d"
+  c_resize1d :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> CLLong -> IO ()
+
+-- | c_resize2d :  state tensor size0_ size1_ -> void
+foreign import ccall "THCTensor.h THCudaByteTensor_resize2d"
+  c_resize2d :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> CLLong -> CLLong -> IO ()
+
+-- | c_resize3d :  state tensor size0_ size1_ size2_ -> void
+foreign import ccall "THCTensor.h THCudaByteTensor_resize3d"
+  c_resize3d :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> CLLong -> CLLong -> CLLong -> IO ()
+
+-- | c_resize4d :  state tensor size0_ size1_ size2_ size3_ -> void
+foreign import ccall "THCTensor.h THCudaByteTensor_resize4d"
+  c_resize4d :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> CLLong -> CLLong -> CLLong -> CLLong -> IO ()
+
+-- | c_resize5d :  state tensor size0_ size1_ size2_ size3_ size4_ -> void
+foreign import ccall "THCTensor.h THCudaByteTensor_resize5d"
+  c_resize5d :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> IO ()
+
+-- | c_resizeNd :  state tensor nDimension size stride -> void
+foreign import ccall "THCTensor.h THCudaByteTensor_resizeNd"
+  c_resizeNd :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> CInt -> Ptr CLLong -> Ptr CLLong -> IO ()
+
+-- | c_set :  state self src -> void
+foreign import ccall "THCTensor.h THCudaByteTensor_set"
+  c_set :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> IO ()
+
+-- | c_setStorage :  state self storage_ storageOffset_ size_ stride_ -> void
+foreign import ccall "THCTensor.h THCudaByteTensor_setStorage"
+  c_setStorage :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCByteStorage -> CPtrdiff -> Ptr C'THLongStorage -> Ptr C'THLongStorage -> IO ()
+
+-- | c_setStorageNd :  state self storage storageOffset nDimension size stride -> void
+foreign import ccall "THCTensor.h THCudaByteTensor_setStorageNd"
+  c_setStorageNd :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCByteStorage -> CPtrdiff -> CInt -> Ptr CLLong -> Ptr CLLong -> IO ()
+
+-- | c_setStorage1d :  state self storage_ storageOffset_ size0_ stride0_ -> void
+foreign import ccall "THCTensor.h THCudaByteTensor_setStorage1d"
+  c_setStorage1d :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCByteStorage -> CPtrdiff -> CLLong -> CLLong -> IO ()
+
+-- | c_setStorage2d :  state self storage_ storageOffset_ size0_ stride0_ size1_ stride1_ -> void
+foreign import ccall "THCTensor.h THCudaByteTensor_setStorage2d"
+  c_setStorage2d :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCByteStorage -> CPtrdiff -> CLLong -> CLLong -> CLLong -> CLLong -> IO ()
+
+-- | c_setStorage3d :  state self storage_ storageOffset_ size0_ stride0_ size1_ stride1_ size2_ stride2_ -> void
+foreign import ccall "THCTensor.h THCudaByteTensor_setStorage3d"
+  c_setStorage3d :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCByteStorage -> CPtrdiff -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> IO ()
+
+-- | c_setStorage4d :  state self storage_ storageOffset_ size0_ stride0_ size1_ stride1_ size2_ stride2_ size3_ stride3_ -> void
+foreign import ccall "THCTensor.h THCudaByteTensor_setStorage4d"
+  c_setStorage4d :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCByteStorage -> CPtrdiff -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> IO ()
+
+-- | c_narrow :  state self src dimension_ firstIndex_ size_ -> void
+foreign import ccall "THCTensor.h THCudaByteTensor_narrow"
+  c_narrow :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> CInt -> CLLong -> CLLong -> IO ()
+
+-- | c_select :  state self src dimension_ sliceIndex_ -> void
+foreign import ccall "THCTensor.h THCudaByteTensor_select"
+  c_select :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> CInt -> CLLong -> IO ()
+
+-- | c_transpose :  state self src dimension1_ dimension2_ -> void
+foreign import ccall "THCTensor.h THCudaByteTensor_transpose"
+  c_transpose :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> CInt -> CInt -> IO ()
+
+-- | c_unfold :  state self src dimension_ size_ step_ -> void
+foreign import ccall "THCTensor.h THCudaByteTensor_unfold"
+  c_unfold :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> CInt -> CLLong -> CLLong -> IO ()
+
+-- | c_squeeze :  state self src -> void
+foreign import ccall "THCTensor.h THCudaByteTensor_squeeze"
+  c_squeeze :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> IO ()
+
+-- | c_squeeze1d :  state self src dimension_ -> void
+foreign import ccall "THCTensor.h THCudaByteTensor_squeeze1d"
+  c_squeeze1d :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> CInt -> IO ()
+
+-- | c_unsqueeze1d :  state self src dimension_ -> void
+foreign import ccall "THCTensor.h THCudaByteTensor_unsqueeze1d"
+  c_unsqueeze1d :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> CInt -> IO ()
+
+-- | c_isContiguous :  state self -> int
+foreign import ccall "THCTensor.h THCudaByteTensor_isContiguous"
+  c_isContiguous :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> IO CInt
+
+-- | c_isSameSizeAs :  state self src -> int
+foreign import ccall "THCTensor.h THCudaByteTensor_isSameSizeAs"
+  c_isSameSizeAs :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> IO CInt
+
+-- | c_isSetTo :  state self src -> int
+foreign import ccall "THCTensor.h THCudaByteTensor_isSetTo"
+  c_isSetTo :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> IO CInt
+
+-- | c_isSize :  state self dims -> int
+foreign import ccall "THCTensor.h THCudaByteTensor_isSize"
+  c_isSize :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THLongStorage -> IO CInt
+
+-- | c_nElement :  state self -> ptrdiff_t
+foreign import ccall "THCTensor.h THCudaByteTensor_nElement"
+  c_nElement :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> IO CPtrdiff
+
+-- | c_retain :  state self -> void
+foreign import ccall "THCTensor.h THCudaByteTensor_retain"
+  c_retain :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> IO ()
+
+-- | c_free :  state self -> void
+foreign import ccall "THCTensor.h THCudaByteTensor_free"
+  c_free :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> IO ()
+
+-- | c_freeCopyTo :  state self dst -> void
+foreign import ccall "THCTensor.h THCudaByteTensor_freeCopyTo"
+  c_freeCopyTo :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> IO ()
+
+-- | c_set1d :  state tensor x0 value -> void
+foreign import ccall "THCTensor.h THCudaByteTensor_set1d"
+  c_set1d :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> CLLong -> CUChar -> IO ()
+
+-- | c_set2d :  state tensor x0 x1 value -> void
+foreign import ccall "THCTensor.h THCudaByteTensor_set2d"
+  c_set2d :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> CLLong -> CLLong -> CUChar -> IO ()
+
+-- | c_set3d :  state tensor x0 x1 x2 value -> void
+foreign import ccall "THCTensor.h THCudaByteTensor_set3d"
+  c_set3d :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> CLLong -> CLLong -> CLLong -> CUChar -> IO ()
+
+-- | c_set4d :  state tensor x0 x1 x2 x3 value -> void
+foreign import ccall "THCTensor.h THCudaByteTensor_set4d"
+  c_set4d :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> CLLong -> CLLong -> CLLong -> CLLong -> CUChar -> IO ()
+
+-- | c_get1d :  state tensor x0 -> real
+foreign import ccall "THCTensor.h THCudaByteTensor_get1d"
+  c_get1d :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> CLLong -> IO CUChar
+
+-- | c_get2d :  state tensor x0 x1 -> real
+foreign import ccall "THCTensor.h THCudaByteTensor_get2d"
+  c_get2d :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> CLLong -> CLLong -> IO CUChar
+
+-- | c_get3d :  state tensor x0 x1 x2 -> real
+foreign import ccall "THCTensor.h THCudaByteTensor_get3d"
+  c_get3d :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> CLLong -> CLLong -> CLLong -> IO CUChar
+
+-- | c_get4d :  state tensor x0 x1 x2 x3 -> real
+foreign import ccall "THCTensor.h THCudaByteTensor_get4d"
+  c_get4d :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> CLLong -> CLLong -> CLLong -> CLLong -> IO CUChar
+
+-- | c_getDevice :  state self -> int
+foreign import ccall "THCTensor.h THCudaByteTensor_getDevice"
+  c_getDevice :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> IO CInt
+
+-- | c_sizeDesc :  state tensor -> THCDescBuff
+foreign import ccall "THCTensor.h THCudaByteTensor_sizeDesc"
+  c_sizeDesc :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> IO (Ptr C'THCDescBuff)
+
+-- | p_storage : Pointer to function : state self -> THCStorage *
+foreign import ccall "THCTensor.h &THCudaByteTensor_storage"
+  p_storage :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> IO (Ptr C'THCByteStorage))
+
+-- | p_storageOffset : Pointer to function : state self -> ptrdiff_t
+foreign import ccall "THCTensor.h &THCudaByteTensor_storageOffset"
+  p_storageOffset :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> IO CPtrdiff)
+
+-- | p_nDimension : Pointer to function : state self -> int
+foreign import ccall "THCTensor.h &THCudaByteTensor_nDimension"
+  p_nDimension :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> IO CInt)
+
+-- | p_size : Pointer to function : state self dim -> int64_t
+foreign import ccall "THCTensor.h &THCudaByteTensor_size"
+  p_size :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> CInt -> IO CLLong)
+
+-- | p_stride : Pointer to function : state self dim -> int64_t
+foreign import ccall "THCTensor.h &THCudaByteTensor_stride"
+  p_stride :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> CInt -> IO CLLong)
+
+-- | p_newSizeOf : Pointer to function : state self -> THLongStorage *
+foreign import ccall "THCTensor.h &THCudaByteTensor_newSizeOf"
+  p_newSizeOf :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> IO (Ptr C'THLongStorage))
+
+-- | p_newStrideOf : Pointer to function : state self -> THLongStorage *
+foreign import ccall "THCTensor.h &THCudaByteTensor_newStrideOf"
+  p_newStrideOf :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> IO (Ptr C'THLongStorage))
+
+-- | p_data : Pointer to function : state self -> real *
+foreign import ccall "THCTensor.h &THCudaByteTensor_data"
+  p_data :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> IO (Ptr CUChar))
+
+-- | p_setFlag : Pointer to function : state self flag -> void
+foreign import ccall "THCTensor.h &THCudaByteTensor_setFlag"
+  p_setFlag :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> CChar -> IO ())
+
+-- | p_clearFlag : Pointer to function : state self flag -> void
+foreign import ccall "THCTensor.h &THCudaByteTensor_clearFlag"
+  p_clearFlag :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> CChar -> IO ())
+
+-- | p_new : Pointer to function : state -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaByteTensor_new"
+  p_new :: FunPtr (Ptr C'THCState -> IO (Ptr C'THCudaByteTensor))
+
+-- | p_newWithTensor : Pointer to function : state tensor -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaByteTensor_newWithTensor"
+  p_newWithTensor :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> IO (Ptr C'THCudaByteTensor))
+
+-- | p_newWithStorage : Pointer to function : state storage_ storageOffset_ size_ stride_ -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaByteTensor_newWithStorage"
+  p_newWithStorage :: FunPtr (Ptr C'THCState -> Ptr C'THCByteStorage -> CPtrdiff -> Ptr C'THLongStorage -> Ptr C'THLongStorage -> IO (Ptr C'THCudaByteTensor))
+
+-- | p_newWithStorage1d : Pointer to function : state storage_ storageOffset_ size0_ stride0_ -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaByteTensor_newWithStorage1d"
+  p_newWithStorage1d :: FunPtr (Ptr C'THCState -> Ptr C'THCByteStorage -> CPtrdiff -> CLLong -> CLLong -> IO (Ptr C'THCudaByteTensor))
+
+-- | p_newWithStorage2d : Pointer to function : state storage_ storageOffset_ size0_ stride0_ size1_ stride1_ -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaByteTensor_newWithStorage2d"
+  p_newWithStorage2d :: FunPtr (Ptr C'THCState -> Ptr C'THCByteStorage -> CPtrdiff -> CLLong -> CLLong -> CLLong -> CLLong -> IO (Ptr C'THCudaByteTensor))
+
+-- | p_newWithStorage3d : Pointer to function : state storage_ storageOffset_ size0_ stride0_ size1_ stride1_ size2_ stride2_ -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaByteTensor_newWithStorage3d"
+  p_newWithStorage3d :: FunPtr (Ptr C'THCState -> Ptr C'THCByteStorage -> CPtrdiff -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> IO (Ptr C'THCudaByteTensor))
+
+-- | p_newWithStorage4d : Pointer to function : state storage_ storageOffset_ size0_ stride0_ size1_ stride1_ size2_ stride2_ size3_ stride3_ -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaByteTensor_newWithStorage4d"
+  p_newWithStorage4d :: FunPtr (Ptr C'THCState -> Ptr C'THCByteStorage -> CPtrdiff -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> IO (Ptr C'THCudaByteTensor))
+
+-- | p_newWithSize : Pointer to function : state size_ stride_ -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaByteTensor_newWithSize"
+  p_newWithSize :: FunPtr (Ptr C'THCState -> Ptr C'THLongStorage -> Ptr C'THLongStorage -> IO (Ptr C'THCudaByteTensor))
+
+-- | p_newWithSize1d : Pointer to function : state size0_ -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaByteTensor_newWithSize1d"
+  p_newWithSize1d :: FunPtr (Ptr C'THCState -> CLLong -> IO (Ptr C'THCudaByteTensor))
+
+-- | p_newWithSize2d : Pointer to function : state size0_ size1_ -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaByteTensor_newWithSize2d"
+  p_newWithSize2d :: FunPtr (Ptr C'THCState -> CLLong -> CLLong -> IO (Ptr C'THCudaByteTensor))
+
+-- | p_newWithSize3d : Pointer to function : state size0_ size1_ size2_ -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaByteTensor_newWithSize3d"
+  p_newWithSize3d :: FunPtr (Ptr C'THCState -> CLLong -> CLLong -> CLLong -> IO (Ptr C'THCudaByteTensor))
+
+-- | p_newWithSize4d : Pointer to function : state size0_ size1_ size2_ size3_ -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaByteTensor_newWithSize4d"
+  p_newWithSize4d :: FunPtr (Ptr C'THCState -> CLLong -> CLLong -> CLLong -> CLLong -> IO (Ptr C'THCudaByteTensor))
+
+-- | p_newClone : Pointer to function : state self -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaByteTensor_newClone"
+  p_newClone :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> IO (Ptr C'THCudaByteTensor))
+
+-- | p_newContiguous : Pointer to function : state tensor -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaByteTensor_newContiguous"
+  p_newContiguous :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> IO (Ptr C'THCudaByteTensor))
+
+-- | p_newSelect : Pointer to function : state tensor dimension_ sliceIndex_ -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaByteTensor_newSelect"
+  p_newSelect :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> CInt -> CLLong -> IO (Ptr C'THCudaByteTensor))
+
+-- | p_newNarrow : Pointer to function : state tensor dimension_ firstIndex_ size_ -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaByteTensor_newNarrow"
+  p_newNarrow :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> CInt -> CLLong -> CLLong -> IO (Ptr C'THCudaByteTensor))
+
+-- | p_newTranspose : Pointer to function : state tensor dimension1_ dimension2_ -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaByteTensor_newTranspose"
+  p_newTranspose :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> CInt -> CInt -> IO (Ptr C'THCudaByteTensor))
+
+-- | p_newUnfold : Pointer to function : state tensor dimension_ size_ step_ -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaByteTensor_newUnfold"
+  p_newUnfold :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> CInt -> CLLong -> CLLong -> IO (Ptr C'THCudaByteTensor))
+
+-- | p_newView : Pointer to function : state tensor size -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaByteTensor_newView"
+  p_newView :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THLongStorage -> IO (Ptr C'THCudaByteTensor))
+
+-- | p_newFoldBatchDim : Pointer to function : state input -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaByteTensor_newFoldBatchDim"
+  p_newFoldBatchDim :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> IO (Ptr C'THCudaByteTensor))
+
+-- | p_newExpand : Pointer to function : state tensor size -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaByteTensor_newExpand"
+  p_newExpand :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THLongStorage -> IO (Ptr C'THCudaByteTensor))
+
+-- | p_expand : Pointer to function : state r tensor sizes -> void
+foreign import ccall "THCTensor.h &THCudaByteTensor_expand"
+  p_expand :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> Ptr C'THLongStorage -> IO ())
+
+-- | p_expandNd : Pointer to function : state rets ops count -> void
+foreign import ccall "THCTensor.h &THCudaByteTensor_expandNd"
+  p_expandNd :: FunPtr (Ptr C'THCState -> Ptr (Ptr C'THCudaByteTensor) -> Ptr (Ptr C'THCudaByteTensor) -> CInt -> IO ())
+
+-- | p_resize : Pointer to function : state tensor size stride -> void
+foreign import ccall "THCTensor.h &THCudaByteTensor_resize"
+  p_resize :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THLongStorage -> Ptr C'THLongStorage -> IO ())
+
+-- | p_resizeAs : Pointer to function : state tensor src -> void
+foreign import ccall "THCTensor.h &THCudaByteTensor_resizeAs"
+  p_resizeAs :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> IO ())
+
+-- | p_resize1d : Pointer to function : state tensor size0_ -> void
+foreign import ccall "THCTensor.h &THCudaByteTensor_resize1d"
+  p_resize1d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> CLLong -> IO ())
+
+-- | p_resize2d : Pointer to function : state tensor size0_ size1_ -> void
+foreign import ccall "THCTensor.h &THCudaByteTensor_resize2d"
+  p_resize2d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> CLLong -> CLLong -> IO ())
+
+-- | p_resize3d : Pointer to function : state tensor size0_ size1_ size2_ -> void
+foreign import ccall "THCTensor.h &THCudaByteTensor_resize3d"
+  p_resize3d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> CLLong -> CLLong -> CLLong -> IO ())
+
+-- | p_resize4d : Pointer to function : state tensor size0_ size1_ size2_ size3_ -> void
+foreign import ccall "THCTensor.h &THCudaByteTensor_resize4d"
+  p_resize4d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> CLLong -> CLLong -> CLLong -> CLLong -> IO ())
+
+-- | p_resize5d : Pointer to function : state tensor size0_ size1_ size2_ size3_ size4_ -> void
+foreign import ccall "THCTensor.h &THCudaByteTensor_resize5d"
+  p_resize5d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> IO ())
+
+-- | p_resizeNd : Pointer to function : state tensor nDimension size stride -> void
+foreign import ccall "THCTensor.h &THCudaByteTensor_resizeNd"
+  p_resizeNd :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> CInt -> Ptr CLLong -> Ptr CLLong -> IO ())
+
+-- | p_set : Pointer to function : state self src -> void
+foreign import ccall "THCTensor.h &THCudaByteTensor_set"
+  p_set :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> IO ())
+
+-- | p_setStorage : Pointer to function : state self storage_ storageOffset_ size_ stride_ -> void
+foreign import ccall "THCTensor.h &THCudaByteTensor_setStorage"
+  p_setStorage :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCByteStorage -> CPtrdiff -> Ptr C'THLongStorage -> Ptr C'THLongStorage -> IO ())
+
+-- | p_setStorageNd : Pointer to function : state self storage storageOffset nDimension size stride -> void
+foreign import ccall "THCTensor.h &THCudaByteTensor_setStorageNd"
+  p_setStorageNd :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCByteStorage -> CPtrdiff -> CInt -> Ptr CLLong -> Ptr CLLong -> IO ())
+
+-- | p_setStorage1d : Pointer to function : state self storage_ storageOffset_ size0_ stride0_ -> void
+foreign import ccall "THCTensor.h &THCudaByteTensor_setStorage1d"
+  p_setStorage1d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCByteStorage -> CPtrdiff -> CLLong -> CLLong -> IO ())
+
+-- | p_setStorage2d : Pointer to function : state self storage_ storageOffset_ size0_ stride0_ size1_ stride1_ -> void
+foreign import ccall "THCTensor.h &THCudaByteTensor_setStorage2d"
+  p_setStorage2d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCByteStorage -> CPtrdiff -> CLLong -> CLLong -> CLLong -> CLLong -> IO ())
+
+-- | p_setStorage3d : Pointer to function : state self storage_ storageOffset_ size0_ stride0_ size1_ stride1_ size2_ stride2_ -> void
+foreign import ccall "THCTensor.h &THCudaByteTensor_setStorage3d"
+  p_setStorage3d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCByteStorage -> CPtrdiff -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> IO ())
+
+-- | p_setStorage4d : Pointer to function : state self storage_ storageOffset_ size0_ stride0_ size1_ stride1_ size2_ stride2_ size3_ stride3_ -> void
+foreign import ccall "THCTensor.h &THCudaByteTensor_setStorage4d"
+  p_setStorage4d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCByteStorage -> CPtrdiff -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> IO ())
+
+-- | p_narrow : Pointer to function : state self src dimension_ firstIndex_ size_ -> void
+foreign import ccall "THCTensor.h &THCudaByteTensor_narrow"
+  p_narrow :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> CInt -> CLLong -> CLLong -> IO ())
+
+-- | p_select : Pointer to function : state self src dimension_ sliceIndex_ -> void
+foreign import ccall "THCTensor.h &THCudaByteTensor_select"
+  p_select :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> CInt -> CLLong -> IO ())
+
+-- | p_transpose : Pointer to function : state self src dimension1_ dimension2_ -> void
+foreign import ccall "THCTensor.h &THCudaByteTensor_transpose"
+  p_transpose :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> CInt -> CInt -> IO ())
+
+-- | p_unfold : Pointer to function : state self src dimension_ size_ step_ -> void
+foreign import ccall "THCTensor.h &THCudaByteTensor_unfold"
+  p_unfold :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> CInt -> CLLong -> CLLong -> IO ())
+
+-- | p_squeeze : Pointer to function : state self src -> void
+foreign import ccall "THCTensor.h &THCudaByteTensor_squeeze"
+  p_squeeze :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> IO ())
+
+-- | p_squeeze1d : Pointer to function : state self src dimension_ -> void
+foreign import ccall "THCTensor.h &THCudaByteTensor_squeeze1d"
+  p_squeeze1d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> CInt -> IO ())
+
+-- | p_unsqueeze1d : Pointer to function : state self src dimension_ -> void
+foreign import ccall "THCTensor.h &THCudaByteTensor_unsqueeze1d"
+  p_unsqueeze1d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> CInt -> IO ())
+
+-- | p_isContiguous : Pointer to function : state self -> int
+foreign import ccall "THCTensor.h &THCudaByteTensor_isContiguous"
+  p_isContiguous :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> IO CInt)
+
+-- | p_isSameSizeAs : Pointer to function : state self src -> int
+foreign import ccall "THCTensor.h &THCudaByteTensor_isSameSizeAs"
+  p_isSameSizeAs :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> IO CInt)
+
+-- | p_isSetTo : Pointer to function : state self src -> int
+foreign import ccall "THCTensor.h &THCudaByteTensor_isSetTo"
+  p_isSetTo :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> IO CInt)
+
+-- | p_isSize : Pointer to function : state self dims -> int
+foreign import ccall "THCTensor.h &THCudaByteTensor_isSize"
+  p_isSize :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THLongStorage -> IO CInt)
+
+-- | p_nElement : Pointer to function : state self -> ptrdiff_t
+foreign import ccall "THCTensor.h &THCudaByteTensor_nElement"
+  p_nElement :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> IO CPtrdiff)
+
+-- | p_retain : Pointer to function : state self -> void
+foreign import ccall "THCTensor.h &THCudaByteTensor_retain"
+  p_retain :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> IO ())
+
+-- | p_free : Pointer to function : state self -> void
+foreign import ccall "THCTensor.h &THCudaByteTensor_free"
+  p_free :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> IO ())
+
+-- | p_freeCopyTo : Pointer to function : state self dst -> void
+foreign import ccall "THCTensor.h &THCudaByteTensor_freeCopyTo"
+  p_freeCopyTo :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> IO ())
+
+-- | p_set1d : Pointer to function : state tensor x0 value -> void
+foreign import ccall "THCTensor.h &THCudaByteTensor_set1d"
+  p_set1d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> CLLong -> CUChar -> IO ())
+
+-- | p_set2d : Pointer to function : state tensor x0 x1 value -> void
+foreign import ccall "THCTensor.h &THCudaByteTensor_set2d"
+  p_set2d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> CLLong -> CLLong -> CUChar -> IO ())
+
+-- | p_set3d : Pointer to function : state tensor x0 x1 x2 value -> void
+foreign import ccall "THCTensor.h &THCudaByteTensor_set3d"
+  p_set3d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> CLLong -> CLLong -> CLLong -> CUChar -> IO ())
+
+-- | p_set4d : Pointer to function : state tensor x0 x1 x2 x3 value -> void
+foreign import ccall "THCTensor.h &THCudaByteTensor_set4d"
+  p_set4d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> CLLong -> CLLong -> CLLong -> CLLong -> CUChar -> IO ())
+
+-- | p_get1d : Pointer to function : state tensor x0 -> real
+foreign import ccall "THCTensor.h &THCudaByteTensor_get1d"
+  p_get1d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> CLLong -> IO CUChar)
+
+-- | p_get2d : Pointer to function : state tensor x0 x1 -> real
+foreign import ccall "THCTensor.h &THCudaByteTensor_get2d"
+  p_get2d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> CLLong -> CLLong -> IO CUChar)
+
+-- | p_get3d : Pointer to function : state tensor x0 x1 x2 -> real
+foreign import ccall "THCTensor.h &THCudaByteTensor_get3d"
+  p_get3d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> CLLong -> CLLong -> CLLong -> IO CUChar)
+
+-- | p_get4d : Pointer to function : state tensor x0 x1 x2 x3 -> real
+foreign import ccall "THCTensor.h &THCudaByteTensor_get4d"
+  p_get4d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> CLLong -> CLLong -> CLLong -> CLLong -> IO CUChar)
+
+-- | p_getDevice : Pointer to function : state self -> int
+foreign import ccall "THCTensor.h &THCudaByteTensor_getDevice"
+  p_getDevice :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> IO CInt)
+
+-- | p_sizeDesc : Pointer to function : state tensor -> THCDescBuff
+foreign import ccall "THCTensor.h &THCudaByteTensor_sizeDesc"
+  p_sizeDesc :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> IO (Ptr C'THCDescBuff))
diff --git a/src/Torch/FFI/THC/Byte/TensorCopy.hs b/src/Torch/FFI/THC/Byte/TensorCopy.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Byte/TensorCopy.hs
@@ -0,0 +1,177 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Byte.TensorCopy where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_copy :  state self src -> void
+foreign import ccall "THCTensorCopy.h THCudaByteTensor_copy"
+  c_copy :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> IO ()
+
+-- | c_copyIgnoringOverlaps :  state self src -> void
+foreign import ccall "THCTensorCopy.h THCudaByteTensor_copyIgnoringOverlaps"
+  c_copyIgnoringOverlaps :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> IO ()
+
+-- | c_copyByte :  state self src -> void
+foreign import ccall "THCTensorCopy.h THCudaByteTensor_copyByte"
+  c_copyByte :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THByteTensor -> IO ()
+
+-- | c_copyChar :  state self src -> void
+foreign import ccall "THCTensorCopy.h THCudaByteTensor_copyChar"
+  c_copyChar :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCharTensor -> IO ()
+
+-- | c_copyShort :  state self src -> void
+foreign import ccall "THCTensorCopy.h THCudaByteTensor_copyShort"
+  c_copyShort :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THShortTensor -> IO ()
+
+-- | c_copyInt :  state self src -> void
+foreign import ccall "THCTensorCopy.h THCudaByteTensor_copyInt"
+  c_copyInt :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THIntTensor -> IO ()
+
+-- | c_copyLong :  state self src -> void
+foreign import ccall "THCTensorCopy.h THCudaByteTensor_copyLong"
+  c_copyLong :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THLongTensor -> IO ()
+
+-- | c_copyFloat :  state self src -> void
+foreign import ccall "THCTensorCopy.h THCudaByteTensor_copyFloat"
+  c_copyFloat :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THFloatTensor -> IO ()
+
+-- | c_copyDouble :  state self src -> void
+foreign import ccall "THCTensorCopy.h THCudaByteTensor_copyDouble"
+  c_copyDouble :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THDoubleTensor -> IO ()
+
+-- | c_copyHalf :  state self src -> void
+foreign import ccall "THCTensorCopy.h THCudaByteTensor_copyHalf"
+  c_copyHalf :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THHalfTensor -> IO ()
+
+-- | c_copyCudaByte :  state dst src -> void
+foreign import ccall "THCTensorCopy.h THCudaByteTensor_copyCudaByte"
+  c_copyCudaByte :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> IO ()
+
+-- | c_copyCudaChar :  state dst src -> void
+foreign import ccall "THCTensorCopy.h THCudaByteTensor_copyCudaChar"
+  c_copyCudaChar :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaCharTensor -> IO ()
+
+-- | c_copyCudaShort :  state dst src -> void
+foreign import ccall "THCTensorCopy.h THCudaByteTensor_copyCudaShort"
+  c_copyCudaShort :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaShortTensor -> IO ()
+
+-- | c_copyCudaInt :  state dst src -> void
+foreign import ccall "THCTensorCopy.h THCudaByteTensor_copyCudaInt"
+  c_copyCudaInt :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaIntTensor -> IO ()
+
+-- | c_copyCudaLong :  state dst src -> void
+foreign import ccall "THCTensorCopy.h THCudaByteTensor_copyCudaLong"
+  c_copyCudaLong :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaLongTensor -> IO ()
+
+-- | c_copyCudaDouble :  state dst src -> void
+foreign import ccall "THCTensorCopy.h THCudaByteTensor_copyCudaDouble"
+  c_copyCudaDouble :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_copyCuda :  state self src -> void
+foreign import ccall "THCTensorCopy.h THCudaByteTensor_copyCuda"
+  c_copyCuda :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> IO ()
+
+-- | c_thCopyCuda :  state self src -> void
+foreign import ccall "THCTensorCopy.h THByteTensor_copyCuda"
+  c_thCopyCuda :: Ptr C'THCState -> Ptr C'THByteTensor -> Ptr C'THCudaByteTensor -> IO ()
+
+-- | c_copyCPU :  state self src -> void
+foreign import ccall "THCTensorCopy.h THCudaByteTensor_copyCPU"
+  c_copyCPU :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THByteTensor -> IO ()
+
+-- | c_copyAsyncCPU :  state self src -> void
+foreign import ccall "THCTensorCopy.h THCudaByteTensor_copyAsyncCPU"
+  c_copyAsyncCPU :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THByteTensor -> IO ()
+
+-- | c_thCopyAsyncCuda :  state self src -> void
+foreign import ccall "THCTensorCopy.h THByteTensor_copyAsyncCuda"
+  c_thCopyAsyncCuda :: Ptr C'THCState -> Ptr C'THByteTensor -> Ptr C'THCudaByteTensor -> IO ()
+
+-- | p_copy : Pointer to function : state self src -> void
+foreign import ccall "THCTensorCopy.h &THCudaByteTensor_copy"
+  p_copy :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> IO ())
+
+-- | p_copyIgnoringOverlaps : Pointer to function : state self src -> void
+foreign import ccall "THCTensorCopy.h &THCudaByteTensor_copyIgnoringOverlaps"
+  p_copyIgnoringOverlaps :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> IO ())
+
+-- | p_copyByte : Pointer to function : state self src -> void
+foreign import ccall "THCTensorCopy.h &THCudaByteTensor_copyByte"
+  p_copyByte :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THByteTensor -> IO ())
+
+-- | p_copyChar : Pointer to function : state self src -> void
+foreign import ccall "THCTensorCopy.h &THCudaByteTensor_copyChar"
+  p_copyChar :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCharTensor -> IO ())
+
+-- | p_copyShort : Pointer to function : state self src -> void
+foreign import ccall "THCTensorCopy.h &THCudaByteTensor_copyShort"
+  p_copyShort :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THShortTensor -> IO ())
+
+-- | p_copyInt : Pointer to function : state self src -> void
+foreign import ccall "THCTensorCopy.h &THCudaByteTensor_copyInt"
+  p_copyInt :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THIntTensor -> IO ())
+
+-- | p_copyLong : Pointer to function : state self src -> void
+foreign import ccall "THCTensorCopy.h &THCudaByteTensor_copyLong"
+  p_copyLong :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THLongTensor -> IO ())
+
+-- | p_copyFloat : Pointer to function : state self src -> void
+foreign import ccall "THCTensorCopy.h &THCudaByteTensor_copyFloat"
+  p_copyFloat :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THFloatTensor -> IO ())
+
+-- | p_copyDouble : Pointer to function : state self src -> void
+foreign import ccall "THCTensorCopy.h &THCudaByteTensor_copyDouble"
+  p_copyDouble :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THDoubleTensor -> IO ())
+
+-- | p_copyHalf : Pointer to function : state self src -> void
+foreign import ccall "THCTensorCopy.h &THCudaByteTensor_copyHalf"
+  p_copyHalf :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THHalfTensor -> IO ())
+
+-- | p_copyCudaByte : Pointer to function : state dst src -> void
+foreign import ccall "THCTensorCopy.h &THCudaByteTensor_copyCudaByte"
+  p_copyCudaByte :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> IO ())
+
+-- | p_copyCudaChar : Pointer to function : state dst src -> void
+foreign import ccall "THCTensorCopy.h &THCudaByteTensor_copyCudaChar"
+  p_copyCudaChar :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaCharTensor -> IO ())
+
+-- | p_copyCudaShort : Pointer to function : state dst src -> void
+foreign import ccall "THCTensorCopy.h &THCudaByteTensor_copyCudaShort"
+  p_copyCudaShort :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaShortTensor -> IO ())
+
+-- | p_copyCudaInt : Pointer to function : state dst src -> void
+foreign import ccall "THCTensorCopy.h &THCudaByteTensor_copyCudaInt"
+  p_copyCudaInt :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaIntTensor -> IO ())
+
+-- | p_copyCudaLong : Pointer to function : state dst src -> void
+foreign import ccall "THCTensorCopy.h &THCudaByteTensor_copyCudaLong"
+  p_copyCudaLong :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaLongTensor -> IO ())
+
+-- | p_copyCudaDouble : Pointer to function : state dst src -> void
+foreign import ccall "THCTensorCopy.h &THCudaByteTensor_copyCudaDouble"
+  p_copyCudaDouble :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_copyCuda : Pointer to function : state self src -> void
+foreign import ccall "THCTensorCopy.h &THCudaByteTensor_copyCuda"
+  p_copyCuda :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> IO ())
+
+-- | p_thCopyCuda : Pointer to function : state self src -> void
+foreign import ccall "THCTensorCopy.h &THByteTensor_copyCuda"
+  p_thCopyCuda :: FunPtr (Ptr C'THCState -> Ptr C'THByteTensor -> Ptr C'THCudaByteTensor -> IO ())
+
+-- | p_copyCPU : Pointer to function : state self src -> void
+foreign import ccall "THCTensorCopy.h &THCudaByteTensor_copyCPU"
+  p_copyCPU :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THByteTensor -> IO ())
+
+-- | p_copyAsyncCPU : Pointer to function : state self src -> void
+foreign import ccall "THCTensorCopy.h &THCudaByteTensor_copyAsyncCPU"
+  p_copyAsyncCPU :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THByteTensor -> IO ())
+
+-- | p_thCopyAsyncCuda : Pointer to function : state self src -> void
+foreign import ccall "THCTensorCopy.h &THByteTensor_copyAsyncCuda"
+  p_thCopyAsyncCuda :: FunPtr (Ptr C'THCState -> Ptr C'THByteTensor -> Ptr C'THCudaByteTensor -> IO ())
diff --git a/src/Torch/FFI/THC/Byte/TensorIndex.hs b/src/Torch/FFI/THC/Byte/TensorIndex.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Byte/TensorIndex.hs
@@ -0,0 +1,97 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Byte.TensorIndex where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_indexCopy :  state res_ dim indices src -> void
+foreign import ccall "THCTensorIndex.h THCudaByteTensor_indexCopy"
+  c_indexCopy :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> CInt -> Ptr C'THCudaLongTensor -> Ptr C'THCudaByteTensor -> IO ()
+
+-- | c_indexAdd :  state res_ dim indices src -> void
+foreign import ccall "THCTensorIndex.h THCudaByteTensor_indexAdd"
+  c_indexAdd :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> CInt -> Ptr C'THCudaLongTensor -> Ptr C'THCudaByteTensor -> IO ()
+
+-- | c_indexFill :  state tensor dim index val -> void
+foreign import ccall "THCTensorIndex.h THCudaByteTensor_indexFill"
+  c_indexFill :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> CInt -> Ptr C'THCudaLongTensor -> CUChar -> IO ()
+
+-- | c_indexSelect :  state tensor src dim index -> void
+foreign import ccall "THCTensorIndex.h THCudaByteTensor_indexSelect"
+  c_indexSelect :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> CInt -> Ptr C'THCudaLongTensor -> IO ()
+
+-- | c_take :  state res_ src index -> void
+foreign import ccall "THCTensorIndex.h THCudaByteTensor_take"
+  c_take :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> Ptr C'THCudaLongTensor -> IO ()
+
+-- | c_put :  state res_ indices src accumulate -> void
+foreign import ccall "THCTensorIndex.h THCudaByteTensor_put"
+  c_put :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaByteTensor -> CInt -> IO ()
+
+-- | c_indexCopy_long :  state res_ dim indices src -> void
+foreign import ccall "THCTensorIndex.h THCudaByteTensor_indexCopy_long"
+  c_indexCopy_long :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> CInt -> Ptr C'THLongTensor -> Ptr C'THCudaByteTensor -> IO ()
+
+-- | c_indexAdd_long :  state res_ dim indices src -> void
+foreign import ccall "THCTensorIndex.h THCudaByteTensor_indexAdd_long"
+  c_indexAdd_long :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> CInt -> Ptr C'THLongTensor -> Ptr C'THCudaByteTensor -> IO ()
+
+-- | c_indexFill_long :  state tensor dim index val -> void
+foreign import ccall "THCTensorIndex.h THCudaByteTensor_indexFill_long"
+  c_indexFill_long :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> CInt -> Ptr C'THLongTensor -> CUChar -> IO ()
+
+-- | c_indexSelect_long :  state tensor src dim index -> void
+foreign import ccall "THCTensorIndex.h THCudaByteTensor_indexSelect_long"
+  c_indexSelect_long :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> CInt -> Ptr C'THLongTensor -> IO ()
+
+-- | c_calculateAdvancedIndexingOffsets :  state output indexed baseOffset indexers -> void
+foreign import ccall "THCTensorIndex.h THCudaByteTensor_calculateAdvancedIndexingOffsets"
+  c_calculateAdvancedIndexingOffsets :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaByteTensor -> CPtrdiff -> Ptr (Ptr C'THCudaLongTensor) -> IO ()
+
+-- | p_indexCopy : Pointer to function : state res_ dim indices src -> void
+foreign import ccall "THCTensorIndex.h &THCudaByteTensor_indexCopy"
+  p_indexCopy :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> CInt -> Ptr C'THCudaLongTensor -> Ptr C'THCudaByteTensor -> IO ())
+
+-- | p_indexAdd : Pointer to function : state res_ dim indices src -> void
+foreign import ccall "THCTensorIndex.h &THCudaByteTensor_indexAdd"
+  p_indexAdd :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> CInt -> Ptr C'THCudaLongTensor -> Ptr C'THCudaByteTensor -> IO ())
+
+-- | p_indexFill : Pointer to function : state tensor dim index val -> void
+foreign import ccall "THCTensorIndex.h &THCudaByteTensor_indexFill"
+  p_indexFill :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> CInt -> Ptr C'THCudaLongTensor -> CUChar -> IO ())
+
+-- | p_indexSelect : Pointer to function : state tensor src dim index -> void
+foreign import ccall "THCTensorIndex.h &THCudaByteTensor_indexSelect"
+  p_indexSelect :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> CInt -> Ptr C'THCudaLongTensor -> IO ())
+
+-- | p_take : Pointer to function : state res_ src index -> void
+foreign import ccall "THCTensorIndex.h &THCudaByteTensor_take"
+  p_take :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> Ptr C'THCudaLongTensor -> IO ())
+
+-- | p_put : Pointer to function : state res_ indices src accumulate -> void
+foreign import ccall "THCTensorIndex.h &THCudaByteTensor_put"
+  p_put :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaByteTensor -> CInt -> IO ())
+
+-- | p_indexCopy_long : Pointer to function : state res_ dim indices src -> void
+foreign import ccall "THCTensorIndex.h &THCudaByteTensor_indexCopy_long"
+  p_indexCopy_long :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> CInt -> Ptr C'THLongTensor -> Ptr C'THCudaByteTensor -> IO ())
+
+-- | p_indexAdd_long : Pointer to function : state res_ dim indices src -> void
+foreign import ccall "THCTensorIndex.h &THCudaByteTensor_indexAdd_long"
+  p_indexAdd_long :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> CInt -> Ptr C'THLongTensor -> Ptr C'THCudaByteTensor -> IO ())
+
+-- | p_indexFill_long : Pointer to function : state tensor dim index val -> void
+foreign import ccall "THCTensorIndex.h &THCudaByteTensor_indexFill_long"
+  p_indexFill_long :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> CInt -> Ptr C'THLongTensor -> CUChar -> IO ())
+
+-- | p_indexSelect_long : Pointer to function : state tensor src dim index -> void
+foreign import ccall "THCTensorIndex.h &THCudaByteTensor_indexSelect_long"
+  p_indexSelect_long :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> CInt -> Ptr C'THLongTensor -> IO ())
+
+-- | p_calculateAdvancedIndexingOffsets : Pointer to function : state output indexed baseOffset indexers -> void
+foreign import ccall "THCTensorIndex.h &THCudaByteTensor_calculateAdvancedIndexingOffsets"
+  p_calculateAdvancedIndexingOffsets :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaByteTensor -> CPtrdiff -> Ptr (Ptr C'THCudaLongTensor) -> IO ())
diff --git a/src/Torch/FFI/THC/Byte/TensorMasked.hs b/src/Torch/FFI/THC/Byte/TensorMasked.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Byte/TensorMasked.hs
@@ -0,0 +1,57 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Byte.TensorMasked where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_maskedFill :  state tensor mask value -> void
+foreign import ccall "THCTensorMasked.h THCudaByteTensor_maskedFill"
+  c_maskedFill :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> CUChar -> IO ()
+
+-- | c_maskedFillByte :  state tensor mask value -> void
+foreign import ccall "THCTensorMasked.h THCudaByteTensor_maskedFillByte"
+  c_maskedFillByte :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THByteTensor -> CUChar -> IO ()
+
+-- | c_maskedCopy :  state tensor mask src -> void
+foreign import ccall "THCTensorMasked.h THCudaByteTensor_maskedCopy"
+  c_maskedCopy :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> IO ()
+
+-- | c_maskedCopyByte :  state tensor mask src -> void
+foreign import ccall "THCTensorMasked.h THCudaByteTensor_maskedCopyByte"
+  c_maskedCopyByte :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THByteTensor -> Ptr C'THCudaByteTensor -> IO ()
+
+-- | c_maskedSelect :  state tensor src mask -> void
+foreign import ccall "THCTensorMasked.h THCudaByteTensor_maskedSelect"
+  c_maskedSelect :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> IO ()
+
+-- | c_maskedSelectByte :  state tensor src mask -> void
+foreign import ccall "THCTensorMasked.h THCudaByteTensor_maskedSelectByte"
+  c_maskedSelectByte :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> Ptr C'THByteTensor -> IO ()
+
+-- | p_maskedFill : Pointer to function : state tensor mask value -> void
+foreign import ccall "THCTensorMasked.h &THCudaByteTensor_maskedFill"
+  p_maskedFill :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> CUChar -> IO ())
+
+-- | p_maskedFillByte : Pointer to function : state tensor mask value -> void
+foreign import ccall "THCTensorMasked.h &THCudaByteTensor_maskedFillByte"
+  p_maskedFillByte :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THByteTensor -> CUChar -> IO ())
+
+-- | p_maskedCopy : Pointer to function : state tensor mask src -> void
+foreign import ccall "THCTensorMasked.h &THCudaByteTensor_maskedCopy"
+  p_maskedCopy :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> IO ())
+
+-- | p_maskedCopyByte : Pointer to function : state tensor mask src -> void
+foreign import ccall "THCTensorMasked.h &THCudaByteTensor_maskedCopyByte"
+  p_maskedCopyByte :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THByteTensor -> Ptr C'THCudaByteTensor -> IO ())
+
+-- | p_maskedSelect : Pointer to function : state tensor src mask -> void
+foreign import ccall "THCTensorMasked.h &THCudaByteTensor_maskedSelect"
+  p_maskedSelect :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> IO ())
+
+-- | p_maskedSelectByte : Pointer to function : state tensor src mask -> void
+foreign import ccall "THCTensorMasked.h &THCudaByteTensor_maskedSelectByte"
+  p_maskedSelectByte :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> Ptr C'THByteTensor -> IO ())
diff --git a/src/Torch/FFI/THC/Byte/TensorMath.hs b/src/Torch/FFI/THC/Byte/TensorMath.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Byte/TensorMath.hs
@@ -0,0 +1,153 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Byte.TensorMath where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_fill :  state self value -> void
+foreign import ccall "THCTensorMath.h THCudaByteTensor_fill"
+  c_fill :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> CUChar -> IO ()
+
+-- | c_zero :  state self -> void
+foreign import ccall "THCTensorMath.h THCudaByteTensor_zero"
+  c_zero :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> IO ()
+
+-- | c_zeros :  state r_ size -> void
+foreign import ccall "THCTensorMath.h THCudaByteTensor_zeros"
+  c_zeros :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THLongStorage -> IO ()
+
+-- | c_zerosLike :  state r_ input -> void
+foreign import ccall "THCTensorMath.h THCudaByteTensor_zerosLike"
+  c_zerosLike :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> IO ()
+
+-- | c_ones :  state r_ size -> void
+foreign import ccall "THCTensorMath.h THCudaByteTensor_ones"
+  c_ones :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THLongStorage -> IO ()
+
+-- | c_onesLike :  state r_ input -> void
+foreign import ccall "THCTensorMath.h THCudaByteTensor_onesLike"
+  c_onesLike :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> IO ()
+
+-- | c_reshape :  state r_ t size -> void
+foreign import ccall "THCTensorMath.h THCudaByteTensor_reshape"
+  c_reshape :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> Ptr C'THLongStorage -> IO ()
+
+-- | c_numel :  state t -> ptrdiff_t
+foreign import ccall "THCTensorMath.h THCudaByteTensor_numel"
+  c_numel :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> IO CPtrdiff
+
+-- | c_cat :  state result ta tb dimension -> void
+foreign import ccall "THCTensorMath.h THCudaByteTensor_cat"
+  c_cat :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> CInt -> IO ()
+
+-- | c_catArray :  state result inputs numInputs dimension -> void
+foreign import ccall "THCTensorMath.h THCudaByteTensor_catArray"
+  c_catArray :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr (Ptr C'THCudaByteTensor) -> CInt -> CInt -> IO ()
+
+-- | c_nonzero :  state tensor self -> void
+foreign import ccall "THCTensorMath.h THCudaByteTensor_nonzero"
+  c_nonzero :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaByteTensor -> IO ()
+
+-- | c_tril :  state self src k -> void
+foreign import ccall "THCTensorMath.h THCudaByteTensor_tril"
+  c_tril :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> CLLong -> IO ()
+
+-- | c_triu :  state self src k -> void
+foreign import ccall "THCTensorMath.h THCudaByteTensor_triu"
+  c_triu :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> CLLong -> IO ()
+
+-- | c_diag :  state self src k -> void
+foreign import ccall "THCTensorMath.h THCudaByteTensor_diag"
+  c_diag :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> CLLong -> IO ()
+
+-- | c_eye :  state self n k -> void
+foreign import ccall "THCTensorMath.h THCudaByteTensor_eye"
+  c_eye :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> CLLong -> CLLong -> IO ()
+
+-- | c_trace :  state self -> accreal
+foreign import ccall "THCTensorMath.h THCudaByteTensor_trace"
+  c_trace :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> IO CLong
+
+-- | c_range :  state r_ xmin xmax step -> void
+foreign import ccall "THCTensorMath.h THCudaByteTensor_range"
+  c_range :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> CLong -> CLong -> CLong -> IO ()
+
+-- | c_arange :  state r_ xmin xmax step -> void
+foreign import ccall "THCTensorMath.h THCudaByteTensor_arange"
+  c_arange :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> CLong -> CLong -> CLong -> IO ()
+
+-- | p_fill : Pointer to function : state self value -> void
+foreign import ccall "THCTensorMath.h &THCudaByteTensor_fill"
+  p_fill :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> CUChar -> IO ())
+
+-- | p_zero : Pointer to function : state self -> void
+foreign import ccall "THCTensorMath.h &THCudaByteTensor_zero"
+  p_zero :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> IO ())
+
+-- | p_zeros : Pointer to function : state r_ size -> void
+foreign import ccall "THCTensorMath.h &THCudaByteTensor_zeros"
+  p_zeros :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THLongStorage -> IO ())
+
+-- | p_zerosLike : Pointer to function : state r_ input -> void
+foreign import ccall "THCTensorMath.h &THCudaByteTensor_zerosLike"
+  p_zerosLike :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> IO ())
+
+-- | p_ones : Pointer to function : state r_ size -> void
+foreign import ccall "THCTensorMath.h &THCudaByteTensor_ones"
+  p_ones :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THLongStorage -> IO ())
+
+-- | p_onesLike : Pointer to function : state r_ input -> void
+foreign import ccall "THCTensorMath.h &THCudaByteTensor_onesLike"
+  p_onesLike :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> IO ())
+
+-- | p_reshape : Pointer to function : state r_ t size -> void
+foreign import ccall "THCTensorMath.h &THCudaByteTensor_reshape"
+  p_reshape :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> Ptr C'THLongStorage -> IO ())
+
+-- | p_numel : Pointer to function : state t -> ptrdiff_t
+foreign import ccall "THCTensorMath.h &THCudaByteTensor_numel"
+  p_numel :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> IO CPtrdiff)
+
+-- | p_cat : Pointer to function : state result ta tb dimension -> void
+foreign import ccall "THCTensorMath.h &THCudaByteTensor_cat"
+  p_cat :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> CInt -> IO ())
+
+-- | p_catArray : Pointer to function : state result inputs numInputs dimension -> void
+foreign import ccall "THCTensorMath.h &THCudaByteTensor_catArray"
+  p_catArray :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr (Ptr C'THCudaByteTensor) -> CInt -> CInt -> IO ())
+
+-- | p_nonzero : Pointer to function : state tensor self -> void
+foreign import ccall "THCTensorMath.h &THCudaByteTensor_nonzero"
+  p_nonzero :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaByteTensor -> IO ())
+
+-- | p_tril : Pointer to function : state self src k -> void
+foreign import ccall "THCTensorMath.h &THCudaByteTensor_tril"
+  p_tril :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> CLLong -> IO ())
+
+-- | p_triu : Pointer to function : state self src k -> void
+foreign import ccall "THCTensorMath.h &THCudaByteTensor_triu"
+  p_triu :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> CLLong -> IO ())
+
+-- | p_diag : Pointer to function : state self src k -> void
+foreign import ccall "THCTensorMath.h &THCudaByteTensor_diag"
+  p_diag :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> CLLong -> IO ())
+
+-- | p_eye : Pointer to function : state self n k -> void
+foreign import ccall "THCTensorMath.h &THCudaByteTensor_eye"
+  p_eye :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> CLLong -> CLLong -> IO ())
+
+-- | p_trace : Pointer to function : state self -> accreal
+foreign import ccall "THCTensorMath.h &THCudaByteTensor_trace"
+  p_trace :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> IO CLong)
+
+-- | p_range : Pointer to function : state r_ xmin xmax step -> void
+foreign import ccall "THCTensorMath.h &THCudaByteTensor_range"
+  p_range :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> CLong -> CLong -> CLong -> IO ())
+
+-- | p_arange : Pointer to function : state r_ xmin xmax step -> void
+foreign import ccall "THCTensorMath.h &THCudaByteTensor_arange"
+  p_arange :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> CLong -> CLong -> CLong -> IO ())
diff --git a/src/Torch/FFI/THC/Byte/TensorMathCompare.hs b/src/Torch/FFI/THC/Byte/TensorMathCompare.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Byte/TensorMathCompare.hs
@@ -0,0 +1,105 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Byte.TensorMathCompare where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_ltValue :  state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h THCudaByteTensor_ltValue"
+  c_ltValue :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> CUChar -> IO ()
+
+-- | c_gtValue :  state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h THCudaByteTensor_gtValue"
+  c_gtValue :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> CUChar -> IO ()
+
+-- | c_leValue :  state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h THCudaByteTensor_leValue"
+  c_leValue :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> CUChar -> IO ()
+
+-- | c_geValue :  state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h THCudaByteTensor_geValue"
+  c_geValue :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> CUChar -> IO ()
+
+-- | c_eqValue :  state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h THCudaByteTensor_eqValue"
+  c_eqValue :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> CUChar -> IO ()
+
+-- | c_neValue :  state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h THCudaByteTensor_neValue"
+  c_neValue :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> CUChar -> IO ()
+
+-- | c_ltValueT :  state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h THCudaByteTensor_ltValueT"
+  c_ltValueT :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> CUChar -> IO ()
+
+-- | c_gtValueT :  state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h THCudaByteTensor_gtValueT"
+  c_gtValueT :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> CUChar -> IO ()
+
+-- | c_leValueT :  state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h THCudaByteTensor_leValueT"
+  c_leValueT :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> CUChar -> IO ()
+
+-- | c_geValueT :  state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h THCudaByteTensor_geValueT"
+  c_geValueT :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> CUChar -> IO ()
+
+-- | c_eqValueT :  state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h THCudaByteTensor_eqValueT"
+  c_eqValueT :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> CUChar -> IO ()
+
+-- | c_neValueT :  state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h THCudaByteTensor_neValueT"
+  c_neValueT :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> CUChar -> IO ()
+
+-- | p_ltValue : Pointer to function : state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h &THCudaByteTensor_ltValue"
+  p_ltValue :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> CUChar -> IO ())
+
+-- | p_gtValue : Pointer to function : state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h &THCudaByteTensor_gtValue"
+  p_gtValue :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> CUChar -> IO ())
+
+-- | p_leValue : Pointer to function : state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h &THCudaByteTensor_leValue"
+  p_leValue :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> CUChar -> IO ())
+
+-- | p_geValue : Pointer to function : state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h &THCudaByteTensor_geValue"
+  p_geValue :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> CUChar -> IO ())
+
+-- | p_eqValue : Pointer to function : state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h &THCudaByteTensor_eqValue"
+  p_eqValue :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> CUChar -> IO ())
+
+-- | p_neValue : Pointer to function : state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h &THCudaByteTensor_neValue"
+  p_neValue :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> CUChar -> IO ())
+
+-- | p_ltValueT : Pointer to function : state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h &THCudaByteTensor_ltValueT"
+  p_ltValueT :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> CUChar -> IO ())
+
+-- | p_gtValueT : Pointer to function : state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h &THCudaByteTensor_gtValueT"
+  p_gtValueT :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> CUChar -> IO ())
+
+-- | p_leValueT : Pointer to function : state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h &THCudaByteTensor_leValueT"
+  p_leValueT :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> CUChar -> IO ())
+
+-- | p_geValueT : Pointer to function : state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h &THCudaByteTensor_geValueT"
+  p_geValueT :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> CUChar -> IO ())
+
+-- | p_eqValueT : Pointer to function : state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h &THCudaByteTensor_eqValueT"
+  p_eqValueT :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> CUChar -> IO ())
+
+-- | p_neValueT : Pointer to function : state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h &THCudaByteTensor_neValueT"
+  p_neValueT :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> CUChar -> IO ())
diff --git a/src/Torch/FFI/THC/Byte/TensorMathCompareT.hs b/src/Torch/FFI/THC/Byte/TensorMathCompareT.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Byte/TensorMathCompareT.hs
@@ -0,0 +1,105 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Byte.TensorMathCompareT where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_ltTensor :  state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h THCudaByteTensor_ltTensor"
+  c_ltTensor :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> IO ()
+
+-- | c_gtTensor :  state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h THCudaByteTensor_gtTensor"
+  c_gtTensor :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> IO ()
+
+-- | c_leTensor :  state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h THCudaByteTensor_leTensor"
+  c_leTensor :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> IO ()
+
+-- | c_geTensor :  state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h THCudaByteTensor_geTensor"
+  c_geTensor :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> IO ()
+
+-- | c_eqTensor :  state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h THCudaByteTensor_eqTensor"
+  c_eqTensor :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> IO ()
+
+-- | c_neTensor :  state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h THCudaByteTensor_neTensor"
+  c_neTensor :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> IO ()
+
+-- | c_ltTensorT :  state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h THCudaByteTensor_ltTensorT"
+  c_ltTensorT :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> IO ()
+
+-- | c_gtTensorT :  state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h THCudaByteTensor_gtTensorT"
+  c_gtTensorT :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> IO ()
+
+-- | c_leTensorT :  state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h THCudaByteTensor_leTensorT"
+  c_leTensorT :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> IO ()
+
+-- | c_geTensorT :  state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h THCudaByteTensor_geTensorT"
+  c_geTensorT :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> IO ()
+
+-- | c_eqTensorT :  state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h THCudaByteTensor_eqTensorT"
+  c_eqTensorT :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> IO ()
+
+-- | c_neTensorT :  state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h THCudaByteTensor_neTensorT"
+  c_neTensorT :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> IO ()
+
+-- | p_ltTensor : Pointer to function : state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h &THCudaByteTensor_ltTensor"
+  p_ltTensor :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> IO ())
+
+-- | p_gtTensor : Pointer to function : state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h &THCudaByteTensor_gtTensor"
+  p_gtTensor :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> IO ())
+
+-- | p_leTensor : Pointer to function : state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h &THCudaByteTensor_leTensor"
+  p_leTensor :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> IO ())
+
+-- | p_geTensor : Pointer to function : state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h &THCudaByteTensor_geTensor"
+  p_geTensor :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> IO ())
+
+-- | p_eqTensor : Pointer to function : state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h &THCudaByteTensor_eqTensor"
+  p_eqTensor :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> IO ())
+
+-- | p_neTensor : Pointer to function : state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h &THCudaByteTensor_neTensor"
+  p_neTensor :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> IO ())
+
+-- | p_ltTensorT : Pointer to function : state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h &THCudaByteTensor_ltTensorT"
+  p_ltTensorT :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> IO ())
+
+-- | p_gtTensorT : Pointer to function : state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h &THCudaByteTensor_gtTensorT"
+  p_gtTensorT :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> IO ())
+
+-- | p_leTensorT : Pointer to function : state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h &THCudaByteTensor_leTensorT"
+  p_leTensorT :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> IO ())
+
+-- | p_geTensorT : Pointer to function : state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h &THCudaByteTensor_geTensorT"
+  p_geTensorT :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> IO ())
+
+-- | p_eqTensorT : Pointer to function : state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h &THCudaByteTensor_eqTensorT"
+  p_eqTensorT :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> IO ())
+
+-- | p_neTensorT : Pointer to function : state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h &THCudaByteTensor_neTensorT"
+  p_neTensorT :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> IO ())
diff --git a/src/Torch/FFI/THC/Byte/TensorMathPairwise.hs b/src/Torch/FFI/THC/Byte/TensorMathPairwise.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Byte/TensorMathPairwise.hs
@@ -0,0 +1,121 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Byte.TensorMathPairwise where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_add :  state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h THCudaByteTensor_add"
+  c_add :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> CUChar -> IO ()
+
+-- | c_sub :  state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h THCudaByteTensor_sub"
+  c_sub :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> CUChar -> IO ()
+
+-- | c_add_scaled :  state self src value alpha -> void
+foreign import ccall "THCTensorMathPairwise.h THCudaByteTensor_add_scaled"
+  c_add_scaled :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> CUChar -> CUChar -> IO ()
+
+-- | c_sub_scaled :  state self src value alpha -> void
+foreign import ccall "THCTensorMathPairwise.h THCudaByteTensor_sub_scaled"
+  c_sub_scaled :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> CUChar -> CUChar -> IO ()
+
+-- | c_mul :  state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h THCudaByteTensor_mul"
+  c_mul :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> CUChar -> IO ()
+
+-- | c_div :  state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h THCudaByteTensor_div"
+  c_div :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> CUChar -> IO ()
+
+-- | c_lshift :  state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h THCudaByteTensor_lshift"
+  c_lshift :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> CUChar -> IO ()
+
+-- | c_rshift :  state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h THCudaByteTensor_rshift"
+  c_rshift :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> CUChar -> IO ()
+
+-- | c_fmod :  state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h THCudaByteTensor_fmod"
+  c_fmod :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> CUChar -> IO ()
+
+-- | c_remainder :  state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h THCudaByteTensor_remainder"
+  c_remainder :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> CUChar -> IO ()
+
+-- | c_bitand :  state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h THCudaByteTensor_bitand"
+  c_bitand :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> CUChar -> IO ()
+
+-- | c_bitor :  state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h THCudaByteTensor_bitor"
+  c_bitor :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> CUChar -> IO ()
+
+-- | c_bitxor :  state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h THCudaByteTensor_bitxor"
+  c_bitxor :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> CUChar -> IO ()
+
+-- | c_equal :  state self src -> int
+foreign import ccall "THCTensorMathPairwise.h THCudaByteTensor_equal"
+  c_equal :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> IO CInt
+
+-- | p_add : Pointer to function : state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h &THCudaByteTensor_add"
+  p_add :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> CUChar -> IO ())
+
+-- | p_sub : Pointer to function : state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h &THCudaByteTensor_sub"
+  p_sub :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> CUChar -> IO ())
+
+-- | p_add_scaled : Pointer to function : state self src value alpha -> void
+foreign import ccall "THCTensorMathPairwise.h &THCudaByteTensor_add_scaled"
+  p_add_scaled :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> CUChar -> CUChar -> IO ())
+
+-- | p_sub_scaled : Pointer to function : state self src value alpha -> void
+foreign import ccall "THCTensorMathPairwise.h &THCudaByteTensor_sub_scaled"
+  p_sub_scaled :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> CUChar -> CUChar -> IO ())
+
+-- | p_mul : Pointer to function : state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h &THCudaByteTensor_mul"
+  p_mul :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> CUChar -> IO ())
+
+-- | p_div : Pointer to function : state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h &THCudaByteTensor_div"
+  p_div :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> CUChar -> IO ())
+
+-- | p_lshift : Pointer to function : state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h &THCudaByteTensor_lshift"
+  p_lshift :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> CUChar -> IO ())
+
+-- | p_rshift : Pointer to function : state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h &THCudaByteTensor_rshift"
+  p_rshift :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> CUChar -> IO ())
+
+-- | p_fmod : Pointer to function : state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h &THCudaByteTensor_fmod"
+  p_fmod :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> CUChar -> IO ())
+
+-- | p_remainder : Pointer to function : state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h &THCudaByteTensor_remainder"
+  p_remainder :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> CUChar -> IO ())
+
+-- | p_bitand : Pointer to function : state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h &THCudaByteTensor_bitand"
+  p_bitand :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> CUChar -> IO ())
+
+-- | p_bitor : Pointer to function : state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h &THCudaByteTensor_bitor"
+  p_bitor :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> CUChar -> IO ())
+
+-- | p_bitxor : Pointer to function : state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h &THCudaByteTensor_bitxor"
+  p_bitxor :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> CUChar -> IO ())
+
+-- | p_equal : Pointer to function : state self src -> int
+foreign import ccall "THCTensorMathPairwise.h &THCudaByteTensor_equal"
+  p_equal :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> IO CInt)
diff --git a/src/Torch/FFI/THC/Byte/TensorMathPointwise.hs b/src/Torch/FFI/THC/Byte/TensorMathPointwise.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Byte/TensorMathPointwise.hs
@@ -0,0 +1,177 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Byte.TensorMathPointwise where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_sign :  state self src -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaByteTensor_sign"
+  c_sign :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> IO ()
+
+-- | c_clamp :  state self src min_value max_value -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaByteTensor_clamp"
+  c_clamp :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> CUChar -> CUChar -> IO ()
+
+-- | c_cross :  state self src1 src2 dimension -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaByteTensor_cross"
+  c_cross :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> CInt -> IO ()
+
+-- | c_cadd :  state self src1 value src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaByteTensor_cadd"
+  c_cadd :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> CUChar -> Ptr C'THCudaByteTensor -> IO ()
+
+-- | c_csub :  state self src1 value src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaByteTensor_csub"
+  c_csub :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> CUChar -> Ptr C'THCudaByteTensor -> IO ()
+
+-- | c_cmul :  state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaByteTensor_cmul"
+  c_cmul :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> IO ()
+
+-- | c_cpow :  state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaByteTensor_cpow"
+  c_cpow :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> IO ()
+
+-- | c_cdiv :  state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaByteTensor_cdiv"
+  c_cdiv :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> IO ()
+
+-- | c_clshift :  state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaByteTensor_clshift"
+  c_clshift :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> IO ()
+
+-- | c_crshift :  state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaByteTensor_crshift"
+  c_crshift :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> IO ()
+
+-- | c_cmax :  state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaByteTensor_cmax"
+  c_cmax :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> IO ()
+
+-- | c_cmin :  state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaByteTensor_cmin"
+  c_cmin :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> IO ()
+
+-- | c_cfmod :  state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaByteTensor_cfmod"
+  c_cfmod :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> IO ()
+
+-- | c_cremainder :  state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaByteTensor_cremainder"
+  c_cremainder :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> IO ()
+
+-- | c_cmaxValue :  state self src value -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaByteTensor_cmaxValue"
+  c_cmaxValue :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> CUChar -> IO ()
+
+-- | c_cminValue :  state self src value -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaByteTensor_cminValue"
+  c_cminValue :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> CUChar -> IO ()
+
+-- | c_cbitand :  state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaByteTensor_cbitand"
+  c_cbitand :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> IO ()
+
+-- | c_cbitor :  state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaByteTensor_cbitor"
+  c_cbitor :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> IO ()
+
+-- | c_cbitxor :  state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaByteTensor_cbitxor"
+  c_cbitxor :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> IO ()
+
+-- | c_addcmul :  state self t value src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaByteTensor_addcmul"
+  c_addcmul :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> CUChar -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> IO ()
+
+-- | c_addcdiv :  state self t value src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaByteTensor_addcdiv"
+  c_addcdiv :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> CUChar -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> IO ()
+
+-- | p_sign : Pointer to function : state self src -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaByteTensor_sign"
+  p_sign :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> IO ())
+
+-- | p_clamp : Pointer to function : state self src min_value max_value -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaByteTensor_clamp"
+  p_clamp :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> CUChar -> CUChar -> IO ())
+
+-- | p_cross : Pointer to function : state self src1 src2 dimension -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaByteTensor_cross"
+  p_cross :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> CInt -> IO ())
+
+-- | p_cadd : Pointer to function : state self src1 value src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaByteTensor_cadd"
+  p_cadd :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> CUChar -> Ptr C'THCudaByteTensor -> IO ())
+
+-- | p_csub : Pointer to function : state self src1 value src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaByteTensor_csub"
+  p_csub :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> CUChar -> Ptr C'THCudaByteTensor -> IO ())
+
+-- | p_cmul : Pointer to function : state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaByteTensor_cmul"
+  p_cmul :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> IO ())
+
+-- | p_cpow : Pointer to function : state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaByteTensor_cpow"
+  p_cpow :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> IO ())
+
+-- | p_cdiv : Pointer to function : state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaByteTensor_cdiv"
+  p_cdiv :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> IO ())
+
+-- | p_clshift : Pointer to function : state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaByteTensor_clshift"
+  p_clshift :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> IO ())
+
+-- | p_crshift : Pointer to function : state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaByteTensor_crshift"
+  p_crshift :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> IO ())
+
+-- | p_cmax : Pointer to function : state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaByteTensor_cmax"
+  p_cmax :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> IO ())
+
+-- | p_cmin : Pointer to function : state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaByteTensor_cmin"
+  p_cmin :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> IO ())
+
+-- | p_cfmod : Pointer to function : state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaByteTensor_cfmod"
+  p_cfmod :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> IO ())
+
+-- | p_cremainder : Pointer to function : state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaByteTensor_cremainder"
+  p_cremainder :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> IO ())
+
+-- | p_cmaxValue : Pointer to function : state self src value -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaByteTensor_cmaxValue"
+  p_cmaxValue :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> CUChar -> IO ())
+
+-- | p_cminValue : Pointer to function : state self src value -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaByteTensor_cminValue"
+  p_cminValue :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> CUChar -> IO ())
+
+-- | p_cbitand : Pointer to function : state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaByteTensor_cbitand"
+  p_cbitand :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> IO ())
+
+-- | p_cbitor : Pointer to function : state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaByteTensor_cbitor"
+  p_cbitor :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> IO ())
+
+-- | p_cbitxor : Pointer to function : state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaByteTensor_cbitxor"
+  p_cbitxor :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> IO ())
+
+-- | p_addcmul : Pointer to function : state self t value src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaByteTensor_addcmul"
+  p_addcmul :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> CUChar -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> IO ())
+
+-- | p_addcdiv : Pointer to function : state self t value src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaByteTensor_addcdiv"
+  p_addcdiv :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> CUChar -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> IO ())
diff --git a/src/Torch/FFI/THC/Byte/TensorMathReduce.hs b/src/Torch/FFI/THC/Byte/TensorMathReduce.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Byte/TensorMathReduce.hs
@@ -0,0 +1,89 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Byte.TensorMathReduce where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_sum :  state self src dim keepdim -> void
+foreign import ccall "THCTensorMathReduce.h THCudaByteTensor_sum"
+  c_sum :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> CInt -> CInt -> IO ()
+
+-- | c_prod :  state self src dim keepdim -> void
+foreign import ccall "THCTensorMathReduce.h THCudaByteTensor_prod"
+  c_prod :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> CInt -> CInt -> IO ()
+
+-- | c_sumall :  state self -> accreal
+foreign import ccall "THCTensorMathReduce.h THCudaByteTensor_sumall"
+  c_sumall :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> IO CLong
+
+-- | c_prodall :  state self -> accreal
+foreign import ccall "THCTensorMathReduce.h THCudaByteTensor_prodall"
+  c_prodall :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> IO CLong
+
+-- | c_min :  state values indices src dim keepdim -> void
+foreign import ccall "THCTensorMathReduce.h THCudaByteTensor_min"
+  c_min :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaByteTensor -> CInt -> CInt -> IO ()
+
+-- | c_max :  state values indices src dim keepdim -> void
+foreign import ccall "THCTensorMathReduce.h THCudaByteTensor_max"
+  c_max :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaByteTensor -> CInt -> CInt -> IO ()
+
+-- | c_minall :  state self -> real
+foreign import ccall "THCTensorMathReduce.h THCudaByteTensor_minall"
+  c_minall :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> IO CUChar
+
+-- | c_maxall :  state self -> real
+foreign import ccall "THCTensorMathReduce.h THCudaByteTensor_maxall"
+  c_maxall :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> IO CUChar
+
+-- | c_medianall :  state self -> real
+foreign import ccall "THCTensorMathReduce.h THCudaByteTensor_medianall"
+  c_medianall :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> IO CUChar
+
+-- | c_median :  state values indices src dim keepdim -> void
+foreign import ccall "THCTensorMathReduce.h THCudaByteTensor_median"
+  c_median :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaByteTensor -> CInt -> CInt -> IO ()
+
+-- | p_sum : Pointer to function : state self src dim keepdim -> void
+foreign import ccall "THCTensorMathReduce.h &THCudaByteTensor_sum"
+  p_sum :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> CInt -> CInt -> IO ())
+
+-- | p_prod : Pointer to function : state self src dim keepdim -> void
+foreign import ccall "THCTensorMathReduce.h &THCudaByteTensor_prod"
+  p_prod :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> CInt -> CInt -> IO ())
+
+-- | p_sumall : Pointer to function : state self -> accreal
+foreign import ccall "THCTensorMathReduce.h &THCudaByteTensor_sumall"
+  p_sumall :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> IO CLong)
+
+-- | p_prodall : Pointer to function : state self -> accreal
+foreign import ccall "THCTensorMathReduce.h &THCudaByteTensor_prodall"
+  p_prodall :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> IO CLong)
+
+-- | p_min : Pointer to function : state values indices src dim keepdim -> void
+foreign import ccall "THCTensorMathReduce.h &THCudaByteTensor_min"
+  p_min :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaByteTensor -> CInt -> CInt -> IO ())
+
+-- | p_max : Pointer to function : state values indices src dim keepdim -> void
+foreign import ccall "THCTensorMathReduce.h &THCudaByteTensor_max"
+  p_max :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaByteTensor -> CInt -> CInt -> IO ())
+
+-- | p_minall : Pointer to function : state self -> real
+foreign import ccall "THCTensorMathReduce.h &THCudaByteTensor_minall"
+  p_minall :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> IO CUChar)
+
+-- | p_maxall : Pointer to function : state self -> real
+foreign import ccall "THCTensorMathReduce.h &THCudaByteTensor_maxall"
+  p_maxall :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> IO CUChar)
+
+-- | p_medianall : Pointer to function : state self -> real
+foreign import ccall "THCTensorMathReduce.h &THCudaByteTensor_medianall"
+  p_medianall :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> IO CUChar)
+
+-- | p_median : Pointer to function : state values indices src dim keepdim -> void
+foreign import ccall "THCTensorMathReduce.h &THCudaByteTensor_median"
+  p_median :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaByteTensor -> CInt -> CInt -> IO ())
diff --git a/src/Torch/FFI/THC/Byte/TensorMathScan.hs b/src/Torch/FFI/THC/Byte/TensorMathScan.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Byte/TensorMathScan.hs
@@ -0,0 +1,25 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Byte.TensorMathScan where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_cumsum :  state self src dim -> void
+foreign import ccall "THCTensorMathScan.h THCudaByteTensor_cumsum"
+  c_cumsum :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> CInt -> IO ()
+
+-- | c_cumprod :  state self src dim -> void
+foreign import ccall "THCTensorMathScan.h THCudaByteTensor_cumprod"
+  c_cumprod :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> CInt -> IO ()
+
+-- | p_cumsum : Pointer to function : state self src dim -> void
+foreign import ccall "THCTensorMathScan.h &THCudaByteTensor_cumsum"
+  p_cumsum :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> CInt -> IO ())
+
+-- | p_cumprod : Pointer to function : state self src dim -> void
+foreign import ccall "THCTensorMathScan.h &THCudaByteTensor_cumprod"
+  p_cumprod :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> CInt -> IO ())
diff --git a/src/Torch/FFI/THC/Byte/TensorMode.hs b/src/Torch/FFI/THC/Byte/TensorMode.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Byte/TensorMode.hs
@@ -0,0 +1,17 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Byte.TensorMode where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_mode :  state values indices input dimension keepdim -> void
+foreign import ccall "THCTensorMode.h THCudaByteTensor_mode"
+  c_mode :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaByteTensor -> CInt -> CInt -> IO ()
+
+-- | p_mode : Pointer to function : state values indices input dimension keepdim -> void
+foreign import ccall "THCTensorMode.h &THCudaByteTensor_mode"
+  p_mode :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaByteTensor -> CInt -> CInt -> IO ())
diff --git a/src/Torch/FFI/THC/Byte/TensorRandom.hs b/src/Torch/FFI/THC/Byte/TensorRandom.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Byte/TensorRandom.hs
@@ -0,0 +1,57 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Byte.TensorRandom where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_random :  state self -> void
+foreign import ccall "THCTensorRandom.h THCudaByteTensor_random"
+  c_random :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> IO ()
+
+-- | c_clampedRandom :  state self min max -> void
+foreign import ccall "THCTensorRandom.h THCudaByteTensor_clampedRandom"
+  c_clampedRandom :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> CLLong -> CLLong -> IO ()
+
+-- | c_cappedRandom :  state self max -> void
+foreign import ccall "THCTensorRandom.h THCudaByteTensor_cappedRandom"
+  c_cappedRandom :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> CLLong -> IO ()
+
+-- | c_bernoulli :  state self p -> void
+foreign import ccall "THCTensorRandom.h THCudaByteTensor_bernoulli"
+  c_bernoulli :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> CDouble -> IO ()
+
+-- | c_bernoulli_DoubleTensor :  state self p -> void
+foreign import ccall "THCTensorRandom.h THCudaByteTensor_bernoulli_DoubleTensor"
+  c_bernoulli_DoubleTensor :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_geometric :  state self p -> void
+foreign import ccall "THCTensorRandom.h THCudaByteTensor_geometric"
+  c_geometric :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> CDouble -> IO ()
+
+-- | p_random : Pointer to function : state self -> void
+foreign import ccall "THCTensorRandom.h &THCudaByteTensor_random"
+  p_random :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> IO ())
+
+-- | p_clampedRandom : Pointer to function : state self min max -> void
+foreign import ccall "THCTensorRandom.h &THCudaByteTensor_clampedRandom"
+  p_clampedRandom :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> CLLong -> CLLong -> IO ())
+
+-- | p_cappedRandom : Pointer to function : state self max -> void
+foreign import ccall "THCTensorRandom.h &THCudaByteTensor_cappedRandom"
+  p_cappedRandom :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> CLLong -> IO ())
+
+-- | p_bernoulli : Pointer to function : state self p -> void
+foreign import ccall "THCTensorRandom.h &THCudaByteTensor_bernoulli"
+  p_bernoulli :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> CDouble -> IO ())
+
+-- | p_bernoulli_DoubleTensor : Pointer to function : state self p -> void
+foreign import ccall "THCTensorRandom.h &THCudaByteTensor_bernoulli_DoubleTensor"
+  p_bernoulli_DoubleTensor :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_geometric : Pointer to function : state self p -> void
+foreign import ccall "THCTensorRandom.h &THCudaByteTensor_geometric"
+  p_geometric :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> CDouble -> IO ())
diff --git a/src/Torch/FFI/THC/Byte/TensorScatterGather.hs b/src/Torch/FFI/THC/Byte/TensorScatterGather.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Byte/TensorScatterGather.hs
@@ -0,0 +1,41 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Byte.TensorScatterGather where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_gather :  state tensor src dim index -> void
+foreign import ccall "THCTensorScatterGather.h THCudaByteTensor_gather"
+  c_gather :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> CInt -> Ptr C'THCudaLongTensor -> IO ()
+
+-- | c_scatter :  state tensor dim index src -> void
+foreign import ccall "THCTensorScatterGather.h THCudaByteTensor_scatter"
+  c_scatter :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> CInt -> Ptr C'THCudaLongTensor -> Ptr C'THCudaByteTensor -> IO ()
+
+-- | c_scatterAdd :  state tensor dim index src -> void
+foreign import ccall "THCTensorScatterGather.h THCudaByteTensor_scatterAdd"
+  c_scatterAdd :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> CInt -> Ptr C'THCudaLongTensor -> Ptr C'THCudaByteTensor -> IO ()
+
+-- | c_scatterFill :  state tensor dim index value -> void
+foreign import ccall "THCTensorScatterGather.h THCudaByteTensor_scatterFill"
+  c_scatterFill :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> CInt -> Ptr C'THCudaLongTensor -> CUChar -> IO ()
+
+-- | p_gather : Pointer to function : state tensor src dim index -> void
+foreign import ccall "THCTensorScatterGather.h &THCudaByteTensor_gather"
+  p_gather :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaByteTensor -> CInt -> Ptr C'THCudaLongTensor -> IO ())
+
+-- | p_scatter : Pointer to function : state tensor dim index src -> void
+foreign import ccall "THCTensorScatterGather.h &THCudaByteTensor_scatter"
+  p_scatter :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> CInt -> Ptr C'THCudaLongTensor -> Ptr C'THCudaByteTensor -> IO ())
+
+-- | p_scatterAdd : Pointer to function : state tensor dim index src -> void
+foreign import ccall "THCTensorScatterGather.h &THCudaByteTensor_scatterAdd"
+  p_scatterAdd :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> CInt -> Ptr C'THCudaLongTensor -> Ptr C'THCudaByteTensor -> IO ())
+
+-- | p_scatterFill : Pointer to function : state tensor dim index value -> void
+foreign import ccall "THCTensorScatterGather.h &THCudaByteTensor_scatterFill"
+  p_scatterFill :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> CInt -> Ptr C'THCudaLongTensor -> CUChar -> IO ())
diff --git a/src/Torch/FFI/THC/Byte/TensorSort.hs b/src/Torch/FFI/THC/Byte/TensorSort.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Byte/TensorSort.hs
@@ -0,0 +1,25 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Byte.TensorSort where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_sortKeyValueInplace :  state keys values dim order -> void
+foreign import ccall "THCTensorSort.h THCudaByteTensor_sortKeyValueInplace"
+  c_sortKeyValueInplace :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaLongTensor -> CInt -> CInt -> IO ()
+
+-- | c_sort :  state sorted indices input dim order -> void
+foreign import ccall "THCTensorSort.h THCudaByteTensor_sort"
+  c_sort :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaByteTensor -> CInt -> CInt -> IO ()
+
+-- | p_sortKeyValueInplace : Pointer to function : state keys values dim order -> void
+foreign import ccall "THCTensorSort.h &THCudaByteTensor_sortKeyValueInplace"
+  p_sortKeyValueInplace :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaLongTensor -> CInt -> CInt -> IO ())
+
+-- | p_sort : Pointer to function : state sorted indices input dim order -> void
+foreign import ccall "THCTensorSort.h &THCudaByteTensor_sort"
+  p_sort :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaByteTensor -> CInt -> CInt -> IO ())
diff --git a/src/Torch/FFI/THC/Byte/TensorTopK.hs b/src/Torch/FFI/THC/Byte/TensorTopK.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Byte/TensorTopK.hs
@@ -0,0 +1,17 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Byte.TensorTopK where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_topk :  state topK indices input k dim dir sorted -> void
+foreign import ccall "THCTensorTopK.h THCudaByteTensor_topk"
+  c_topk :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaByteTensor -> CLLong -> CInt -> CInt -> CInt -> IO ()
+
+-- | p_topk : Pointer to function : state topK indices input k dim dir sorted -> void
+foreign import ccall "THCTensorTopK.h &THCudaByteTensor_topk"
+  p_topk :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaByteTensor -> CLLong -> CInt -> CInt -> CInt -> IO ())
diff --git a/src/Torch/FFI/THC/CachingAllocator.hs b/src/Torch/FFI/THC/CachingAllocator.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/CachingAllocator.hs
@@ -0,0 +1,57 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.CachingAllocator where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_THCCachingAllocator_getBaseAllocation :  ptr size -> void *
+foreign import ccall "THCCachingAllocator.h THCCachingAllocator_getBaseAllocation"
+  c_THCCachingAllocator_getBaseAllocation :: Ptr () -> Ptr CSize -> IO (Ptr ())
+
+-- | c_THCCachingAllocator_recordStream :  ptr stream -> void
+foreign import ccall "THCCachingAllocator.h THCCachingAllocator_recordStream"
+  c_THCCachingAllocator_recordStream :: Ptr () -> Ptr C'THCStream -> IO ()
+
+-- | c_THCCachingAllocator_currentMemoryAllocated :  device -> uint64_t
+foreign import ccall "THCCachingAllocator.h THCCachingAllocator_currentMemoryAllocated"
+  c_THCCachingAllocator_currentMemoryAllocated :: CInt -> IO CULong
+
+-- | c_THCCachingAllocator_maxMemoryAllocated :  device -> uint64_t
+foreign import ccall "THCCachingAllocator.h THCCachingAllocator_maxMemoryAllocated"
+  c_THCCachingAllocator_maxMemoryAllocated :: CInt -> IO CULong
+
+-- | c_THCCachingAllocator_currentMemoryCached :  device -> uint64_t
+foreign import ccall "THCCachingAllocator.h THCCachingAllocator_currentMemoryCached"
+  c_THCCachingAllocator_currentMemoryCached :: CInt -> IO CULong
+
+-- | c_THCCachingAllocator_maxMemoryCached :  device -> uint64_t
+foreign import ccall "THCCachingAllocator.h THCCachingAllocator_maxMemoryCached"
+  c_THCCachingAllocator_maxMemoryCached :: CInt -> IO CULong
+
+-- | p_THCCachingAllocator_getBaseAllocation : Pointer to function : ptr size -> void *
+foreign import ccall "THCCachingAllocator.h &THCCachingAllocator_getBaseAllocation"
+  p_THCCachingAllocator_getBaseAllocation :: FunPtr (Ptr () -> Ptr CSize -> IO (Ptr ()))
+
+-- | p_THCCachingAllocator_recordStream : Pointer to function : ptr stream -> void
+foreign import ccall "THCCachingAllocator.h &THCCachingAllocator_recordStream"
+  p_THCCachingAllocator_recordStream :: FunPtr (Ptr () -> Ptr C'THCStream -> IO ())
+
+-- | p_THCCachingAllocator_currentMemoryAllocated : Pointer to function : device -> uint64_t
+foreign import ccall "THCCachingAllocator.h &THCCachingAllocator_currentMemoryAllocated"
+  p_THCCachingAllocator_currentMemoryAllocated :: FunPtr (CInt -> IO CULong)
+
+-- | p_THCCachingAllocator_maxMemoryAllocated : Pointer to function : device -> uint64_t
+foreign import ccall "THCCachingAllocator.h &THCCachingAllocator_maxMemoryAllocated"
+  p_THCCachingAllocator_maxMemoryAllocated :: FunPtr (CInt -> IO CULong)
+
+-- | p_THCCachingAllocator_currentMemoryCached : Pointer to function : device -> uint64_t
+foreign import ccall "THCCachingAllocator.h &THCCachingAllocator_currentMemoryCached"
+  p_THCCachingAllocator_currentMemoryCached :: FunPtr (CInt -> IO CULong)
+
+-- | p_THCCachingAllocator_maxMemoryCached : Pointer to function : device -> uint64_t
+foreign import ccall "THCCachingAllocator.h &THCCachingAllocator_maxMemoryCached"
+  p_THCCachingAllocator_maxMemoryCached :: FunPtr (CInt -> IO CULong)
diff --git a/src/Torch/FFI/THC/CachingHostAllocator.hs b/src/Torch/FFI/THC/CachingHostAllocator.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/CachingHostAllocator.hs
@@ -0,0 +1,17 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.CachingHostAllocator where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_THCCachingHostAllocator_emptyCache :   -> void
+foreign import ccall "THCCachingHostAllocator.h THCCachingHostAllocator_emptyCache"
+  c_THCCachingHostAllocator_emptyCache :: IO ()
+
+-- | p_THCCachingHostAllocator_emptyCache : Pointer to function :  -> void
+foreign import ccall "THCCachingHostAllocator.h &THCCachingHostAllocator_emptyCache"
+  p_THCCachingHostAllocator_emptyCache :: FunPtr (IO ())
diff --git a/src/Torch/FFI/THC/Char/Storage.hs b/src/Torch/FFI/THC/Char/Storage.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Char/Storage.hs
@@ -0,0 +1,161 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Char.Storage where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_data :  state  -> real *
+foreign import ccall "THCStorage.h THCudaCharStorage_data"
+  c_data :: Ptr C'THCState -> Ptr C'THCCharStorage -> IO (Ptr CChar)
+
+-- | c_size :  state  -> ptrdiff_t
+foreign import ccall "THCStorage.h THCudaCharStorage_size"
+  c_size :: Ptr C'THCState -> Ptr C'THCCharStorage -> IO CPtrdiff
+
+-- | c_set :  state    -> void
+foreign import ccall "THCStorage.h THCudaCharStorage_set"
+  c_set :: Ptr C'THCState -> Ptr C'THCCharStorage -> CPtrdiff -> CChar -> IO ()
+
+-- | c_get :  state   -> real
+foreign import ccall "THCStorage.h THCudaCharStorage_get"
+  c_get :: Ptr C'THCState -> Ptr C'THCCharStorage -> CPtrdiff -> IO CChar
+
+-- | c_new :  state -> THCStorage *
+foreign import ccall "THCStorage.h THCudaCharStorage_new"
+  c_new :: Ptr C'THCState -> IO (Ptr C'THCCharStorage)
+
+-- | c_newWithSize :  state size -> THCStorage *
+foreign import ccall "THCStorage.h THCudaCharStorage_newWithSize"
+  c_newWithSize :: Ptr C'THCState -> CPtrdiff -> IO (Ptr C'THCCharStorage)
+
+-- | c_newWithSize1 :  state  -> THCStorage *
+foreign import ccall "THCStorage.h THCudaCharStorage_newWithSize1"
+  c_newWithSize1 :: Ptr C'THCState -> CChar -> IO (Ptr C'THCCharStorage)
+
+-- | c_newWithSize2 :  state   -> THCStorage *
+foreign import ccall "THCStorage.h THCudaCharStorage_newWithSize2"
+  c_newWithSize2 :: Ptr C'THCState -> CChar -> CChar -> IO (Ptr C'THCCharStorage)
+
+-- | c_newWithSize3 :  state    -> THCStorage *
+foreign import ccall "THCStorage.h THCudaCharStorage_newWithSize3"
+  c_newWithSize3 :: Ptr C'THCState -> CChar -> CChar -> CChar -> IO (Ptr C'THCCharStorage)
+
+-- | c_newWithSize4 :  state     -> THCStorage *
+foreign import ccall "THCStorage.h THCudaCharStorage_newWithSize4"
+  c_newWithSize4 :: Ptr C'THCState -> CChar -> CChar -> CChar -> CChar -> IO (Ptr C'THCCharStorage)
+
+-- | c_newWithMapping :  state filename size shared -> THCStorage *
+foreign import ccall "THCStorage.h THCudaCharStorage_newWithMapping"
+  c_newWithMapping :: Ptr C'THCState -> Ptr CChar -> CPtrdiff -> CInt -> IO (Ptr C'THCCharStorage)
+
+-- | c_newWithData :  state data size -> THCStorage *
+foreign import ccall "THCStorage.h THCudaCharStorage_newWithData"
+  c_newWithData :: Ptr C'THCState -> Ptr CChar -> CPtrdiff -> IO (Ptr C'THCCharStorage)
+
+-- | c_setFlag :  state storage flag -> void
+foreign import ccall "THCStorage.h THCudaCharStorage_setFlag"
+  c_setFlag :: Ptr C'THCState -> Ptr C'THCCharStorage -> CChar -> IO ()
+
+-- | c_clearFlag :  state storage flag -> void
+foreign import ccall "THCStorage.h THCudaCharStorage_clearFlag"
+  c_clearFlag :: Ptr C'THCState -> Ptr C'THCCharStorage -> CChar -> IO ()
+
+-- | c_retain :  state storage -> void
+foreign import ccall "THCStorage.h THCudaCharStorage_retain"
+  c_retain :: Ptr C'THCState -> Ptr C'THCCharStorage -> IO ()
+
+-- | c_free :  state storage -> void
+foreign import ccall "THCStorage.h THCudaCharStorage_free"
+  c_free :: Ptr C'THCState -> Ptr C'THCCharStorage -> IO ()
+
+-- | c_resize :  state storage size -> void
+foreign import ccall "THCStorage.h THCudaCharStorage_resize"
+  c_resize :: Ptr C'THCState -> Ptr C'THCCharStorage -> CPtrdiff -> IO ()
+
+-- | c_fill :  state storage value -> void
+foreign import ccall "THCStorage.h THCudaCharStorage_fill"
+  c_fill :: Ptr C'THCState -> Ptr C'THCCharStorage -> CChar -> IO ()
+
+-- | c_getDevice :  state storage -> int
+foreign import ccall "THCStorage.h THCudaCharStorage_getDevice"
+  c_getDevice :: Ptr C'THCState -> Ptr C'THCCharStorage -> IO CInt
+
+-- | p_data : Pointer to function : state  -> real *
+foreign import ccall "THCStorage.h &THCudaCharStorage_data"
+  p_data :: FunPtr (Ptr C'THCState -> Ptr C'THCCharStorage -> IO (Ptr CChar))
+
+-- | p_size : Pointer to function : state  -> ptrdiff_t
+foreign import ccall "THCStorage.h &THCudaCharStorage_size"
+  p_size :: FunPtr (Ptr C'THCState -> Ptr C'THCCharStorage -> IO CPtrdiff)
+
+-- | p_set : Pointer to function : state    -> void
+foreign import ccall "THCStorage.h &THCudaCharStorage_set"
+  p_set :: FunPtr (Ptr C'THCState -> Ptr C'THCCharStorage -> CPtrdiff -> CChar -> IO ())
+
+-- | p_get : Pointer to function : state   -> real
+foreign import ccall "THCStorage.h &THCudaCharStorage_get"
+  p_get :: FunPtr (Ptr C'THCState -> Ptr C'THCCharStorage -> CPtrdiff -> IO CChar)
+
+-- | p_new : Pointer to function : state -> THCStorage *
+foreign import ccall "THCStorage.h &THCudaCharStorage_new"
+  p_new :: FunPtr (Ptr C'THCState -> IO (Ptr C'THCCharStorage))
+
+-- | p_newWithSize : Pointer to function : state size -> THCStorage *
+foreign import ccall "THCStorage.h &THCudaCharStorage_newWithSize"
+  p_newWithSize :: FunPtr (Ptr C'THCState -> CPtrdiff -> IO (Ptr C'THCCharStorage))
+
+-- | p_newWithSize1 : Pointer to function : state  -> THCStorage *
+foreign import ccall "THCStorage.h &THCudaCharStorage_newWithSize1"
+  p_newWithSize1 :: FunPtr (Ptr C'THCState -> CChar -> IO (Ptr C'THCCharStorage))
+
+-- | p_newWithSize2 : Pointer to function : state   -> THCStorage *
+foreign import ccall "THCStorage.h &THCudaCharStorage_newWithSize2"
+  p_newWithSize2 :: FunPtr (Ptr C'THCState -> CChar -> CChar -> IO (Ptr C'THCCharStorage))
+
+-- | p_newWithSize3 : Pointer to function : state    -> THCStorage *
+foreign import ccall "THCStorage.h &THCudaCharStorage_newWithSize3"
+  p_newWithSize3 :: FunPtr (Ptr C'THCState -> CChar -> CChar -> CChar -> IO (Ptr C'THCCharStorage))
+
+-- | p_newWithSize4 : Pointer to function : state     -> THCStorage *
+foreign import ccall "THCStorage.h &THCudaCharStorage_newWithSize4"
+  p_newWithSize4 :: FunPtr (Ptr C'THCState -> CChar -> CChar -> CChar -> CChar -> IO (Ptr C'THCCharStorage))
+
+-- | p_newWithMapping : Pointer to function : state filename size shared -> THCStorage *
+foreign import ccall "THCStorage.h &THCudaCharStorage_newWithMapping"
+  p_newWithMapping :: FunPtr (Ptr C'THCState -> Ptr CChar -> CPtrdiff -> CInt -> IO (Ptr C'THCCharStorage))
+
+-- | p_newWithData : Pointer to function : state data size -> THCStorage *
+foreign import ccall "THCStorage.h &THCudaCharStorage_newWithData"
+  p_newWithData :: FunPtr (Ptr C'THCState -> Ptr CChar -> CPtrdiff -> IO (Ptr C'THCCharStorage))
+
+-- | p_setFlag : Pointer to function : state storage flag -> void
+foreign import ccall "THCStorage.h &THCudaCharStorage_setFlag"
+  p_setFlag :: FunPtr (Ptr C'THCState -> Ptr C'THCCharStorage -> CChar -> IO ())
+
+-- | p_clearFlag : Pointer to function : state storage flag -> void
+foreign import ccall "THCStorage.h &THCudaCharStorage_clearFlag"
+  p_clearFlag :: FunPtr (Ptr C'THCState -> Ptr C'THCCharStorage -> CChar -> IO ())
+
+-- | p_retain : Pointer to function : state storage -> void
+foreign import ccall "THCStorage.h &THCudaCharStorage_retain"
+  p_retain :: FunPtr (Ptr C'THCState -> Ptr C'THCCharStorage -> IO ())
+
+-- | p_free : Pointer to function : state storage -> void
+foreign import ccall "THCStorage.h &THCudaCharStorage_free"
+  p_free :: FunPtr (Ptr C'THCState -> Ptr C'THCCharStorage -> IO ())
+
+-- | p_resize : Pointer to function : state storage size -> void
+foreign import ccall "THCStorage.h &THCudaCharStorage_resize"
+  p_resize :: FunPtr (Ptr C'THCState -> Ptr C'THCCharStorage -> CPtrdiff -> IO ())
+
+-- | p_fill : Pointer to function : state storage value -> void
+foreign import ccall "THCStorage.h &THCudaCharStorage_fill"
+  p_fill :: FunPtr (Ptr C'THCState -> Ptr C'THCCharStorage -> CChar -> IO ())
+
+-- | p_getDevice : Pointer to function : state storage -> int
+foreign import ccall "THCStorage.h &THCudaCharStorage_getDevice"
+  p_getDevice :: FunPtr (Ptr C'THCState -> Ptr C'THCCharStorage -> IO CInt)
diff --git a/src/Torch/FFI/THC/Char/StorageCopy.hs b/src/Torch/FFI/THC/Char/StorageCopy.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Char/StorageCopy.hs
@@ -0,0 +1,113 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Char.StorageCopy where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_rawCopy :  state storage src -> void
+foreign import ccall "THCStorageCopy.h THCudaCharStorage_rawCopy"
+  c_rawCopy :: Ptr C'THCState -> Ptr C'THCCharStorage -> Ptr CChar -> IO ()
+
+-- | c_copy :  state storage src -> void
+foreign import ccall "THCStorageCopy.h THCudaCharStorage_copy"
+  c_copy :: Ptr C'THCState -> Ptr C'THCCharStorage -> Ptr C'THCCharStorage -> IO ()
+
+-- | c_copyByte :  state storage src -> void
+foreign import ccall "THCStorageCopy.h THCudaCharStorage_copyByte"
+  c_copyByte :: Ptr C'THCState -> Ptr C'THCCharStorage -> Ptr C'THByteStorage -> IO ()
+
+-- | c_copyChar :  state storage src -> void
+foreign import ccall "THCStorageCopy.h THCudaCharStorage_copyChar"
+  c_copyChar :: Ptr C'THCState -> Ptr C'THCCharStorage -> Ptr C'THCharStorage -> IO ()
+
+-- | c_copyShort :  state storage src -> void
+foreign import ccall "THCStorageCopy.h THCudaCharStorage_copyShort"
+  c_copyShort :: Ptr C'THCState -> Ptr C'THCCharStorage -> Ptr C'THShortStorage -> IO ()
+
+-- | c_copyInt :  state storage src -> void
+foreign import ccall "THCStorageCopy.h THCudaCharStorage_copyInt"
+  c_copyInt :: Ptr C'THCState -> Ptr C'THCCharStorage -> Ptr C'THIntStorage -> IO ()
+
+-- | c_copyLong :  state storage src -> void
+foreign import ccall "THCStorageCopy.h THCudaCharStorage_copyLong"
+  c_copyLong :: Ptr C'THCState -> Ptr C'THCCharStorage -> Ptr C'THLongStorage -> IO ()
+
+-- | c_copyFloat :  state storage src -> void
+foreign import ccall "THCStorageCopy.h THCudaCharStorage_copyFloat"
+  c_copyFloat :: Ptr C'THCState -> Ptr C'THCCharStorage -> Ptr C'THFloatStorage -> IO ()
+
+-- | c_copyDouble :  state storage src -> void
+foreign import ccall "THCStorageCopy.h THCudaCharStorage_copyDouble"
+  c_copyDouble :: Ptr C'THCState -> Ptr C'THCCharStorage -> Ptr C'THDoubleStorage -> IO ()
+
+-- | c_copyHalf :  state storage src -> void
+foreign import ccall "THCStorageCopy.h THCudaCharStorage_copyHalf"
+  c_copyHalf :: Ptr C'THCState -> Ptr C'THCCharStorage -> Ptr C'THHalfStorage -> IO ()
+
+-- | c_thCopyCuda :  state self src -> void
+foreign import ccall "THCStorageCopy.h THCharStorage_copyCuda"
+  c_thCopyCuda :: Ptr C'THCState -> Ptr C'THCharStorage -> Ptr C'THCCharStorage -> IO ()
+
+-- | c_copyCuda :  state self src -> void
+foreign import ccall "THCStorageCopy.h THCudaCharStorage_copyCuda"
+  c_copyCuda :: Ptr C'THCState -> Ptr C'THCCharStorage -> Ptr C'THCCharStorage -> IO ()
+
+-- | c_copyCPU :  state self src -> void
+foreign import ccall "THCStorageCopy.h THCudaCharStorage_copyCPU"
+  c_copyCPU :: Ptr C'THCState -> Ptr C'THCCharStorage -> Ptr C'THCharStorage -> IO ()
+
+-- | p_rawCopy : Pointer to function : state storage src -> void
+foreign import ccall "THCStorageCopy.h &THCudaCharStorage_rawCopy"
+  p_rawCopy :: FunPtr (Ptr C'THCState -> Ptr C'THCCharStorage -> Ptr CChar -> IO ())
+
+-- | p_copy : Pointer to function : state storage src -> void
+foreign import ccall "THCStorageCopy.h &THCudaCharStorage_copy"
+  p_copy :: FunPtr (Ptr C'THCState -> Ptr C'THCCharStorage -> Ptr C'THCCharStorage -> IO ())
+
+-- | p_copyByte : Pointer to function : state storage src -> void
+foreign import ccall "THCStorageCopy.h &THCudaCharStorage_copyByte"
+  p_copyByte :: FunPtr (Ptr C'THCState -> Ptr C'THCCharStorage -> Ptr C'THByteStorage -> IO ())
+
+-- | p_copyChar : Pointer to function : state storage src -> void
+foreign import ccall "THCStorageCopy.h &THCudaCharStorage_copyChar"
+  p_copyChar :: FunPtr (Ptr C'THCState -> Ptr C'THCCharStorage -> Ptr C'THCharStorage -> IO ())
+
+-- | p_copyShort : Pointer to function : state storage src -> void
+foreign import ccall "THCStorageCopy.h &THCudaCharStorage_copyShort"
+  p_copyShort :: FunPtr (Ptr C'THCState -> Ptr C'THCCharStorage -> Ptr C'THShortStorage -> IO ())
+
+-- | p_copyInt : Pointer to function : state storage src -> void
+foreign import ccall "THCStorageCopy.h &THCudaCharStorage_copyInt"
+  p_copyInt :: FunPtr (Ptr C'THCState -> Ptr C'THCCharStorage -> Ptr C'THIntStorage -> IO ())
+
+-- | p_copyLong : Pointer to function : state storage src -> void
+foreign import ccall "THCStorageCopy.h &THCudaCharStorage_copyLong"
+  p_copyLong :: FunPtr (Ptr C'THCState -> Ptr C'THCCharStorage -> Ptr C'THLongStorage -> IO ())
+
+-- | p_copyFloat : Pointer to function : state storage src -> void
+foreign import ccall "THCStorageCopy.h &THCudaCharStorage_copyFloat"
+  p_copyFloat :: FunPtr (Ptr C'THCState -> Ptr C'THCCharStorage -> Ptr C'THFloatStorage -> IO ())
+
+-- | p_copyDouble : Pointer to function : state storage src -> void
+foreign import ccall "THCStorageCopy.h &THCudaCharStorage_copyDouble"
+  p_copyDouble :: FunPtr (Ptr C'THCState -> Ptr C'THCCharStorage -> Ptr C'THDoubleStorage -> IO ())
+
+-- | p_copyHalf : Pointer to function : state storage src -> void
+foreign import ccall "THCStorageCopy.h &THCudaCharStorage_copyHalf"
+  p_copyHalf :: FunPtr (Ptr C'THCState -> Ptr C'THCCharStorage -> Ptr C'THHalfStorage -> IO ())
+
+-- | p_thCopyCuda : Pointer to function : state self src -> void
+foreign import ccall "THCStorageCopy.h &THCharStorage_copyCuda"
+  p_thCopyCuda :: FunPtr (Ptr C'THCState -> Ptr C'THCharStorage -> Ptr C'THCCharStorage -> IO ())
+
+-- | p_copyCuda : Pointer to function : state self src -> void
+foreign import ccall "THCStorageCopy.h &THCudaCharStorage_copyCuda"
+  p_copyCuda :: FunPtr (Ptr C'THCState -> Ptr C'THCCharStorage -> Ptr C'THCCharStorage -> IO ())
+
+-- | p_copyCPU : Pointer to function : state self src -> void
+foreign import ccall "THCStorageCopy.h &THCudaCharStorage_copyCPU"
+  p_copyCPU :: FunPtr (Ptr C'THCState -> Ptr C'THCCharStorage -> Ptr C'THCharStorage -> IO ())
diff --git a/src/Torch/FFI/THC/Char/Tensor.hs b/src/Torch/FFI/THC/Char/Tensor.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Char/Tensor.hs
@@ -0,0 +1,593 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Char.Tensor where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_storage :  state self -> THCStorage *
+foreign import ccall "THCTensor.h THCudaCharTensor_storage"
+  c_storage :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> IO (Ptr C'THCCharStorage)
+
+-- | c_storageOffset :  state self -> ptrdiff_t
+foreign import ccall "THCTensor.h THCudaCharTensor_storageOffset"
+  c_storageOffset :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> IO CPtrdiff
+
+-- | c_nDimension :  state self -> int
+foreign import ccall "THCTensor.h THCudaCharTensor_nDimension"
+  c_nDimension :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> IO CInt
+
+-- | c_size :  state self dim -> int64_t
+foreign import ccall "THCTensor.h THCudaCharTensor_size"
+  c_size :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> CInt -> IO CLLong
+
+-- | c_stride :  state self dim -> int64_t
+foreign import ccall "THCTensor.h THCudaCharTensor_stride"
+  c_stride :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> CInt -> IO CLLong
+
+-- | c_newSizeOf :  state self -> THLongStorage *
+foreign import ccall "THCTensor.h THCudaCharTensor_newSizeOf"
+  c_newSizeOf :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> IO (Ptr C'THLongStorage)
+
+-- | c_newStrideOf :  state self -> THLongStorage *
+foreign import ccall "THCTensor.h THCudaCharTensor_newStrideOf"
+  c_newStrideOf :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> IO (Ptr C'THLongStorage)
+
+-- | c_data :  state self -> real *
+foreign import ccall "THCTensor.h THCudaCharTensor_data"
+  c_data :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> IO (Ptr CChar)
+
+-- | c_setFlag :  state self flag -> void
+foreign import ccall "THCTensor.h THCudaCharTensor_setFlag"
+  c_setFlag :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> CChar -> IO ()
+
+-- | c_clearFlag :  state self flag -> void
+foreign import ccall "THCTensor.h THCudaCharTensor_clearFlag"
+  c_clearFlag :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> CChar -> IO ()
+
+-- | c_new :  state -> THCTensor *
+foreign import ccall "THCTensor.h THCudaCharTensor_new"
+  c_new :: Ptr C'THCState -> IO (Ptr C'THCudaCharTensor)
+
+-- | c_newWithTensor :  state tensor -> THCTensor *
+foreign import ccall "THCTensor.h THCudaCharTensor_newWithTensor"
+  c_newWithTensor :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> IO (Ptr C'THCudaCharTensor)
+
+-- | c_newWithStorage :  state storage_ storageOffset_ size_ stride_ -> THCTensor *
+foreign import ccall "THCTensor.h THCudaCharTensor_newWithStorage"
+  c_newWithStorage :: Ptr C'THCState -> Ptr C'THCCharStorage -> CPtrdiff -> Ptr C'THLongStorage -> Ptr C'THLongStorage -> IO (Ptr C'THCudaCharTensor)
+
+-- | c_newWithStorage1d :  state storage_ storageOffset_ size0_ stride0_ -> THCTensor *
+foreign import ccall "THCTensor.h THCudaCharTensor_newWithStorage1d"
+  c_newWithStorage1d :: Ptr C'THCState -> Ptr C'THCCharStorage -> CPtrdiff -> CLLong -> CLLong -> IO (Ptr C'THCudaCharTensor)
+
+-- | c_newWithStorage2d :  state storage_ storageOffset_ size0_ stride0_ size1_ stride1_ -> THCTensor *
+foreign import ccall "THCTensor.h THCudaCharTensor_newWithStorage2d"
+  c_newWithStorage2d :: Ptr C'THCState -> Ptr C'THCCharStorage -> CPtrdiff -> CLLong -> CLLong -> CLLong -> CLLong -> IO (Ptr C'THCudaCharTensor)
+
+-- | c_newWithStorage3d :  state storage_ storageOffset_ size0_ stride0_ size1_ stride1_ size2_ stride2_ -> THCTensor *
+foreign import ccall "THCTensor.h THCudaCharTensor_newWithStorage3d"
+  c_newWithStorage3d :: Ptr C'THCState -> Ptr C'THCCharStorage -> CPtrdiff -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> IO (Ptr C'THCudaCharTensor)
+
+-- | c_newWithStorage4d :  state storage_ storageOffset_ size0_ stride0_ size1_ stride1_ size2_ stride2_ size3_ stride3_ -> THCTensor *
+foreign import ccall "THCTensor.h THCudaCharTensor_newWithStorage4d"
+  c_newWithStorage4d :: Ptr C'THCState -> Ptr C'THCCharStorage -> CPtrdiff -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> IO (Ptr C'THCudaCharTensor)
+
+-- | c_newWithSize :  state size_ stride_ -> THCTensor *
+foreign import ccall "THCTensor.h THCudaCharTensor_newWithSize"
+  c_newWithSize :: Ptr C'THCState -> Ptr C'THLongStorage -> Ptr C'THLongStorage -> IO (Ptr C'THCudaCharTensor)
+
+-- | c_newWithSize1d :  state size0_ -> THCTensor *
+foreign import ccall "THCTensor.h THCudaCharTensor_newWithSize1d"
+  c_newWithSize1d :: Ptr C'THCState -> CLLong -> IO (Ptr C'THCudaCharTensor)
+
+-- | c_newWithSize2d :  state size0_ size1_ -> THCTensor *
+foreign import ccall "THCTensor.h THCudaCharTensor_newWithSize2d"
+  c_newWithSize2d :: Ptr C'THCState -> CLLong -> CLLong -> IO (Ptr C'THCudaCharTensor)
+
+-- | c_newWithSize3d :  state size0_ size1_ size2_ -> THCTensor *
+foreign import ccall "THCTensor.h THCudaCharTensor_newWithSize3d"
+  c_newWithSize3d :: Ptr C'THCState -> CLLong -> CLLong -> CLLong -> IO (Ptr C'THCudaCharTensor)
+
+-- | c_newWithSize4d :  state size0_ size1_ size2_ size3_ -> THCTensor *
+foreign import ccall "THCTensor.h THCudaCharTensor_newWithSize4d"
+  c_newWithSize4d :: Ptr C'THCState -> CLLong -> CLLong -> CLLong -> CLLong -> IO (Ptr C'THCudaCharTensor)
+
+-- | c_newClone :  state self -> THCTensor *
+foreign import ccall "THCTensor.h THCudaCharTensor_newClone"
+  c_newClone :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> IO (Ptr C'THCudaCharTensor)
+
+-- | c_newContiguous :  state tensor -> THCTensor *
+foreign import ccall "THCTensor.h THCudaCharTensor_newContiguous"
+  c_newContiguous :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> IO (Ptr C'THCudaCharTensor)
+
+-- | c_newSelect :  state tensor dimension_ sliceIndex_ -> THCTensor *
+foreign import ccall "THCTensor.h THCudaCharTensor_newSelect"
+  c_newSelect :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> CInt -> CLLong -> IO (Ptr C'THCudaCharTensor)
+
+-- | c_newNarrow :  state tensor dimension_ firstIndex_ size_ -> THCTensor *
+foreign import ccall "THCTensor.h THCudaCharTensor_newNarrow"
+  c_newNarrow :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> CInt -> CLLong -> CLLong -> IO (Ptr C'THCudaCharTensor)
+
+-- | c_newTranspose :  state tensor dimension1_ dimension2_ -> THCTensor *
+foreign import ccall "THCTensor.h THCudaCharTensor_newTranspose"
+  c_newTranspose :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> CInt -> CInt -> IO (Ptr C'THCudaCharTensor)
+
+-- | c_newUnfold :  state tensor dimension_ size_ step_ -> THCTensor *
+foreign import ccall "THCTensor.h THCudaCharTensor_newUnfold"
+  c_newUnfold :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> CInt -> CLLong -> CLLong -> IO (Ptr C'THCudaCharTensor)
+
+-- | c_newView :  state tensor size -> THCTensor *
+foreign import ccall "THCTensor.h THCudaCharTensor_newView"
+  c_newView :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THLongStorage -> IO (Ptr C'THCudaCharTensor)
+
+-- | c_newFoldBatchDim :  state input -> THCTensor *
+foreign import ccall "THCTensor.h THCudaCharTensor_newFoldBatchDim"
+  c_newFoldBatchDim :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> IO (Ptr C'THCudaCharTensor)
+
+-- | c_newExpand :  state tensor size -> THCTensor *
+foreign import ccall "THCTensor.h THCudaCharTensor_newExpand"
+  c_newExpand :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THLongStorage -> IO (Ptr C'THCudaCharTensor)
+
+-- | c_expand :  state r tensor sizes -> void
+foreign import ccall "THCTensor.h THCudaCharTensor_expand"
+  c_expand :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> Ptr C'THLongStorage -> IO ()
+
+-- | c_expandNd :  state rets ops count -> void
+foreign import ccall "THCTensor.h THCudaCharTensor_expandNd"
+  c_expandNd :: Ptr C'THCState -> Ptr (Ptr C'THCudaCharTensor) -> Ptr (Ptr C'THCudaCharTensor) -> CInt -> IO ()
+
+-- | c_resize :  state tensor size stride -> void
+foreign import ccall "THCTensor.h THCudaCharTensor_resize"
+  c_resize :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THLongStorage -> Ptr C'THLongStorage -> IO ()
+
+-- | c_resizeAs :  state tensor src -> void
+foreign import ccall "THCTensor.h THCudaCharTensor_resizeAs"
+  c_resizeAs :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> IO ()
+
+-- | c_resize1d :  state tensor size0_ -> void
+foreign import ccall "THCTensor.h THCudaCharTensor_resize1d"
+  c_resize1d :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> CLLong -> IO ()
+
+-- | c_resize2d :  state tensor size0_ size1_ -> void
+foreign import ccall "THCTensor.h THCudaCharTensor_resize2d"
+  c_resize2d :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> CLLong -> CLLong -> IO ()
+
+-- | c_resize3d :  state tensor size0_ size1_ size2_ -> void
+foreign import ccall "THCTensor.h THCudaCharTensor_resize3d"
+  c_resize3d :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> CLLong -> CLLong -> CLLong -> IO ()
+
+-- | c_resize4d :  state tensor size0_ size1_ size2_ size3_ -> void
+foreign import ccall "THCTensor.h THCudaCharTensor_resize4d"
+  c_resize4d :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> CLLong -> CLLong -> CLLong -> CLLong -> IO ()
+
+-- | c_resize5d :  state tensor size0_ size1_ size2_ size3_ size4_ -> void
+foreign import ccall "THCTensor.h THCudaCharTensor_resize5d"
+  c_resize5d :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> IO ()
+
+-- | c_resizeNd :  state tensor nDimension size stride -> void
+foreign import ccall "THCTensor.h THCudaCharTensor_resizeNd"
+  c_resizeNd :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> CInt -> Ptr CLLong -> Ptr CLLong -> IO ()
+
+-- | c_set :  state self src -> void
+foreign import ccall "THCTensor.h THCudaCharTensor_set"
+  c_set :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> IO ()
+
+-- | c_setStorage :  state self storage_ storageOffset_ size_ stride_ -> void
+foreign import ccall "THCTensor.h THCudaCharTensor_setStorage"
+  c_setStorage :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCCharStorage -> CPtrdiff -> Ptr C'THLongStorage -> Ptr C'THLongStorage -> IO ()
+
+-- | c_setStorageNd :  state self storage storageOffset nDimension size stride -> void
+foreign import ccall "THCTensor.h THCudaCharTensor_setStorageNd"
+  c_setStorageNd :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCCharStorage -> CPtrdiff -> CInt -> Ptr CLLong -> Ptr CLLong -> IO ()
+
+-- | c_setStorage1d :  state self storage_ storageOffset_ size0_ stride0_ -> void
+foreign import ccall "THCTensor.h THCudaCharTensor_setStorage1d"
+  c_setStorage1d :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCCharStorage -> CPtrdiff -> CLLong -> CLLong -> IO ()
+
+-- | c_setStorage2d :  state self storage_ storageOffset_ size0_ stride0_ size1_ stride1_ -> void
+foreign import ccall "THCTensor.h THCudaCharTensor_setStorage2d"
+  c_setStorage2d :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCCharStorage -> CPtrdiff -> CLLong -> CLLong -> CLLong -> CLLong -> IO ()
+
+-- | c_setStorage3d :  state self storage_ storageOffset_ size0_ stride0_ size1_ stride1_ size2_ stride2_ -> void
+foreign import ccall "THCTensor.h THCudaCharTensor_setStorage3d"
+  c_setStorage3d :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCCharStorage -> CPtrdiff -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> IO ()
+
+-- | c_setStorage4d :  state self storage_ storageOffset_ size0_ stride0_ size1_ stride1_ size2_ stride2_ size3_ stride3_ -> void
+foreign import ccall "THCTensor.h THCudaCharTensor_setStorage4d"
+  c_setStorage4d :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCCharStorage -> CPtrdiff -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> IO ()
+
+-- | c_narrow :  state self src dimension_ firstIndex_ size_ -> void
+foreign import ccall "THCTensor.h THCudaCharTensor_narrow"
+  c_narrow :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> CInt -> CLLong -> CLLong -> IO ()
+
+-- | c_select :  state self src dimension_ sliceIndex_ -> void
+foreign import ccall "THCTensor.h THCudaCharTensor_select"
+  c_select :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> CInt -> CLLong -> IO ()
+
+-- | c_transpose :  state self src dimension1_ dimension2_ -> void
+foreign import ccall "THCTensor.h THCudaCharTensor_transpose"
+  c_transpose :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> CInt -> CInt -> IO ()
+
+-- | c_unfold :  state self src dimension_ size_ step_ -> void
+foreign import ccall "THCTensor.h THCudaCharTensor_unfold"
+  c_unfold :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> CInt -> CLLong -> CLLong -> IO ()
+
+-- | c_squeeze :  state self src -> void
+foreign import ccall "THCTensor.h THCudaCharTensor_squeeze"
+  c_squeeze :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> IO ()
+
+-- | c_squeeze1d :  state self src dimension_ -> void
+foreign import ccall "THCTensor.h THCudaCharTensor_squeeze1d"
+  c_squeeze1d :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> CInt -> IO ()
+
+-- | c_unsqueeze1d :  state self src dimension_ -> void
+foreign import ccall "THCTensor.h THCudaCharTensor_unsqueeze1d"
+  c_unsqueeze1d :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> CInt -> IO ()
+
+-- | c_isContiguous :  state self -> int
+foreign import ccall "THCTensor.h THCudaCharTensor_isContiguous"
+  c_isContiguous :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> IO CInt
+
+-- | c_isSameSizeAs :  state self src -> int
+foreign import ccall "THCTensor.h THCudaCharTensor_isSameSizeAs"
+  c_isSameSizeAs :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> IO CInt
+
+-- | c_isSetTo :  state self src -> int
+foreign import ccall "THCTensor.h THCudaCharTensor_isSetTo"
+  c_isSetTo :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> IO CInt
+
+-- | c_isSize :  state self dims -> int
+foreign import ccall "THCTensor.h THCudaCharTensor_isSize"
+  c_isSize :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THLongStorage -> IO CInt
+
+-- | c_nElement :  state self -> ptrdiff_t
+foreign import ccall "THCTensor.h THCudaCharTensor_nElement"
+  c_nElement :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> IO CPtrdiff
+
+-- | c_retain :  state self -> void
+foreign import ccall "THCTensor.h THCudaCharTensor_retain"
+  c_retain :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> IO ()
+
+-- | c_free :  state self -> void
+foreign import ccall "THCTensor.h THCudaCharTensor_free"
+  c_free :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> IO ()
+
+-- | c_freeCopyTo :  state self dst -> void
+foreign import ccall "THCTensor.h THCudaCharTensor_freeCopyTo"
+  c_freeCopyTo :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> IO ()
+
+-- | c_set1d :  state tensor x0 value -> void
+foreign import ccall "THCTensor.h THCudaCharTensor_set1d"
+  c_set1d :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> CLLong -> CChar -> IO ()
+
+-- | c_set2d :  state tensor x0 x1 value -> void
+foreign import ccall "THCTensor.h THCudaCharTensor_set2d"
+  c_set2d :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> CLLong -> CLLong -> CChar -> IO ()
+
+-- | c_set3d :  state tensor x0 x1 x2 value -> void
+foreign import ccall "THCTensor.h THCudaCharTensor_set3d"
+  c_set3d :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> CLLong -> CLLong -> CLLong -> CChar -> IO ()
+
+-- | c_set4d :  state tensor x0 x1 x2 x3 value -> void
+foreign import ccall "THCTensor.h THCudaCharTensor_set4d"
+  c_set4d :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> CLLong -> CLLong -> CLLong -> CLLong -> CChar -> IO ()
+
+-- | c_get1d :  state tensor x0 -> real
+foreign import ccall "THCTensor.h THCudaCharTensor_get1d"
+  c_get1d :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> CLLong -> IO CChar
+
+-- | c_get2d :  state tensor x0 x1 -> real
+foreign import ccall "THCTensor.h THCudaCharTensor_get2d"
+  c_get2d :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> CLLong -> CLLong -> IO CChar
+
+-- | c_get3d :  state tensor x0 x1 x2 -> real
+foreign import ccall "THCTensor.h THCudaCharTensor_get3d"
+  c_get3d :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> CLLong -> CLLong -> CLLong -> IO CChar
+
+-- | c_get4d :  state tensor x0 x1 x2 x3 -> real
+foreign import ccall "THCTensor.h THCudaCharTensor_get4d"
+  c_get4d :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> CLLong -> CLLong -> CLLong -> CLLong -> IO CChar
+
+-- | c_getDevice :  state self -> int
+foreign import ccall "THCTensor.h THCudaCharTensor_getDevice"
+  c_getDevice :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> IO CInt
+
+-- | c_sizeDesc :  state tensor -> THCDescBuff
+foreign import ccall "THCTensor.h THCudaCharTensor_sizeDesc"
+  c_sizeDesc :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> IO (Ptr C'THCDescBuff)
+
+-- | p_storage : Pointer to function : state self -> THCStorage *
+foreign import ccall "THCTensor.h &THCudaCharTensor_storage"
+  p_storage :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> IO (Ptr C'THCCharStorage))
+
+-- | p_storageOffset : Pointer to function : state self -> ptrdiff_t
+foreign import ccall "THCTensor.h &THCudaCharTensor_storageOffset"
+  p_storageOffset :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> IO CPtrdiff)
+
+-- | p_nDimension : Pointer to function : state self -> int
+foreign import ccall "THCTensor.h &THCudaCharTensor_nDimension"
+  p_nDimension :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> IO CInt)
+
+-- | p_size : Pointer to function : state self dim -> int64_t
+foreign import ccall "THCTensor.h &THCudaCharTensor_size"
+  p_size :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> CInt -> IO CLLong)
+
+-- | p_stride : Pointer to function : state self dim -> int64_t
+foreign import ccall "THCTensor.h &THCudaCharTensor_stride"
+  p_stride :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> CInt -> IO CLLong)
+
+-- | p_newSizeOf : Pointer to function : state self -> THLongStorage *
+foreign import ccall "THCTensor.h &THCudaCharTensor_newSizeOf"
+  p_newSizeOf :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> IO (Ptr C'THLongStorage))
+
+-- | p_newStrideOf : Pointer to function : state self -> THLongStorage *
+foreign import ccall "THCTensor.h &THCudaCharTensor_newStrideOf"
+  p_newStrideOf :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> IO (Ptr C'THLongStorage))
+
+-- | p_data : Pointer to function : state self -> real *
+foreign import ccall "THCTensor.h &THCudaCharTensor_data"
+  p_data :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> IO (Ptr CChar))
+
+-- | p_setFlag : Pointer to function : state self flag -> void
+foreign import ccall "THCTensor.h &THCudaCharTensor_setFlag"
+  p_setFlag :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> CChar -> IO ())
+
+-- | p_clearFlag : Pointer to function : state self flag -> void
+foreign import ccall "THCTensor.h &THCudaCharTensor_clearFlag"
+  p_clearFlag :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> CChar -> IO ())
+
+-- | p_new : Pointer to function : state -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaCharTensor_new"
+  p_new :: FunPtr (Ptr C'THCState -> IO (Ptr C'THCudaCharTensor))
+
+-- | p_newWithTensor : Pointer to function : state tensor -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaCharTensor_newWithTensor"
+  p_newWithTensor :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> IO (Ptr C'THCudaCharTensor))
+
+-- | p_newWithStorage : Pointer to function : state storage_ storageOffset_ size_ stride_ -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaCharTensor_newWithStorage"
+  p_newWithStorage :: FunPtr (Ptr C'THCState -> Ptr C'THCCharStorage -> CPtrdiff -> Ptr C'THLongStorage -> Ptr C'THLongStorage -> IO (Ptr C'THCudaCharTensor))
+
+-- | p_newWithStorage1d : Pointer to function : state storage_ storageOffset_ size0_ stride0_ -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaCharTensor_newWithStorage1d"
+  p_newWithStorage1d :: FunPtr (Ptr C'THCState -> Ptr C'THCCharStorage -> CPtrdiff -> CLLong -> CLLong -> IO (Ptr C'THCudaCharTensor))
+
+-- | p_newWithStorage2d : Pointer to function : state storage_ storageOffset_ size0_ stride0_ size1_ stride1_ -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaCharTensor_newWithStorage2d"
+  p_newWithStorage2d :: FunPtr (Ptr C'THCState -> Ptr C'THCCharStorage -> CPtrdiff -> CLLong -> CLLong -> CLLong -> CLLong -> IO (Ptr C'THCudaCharTensor))
+
+-- | p_newWithStorage3d : Pointer to function : state storage_ storageOffset_ size0_ stride0_ size1_ stride1_ size2_ stride2_ -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaCharTensor_newWithStorage3d"
+  p_newWithStorage3d :: FunPtr (Ptr C'THCState -> Ptr C'THCCharStorage -> CPtrdiff -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> IO (Ptr C'THCudaCharTensor))
+
+-- | p_newWithStorage4d : Pointer to function : state storage_ storageOffset_ size0_ stride0_ size1_ stride1_ size2_ stride2_ size3_ stride3_ -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaCharTensor_newWithStorage4d"
+  p_newWithStorage4d :: FunPtr (Ptr C'THCState -> Ptr C'THCCharStorage -> CPtrdiff -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> IO (Ptr C'THCudaCharTensor))
+
+-- | p_newWithSize : Pointer to function : state size_ stride_ -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaCharTensor_newWithSize"
+  p_newWithSize :: FunPtr (Ptr C'THCState -> Ptr C'THLongStorage -> Ptr C'THLongStorage -> IO (Ptr C'THCudaCharTensor))
+
+-- | p_newWithSize1d : Pointer to function : state size0_ -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaCharTensor_newWithSize1d"
+  p_newWithSize1d :: FunPtr (Ptr C'THCState -> CLLong -> IO (Ptr C'THCudaCharTensor))
+
+-- | p_newWithSize2d : Pointer to function : state size0_ size1_ -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaCharTensor_newWithSize2d"
+  p_newWithSize2d :: FunPtr (Ptr C'THCState -> CLLong -> CLLong -> IO (Ptr C'THCudaCharTensor))
+
+-- | p_newWithSize3d : Pointer to function : state size0_ size1_ size2_ -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaCharTensor_newWithSize3d"
+  p_newWithSize3d :: FunPtr (Ptr C'THCState -> CLLong -> CLLong -> CLLong -> IO (Ptr C'THCudaCharTensor))
+
+-- | p_newWithSize4d : Pointer to function : state size0_ size1_ size2_ size3_ -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaCharTensor_newWithSize4d"
+  p_newWithSize4d :: FunPtr (Ptr C'THCState -> CLLong -> CLLong -> CLLong -> CLLong -> IO (Ptr C'THCudaCharTensor))
+
+-- | p_newClone : Pointer to function : state self -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaCharTensor_newClone"
+  p_newClone :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> IO (Ptr C'THCudaCharTensor))
+
+-- | p_newContiguous : Pointer to function : state tensor -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaCharTensor_newContiguous"
+  p_newContiguous :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> IO (Ptr C'THCudaCharTensor))
+
+-- | p_newSelect : Pointer to function : state tensor dimension_ sliceIndex_ -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaCharTensor_newSelect"
+  p_newSelect :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> CInt -> CLLong -> IO (Ptr C'THCudaCharTensor))
+
+-- | p_newNarrow : Pointer to function : state tensor dimension_ firstIndex_ size_ -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaCharTensor_newNarrow"
+  p_newNarrow :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> CInt -> CLLong -> CLLong -> IO (Ptr C'THCudaCharTensor))
+
+-- | p_newTranspose : Pointer to function : state tensor dimension1_ dimension2_ -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaCharTensor_newTranspose"
+  p_newTranspose :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> CInt -> CInt -> IO (Ptr C'THCudaCharTensor))
+
+-- | p_newUnfold : Pointer to function : state tensor dimension_ size_ step_ -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaCharTensor_newUnfold"
+  p_newUnfold :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> CInt -> CLLong -> CLLong -> IO (Ptr C'THCudaCharTensor))
+
+-- | p_newView : Pointer to function : state tensor size -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaCharTensor_newView"
+  p_newView :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THLongStorage -> IO (Ptr C'THCudaCharTensor))
+
+-- | p_newFoldBatchDim : Pointer to function : state input -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaCharTensor_newFoldBatchDim"
+  p_newFoldBatchDim :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> IO (Ptr C'THCudaCharTensor))
+
+-- | p_newExpand : Pointer to function : state tensor size -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaCharTensor_newExpand"
+  p_newExpand :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THLongStorage -> IO (Ptr C'THCudaCharTensor))
+
+-- | p_expand : Pointer to function : state r tensor sizes -> void
+foreign import ccall "THCTensor.h &THCudaCharTensor_expand"
+  p_expand :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> Ptr C'THLongStorage -> IO ())
+
+-- | p_expandNd : Pointer to function : state rets ops count -> void
+foreign import ccall "THCTensor.h &THCudaCharTensor_expandNd"
+  p_expandNd :: FunPtr (Ptr C'THCState -> Ptr (Ptr C'THCudaCharTensor) -> Ptr (Ptr C'THCudaCharTensor) -> CInt -> IO ())
+
+-- | p_resize : Pointer to function : state tensor size stride -> void
+foreign import ccall "THCTensor.h &THCudaCharTensor_resize"
+  p_resize :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THLongStorage -> Ptr C'THLongStorage -> IO ())
+
+-- | p_resizeAs : Pointer to function : state tensor src -> void
+foreign import ccall "THCTensor.h &THCudaCharTensor_resizeAs"
+  p_resizeAs :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> IO ())
+
+-- | p_resize1d : Pointer to function : state tensor size0_ -> void
+foreign import ccall "THCTensor.h &THCudaCharTensor_resize1d"
+  p_resize1d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> CLLong -> IO ())
+
+-- | p_resize2d : Pointer to function : state tensor size0_ size1_ -> void
+foreign import ccall "THCTensor.h &THCudaCharTensor_resize2d"
+  p_resize2d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> CLLong -> CLLong -> IO ())
+
+-- | p_resize3d : Pointer to function : state tensor size0_ size1_ size2_ -> void
+foreign import ccall "THCTensor.h &THCudaCharTensor_resize3d"
+  p_resize3d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> CLLong -> CLLong -> CLLong -> IO ())
+
+-- | p_resize4d : Pointer to function : state tensor size0_ size1_ size2_ size3_ -> void
+foreign import ccall "THCTensor.h &THCudaCharTensor_resize4d"
+  p_resize4d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> CLLong -> CLLong -> CLLong -> CLLong -> IO ())
+
+-- | p_resize5d : Pointer to function : state tensor size0_ size1_ size2_ size3_ size4_ -> void
+foreign import ccall "THCTensor.h &THCudaCharTensor_resize5d"
+  p_resize5d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> IO ())
+
+-- | p_resizeNd : Pointer to function : state tensor nDimension size stride -> void
+foreign import ccall "THCTensor.h &THCudaCharTensor_resizeNd"
+  p_resizeNd :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> CInt -> Ptr CLLong -> Ptr CLLong -> IO ())
+
+-- | p_set : Pointer to function : state self src -> void
+foreign import ccall "THCTensor.h &THCudaCharTensor_set"
+  p_set :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> IO ())
+
+-- | p_setStorage : Pointer to function : state self storage_ storageOffset_ size_ stride_ -> void
+foreign import ccall "THCTensor.h &THCudaCharTensor_setStorage"
+  p_setStorage :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCCharStorage -> CPtrdiff -> Ptr C'THLongStorage -> Ptr C'THLongStorage -> IO ())
+
+-- | p_setStorageNd : Pointer to function : state self storage storageOffset nDimension size stride -> void
+foreign import ccall "THCTensor.h &THCudaCharTensor_setStorageNd"
+  p_setStorageNd :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCCharStorage -> CPtrdiff -> CInt -> Ptr CLLong -> Ptr CLLong -> IO ())
+
+-- | p_setStorage1d : Pointer to function : state self storage_ storageOffset_ size0_ stride0_ -> void
+foreign import ccall "THCTensor.h &THCudaCharTensor_setStorage1d"
+  p_setStorage1d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCCharStorage -> CPtrdiff -> CLLong -> CLLong -> IO ())
+
+-- | p_setStorage2d : Pointer to function : state self storage_ storageOffset_ size0_ stride0_ size1_ stride1_ -> void
+foreign import ccall "THCTensor.h &THCudaCharTensor_setStorage2d"
+  p_setStorage2d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCCharStorage -> CPtrdiff -> CLLong -> CLLong -> CLLong -> CLLong -> IO ())
+
+-- | p_setStorage3d : Pointer to function : state self storage_ storageOffset_ size0_ stride0_ size1_ stride1_ size2_ stride2_ -> void
+foreign import ccall "THCTensor.h &THCudaCharTensor_setStorage3d"
+  p_setStorage3d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCCharStorage -> CPtrdiff -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> IO ())
+
+-- | p_setStorage4d : Pointer to function : state self storage_ storageOffset_ size0_ stride0_ size1_ stride1_ size2_ stride2_ size3_ stride3_ -> void
+foreign import ccall "THCTensor.h &THCudaCharTensor_setStorage4d"
+  p_setStorage4d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCCharStorage -> CPtrdiff -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> IO ())
+
+-- | p_narrow : Pointer to function : state self src dimension_ firstIndex_ size_ -> void
+foreign import ccall "THCTensor.h &THCudaCharTensor_narrow"
+  p_narrow :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> CInt -> CLLong -> CLLong -> IO ())
+
+-- | p_select : Pointer to function : state self src dimension_ sliceIndex_ -> void
+foreign import ccall "THCTensor.h &THCudaCharTensor_select"
+  p_select :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> CInt -> CLLong -> IO ())
+
+-- | p_transpose : Pointer to function : state self src dimension1_ dimension2_ -> void
+foreign import ccall "THCTensor.h &THCudaCharTensor_transpose"
+  p_transpose :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> CInt -> CInt -> IO ())
+
+-- | p_unfold : Pointer to function : state self src dimension_ size_ step_ -> void
+foreign import ccall "THCTensor.h &THCudaCharTensor_unfold"
+  p_unfold :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> CInt -> CLLong -> CLLong -> IO ())
+
+-- | p_squeeze : Pointer to function : state self src -> void
+foreign import ccall "THCTensor.h &THCudaCharTensor_squeeze"
+  p_squeeze :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> IO ())
+
+-- | p_squeeze1d : Pointer to function : state self src dimension_ -> void
+foreign import ccall "THCTensor.h &THCudaCharTensor_squeeze1d"
+  p_squeeze1d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> CInt -> IO ())
+
+-- | p_unsqueeze1d : Pointer to function : state self src dimension_ -> void
+foreign import ccall "THCTensor.h &THCudaCharTensor_unsqueeze1d"
+  p_unsqueeze1d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> CInt -> IO ())
+
+-- | p_isContiguous : Pointer to function : state self -> int
+foreign import ccall "THCTensor.h &THCudaCharTensor_isContiguous"
+  p_isContiguous :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> IO CInt)
+
+-- | p_isSameSizeAs : Pointer to function : state self src -> int
+foreign import ccall "THCTensor.h &THCudaCharTensor_isSameSizeAs"
+  p_isSameSizeAs :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> IO CInt)
+
+-- | p_isSetTo : Pointer to function : state self src -> int
+foreign import ccall "THCTensor.h &THCudaCharTensor_isSetTo"
+  p_isSetTo :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> IO CInt)
+
+-- | p_isSize : Pointer to function : state self dims -> int
+foreign import ccall "THCTensor.h &THCudaCharTensor_isSize"
+  p_isSize :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THLongStorage -> IO CInt)
+
+-- | p_nElement : Pointer to function : state self -> ptrdiff_t
+foreign import ccall "THCTensor.h &THCudaCharTensor_nElement"
+  p_nElement :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> IO CPtrdiff)
+
+-- | p_retain : Pointer to function : state self -> void
+foreign import ccall "THCTensor.h &THCudaCharTensor_retain"
+  p_retain :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> IO ())
+
+-- | p_free : Pointer to function : state self -> void
+foreign import ccall "THCTensor.h &THCudaCharTensor_free"
+  p_free :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> IO ())
+
+-- | p_freeCopyTo : Pointer to function : state self dst -> void
+foreign import ccall "THCTensor.h &THCudaCharTensor_freeCopyTo"
+  p_freeCopyTo :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> IO ())
+
+-- | p_set1d : Pointer to function : state tensor x0 value -> void
+foreign import ccall "THCTensor.h &THCudaCharTensor_set1d"
+  p_set1d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> CLLong -> CChar -> IO ())
+
+-- | p_set2d : Pointer to function : state tensor x0 x1 value -> void
+foreign import ccall "THCTensor.h &THCudaCharTensor_set2d"
+  p_set2d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> CLLong -> CLLong -> CChar -> IO ())
+
+-- | p_set3d : Pointer to function : state tensor x0 x1 x2 value -> void
+foreign import ccall "THCTensor.h &THCudaCharTensor_set3d"
+  p_set3d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> CLLong -> CLLong -> CLLong -> CChar -> IO ())
+
+-- | p_set4d : Pointer to function : state tensor x0 x1 x2 x3 value -> void
+foreign import ccall "THCTensor.h &THCudaCharTensor_set4d"
+  p_set4d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> CLLong -> CLLong -> CLLong -> CLLong -> CChar -> IO ())
+
+-- | p_get1d : Pointer to function : state tensor x0 -> real
+foreign import ccall "THCTensor.h &THCudaCharTensor_get1d"
+  p_get1d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> CLLong -> IO CChar)
+
+-- | p_get2d : Pointer to function : state tensor x0 x1 -> real
+foreign import ccall "THCTensor.h &THCudaCharTensor_get2d"
+  p_get2d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> CLLong -> CLLong -> IO CChar)
+
+-- | p_get3d : Pointer to function : state tensor x0 x1 x2 -> real
+foreign import ccall "THCTensor.h &THCudaCharTensor_get3d"
+  p_get3d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> CLLong -> CLLong -> CLLong -> IO CChar)
+
+-- | p_get4d : Pointer to function : state tensor x0 x1 x2 x3 -> real
+foreign import ccall "THCTensor.h &THCudaCharTensor_get4d"
+  p_get4d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> CLLong -> CLLong -> CLLong -> CLLong -> IO CChar)
+
+-- | p_getDevice : Pointer to function : state self -> int
+foreign import ccall "THCTensor.h &THCudaCharTensor_getDevice"
+  p_getDevice :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> IO CInt)
+
+-- | p_sizeDesc : Pointer to function : state tensor -> THCDescBuff
+foreign import ccall "THCTensor.h &THCudaCharTensor_sizeDesc"
+  p_sizeDesc :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> IO (Ptr C'THCDescBuff))
diff --git a/src/Torch/FFI/THC/Char/TensorCopy.hs b/src/Torch/FFI/THC/Char/TensorCopy.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Char/TensorCopy.hs
@@ -0,0 +1,177 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Char.TensorCopy where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_copy :  state self src -> void
+foreign import ccall "THCTensorCopy.h THCudaCharTensor_copy"
+  c_copy :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> IO ()
+
+-- | c_copyIgnoringOverlaps :  state self src -> void
+foreign import ccall "THCTensorCopy.h THCudaCharTensor_copyIgnoringOverlaps"
+  c_copyIgnoringOverlaps :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> IO ()
+
+-- | c_copyByte :  state self src -> void
+foreign import ccall "THCTensorCopy.h THCudaCharTensor_copyByte"
+  c_copyByte :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THByteTensor -> IO ()
+
+-- | c_copyChar :  state self src -> void
+foreign import ccall "THCTensorCopy.h THCudaCharTensor_copyChar"
+  c_copyChar :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCharTensor -> IO ()
+
+-- | c_copyShort :  state self src -> void
+foreign import ccall "THCTensorCopy.h THCudaCharTensor_copyShort"
+  c_copyShort :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THShortTensor -> IO ()
+
+-- | c_copyInt :  state self src -> void
+foreign import ccall "THCTensorCopy.h THCudaCharTensor_copyInt"
+  c_copyInt :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THIntTensor -> IO ()
+
+-- | c_copyLong :  state self src -> void
+foreign import ccall "THCTensorCopy.h THCudaCharTensor_copyLong"
+  c_copyLong :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THLongTensor -> IO ()
+
+-- | c_copyFloat :  state self src -> void
+foreign import ccall "THCTensorCopy.h THCudaCharTensor_copyFloat"
+  c_copyFloat :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THFloatTensor -> IO ()
+
+-- | c_copyDouble :  state self src -> void
+foreign import ccall "THCTensorCopy.h THCudaCharTensor_copyDouble"
+  c_copyDouble :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THDoubleTensor -> IO ()
+
+-- | c_copyHalf :  state self src -> void
+foreign import ccall "THCTensorCopy.h THCudaCharTensor_copyHalf"
+  c_copyHalf :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THHalfTensor -> IO ()
+
+-- | c_copyCudaByte :  state dst src -> void
+foreign import ccall "THCTensorCopy.h THCudaCharTensor_copyCudaByte"
+  c_copyCudaByte :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaByteTensor -> IO ()
+
+-- | c_copyCudaChar :  state dst src -> void
+foreign import ccall "THCTensorCopy.h THCudaCharTensor_copyCudaChar"
+  c_copyCudaChar :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> IO ()
+
+-- | c_copyCudaShort :  state dst src -> void
+foreign import ccall "THCTensorCopy.h THCudaCharTensor_copyCudaShort"
+  c_copyCudaShort :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaShortTensor -> IO ()
+
+-- | c_copyCudaInt :  state dst src -> void
+foreign import ccall "THCTensorCopy.h THCudaCharTensor_copyCudaInt"
+  c_copyCudaInt :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaIntTensor -> IO ()
+
+-- | c_copyCudaLong :  state dst src -> void
+foreign import ccall "THCTensorCopy.h THCudaCharTensor_copyCudaLong"
+  c_copyCudaLong :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaLongTensor -> IO ()
+
+-- | c_copyCudaDouble :  state dst src -> void
+foreign import ccall "THCTensorCopy.h THCudaCharTensor_copyCudaDouble"
+  c_copyCudaDouble :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_copyCuda :  state self src -> void
+foreign import ccall "THCTensorCopy.h THCudaCharTensor_copyCuda"
+  c_copyCuda :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> IO ()
+
+-- | c_thCopyCuda :  state self src -> void
+foreign import ccall "THCTensorCopy.h THCharTensor_copyCuda"
+  c_thCopyCuda :: Ptr C'THCState -> Ptr C'THCharTensor -> Ptr C'THCudaCharTensor -> IO ()
+
+-- | c_copyCPU :  state self src -> void
+foreign import ccall "THCTensorCopy.h THCudaCharTensor_copyCPU"
+  c_copyCPU :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCharTensor -> IO ()
+
+-- | c_copyAsyncCPU :  state self src -> void
+foreign import ccall "THCTensorCopy.h THCudaCharTensor_copyAsyncCPU"
+  c_copyAsyncCPU :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCharTensor -> IO ()
+
+-- | c_thCopyAsyncCuda :  state self src -> void
+foreign import ccall "THCTensorCopy.h THCharTensor_copyAsyncCuda"
+  c_thCopyAsyncCuda :: Ptr C'THCState -> Ptr C'THCharTensor -> Ptr C'THCudaCharTensor -> IO ()
+
+-- | p_copy : Pointer to function : state self src -> void
+foreign import ccall "THCTensorCopy.h &THCudaCharTensor_copy"
+  p_copy :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> IO ())
+
+-- | p_copyIgnoringOverlaps : Pointer to function : state self src -> void
+foreign import ccall "THCTensorCopy.h &THCudaCharTensor_copyIgnoringOverlaps"
+  p_copyIgnoringOverlaps :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> IO ())
+
+-- | p_copyByte : Pointer to function : state self src -> void
+foreign import ccall "THCTensorCopy.h &THCudaCharTensor_copyByte"
+  p_copyByte :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THByteTensor -> IO ())
+
+-- | p_copyChar : Pointer to function : state self src -> void
+foreign import ccall "THCTensorCopy.h &THCudaCharTensor_copyChar"
+  p_copyChar :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCharTensor -> IO ())
+
+-- | p_copyShort : Pointer to function : state self src -> void
+foreign import ccall "THCTensorCopy.h &THCudaCharTensor_copyShort"
+  p_copyShort :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THShortTensor -> IO ())
+
+-- | p_copyInt : Pointer to function : state self src -> void
+foreign import ccall "THCTensorCopy.h &THCudaCharTensor_copyInt"
+  p_copyInt :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THIntTensor -> IO ())
+
+-- | p_copyLong : Pointer to function : state self src -> void
+foreign import ccall "THCTensorCopy.h &THCudaCharTensor_copyLong"
+  p_copyLong :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THLongTensor -> IO ())
+
+-- | p_copyFloat : Pointer to function : state self src -> void
+foreign import ccall "THCTensorCopy.h &THCudaCharTensor_copyFloat"
+  p_copyFloat :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THFloatTensor -> IO ())
+
+-- | p_copyDouble : Pointer to function : state self src -> void
+foreign import ccall "THCTensorCopy.h &THCudaCharTensor_copyDouble"
+  p_copyDouble :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THDoubleTensor -> IO ())
+
+-- | p_copyHalf : Pointer to function : state self src -> void
+foreign import ccall "THCTensorCopy.h &THCudaCharTensor_copyHalf"
+  p_copyHalf :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THHalfTensor -> IO ())
+
+-- | p_copyCudaByte : Pointer to function : state dst src -> void
+foreign import ccall "THCTensorCopy.h &THCudaCharTensor_copyCudaByte"
+  p_copyCudaByte :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaByteTensor -> IO ())
+
+-- | p_copyCudaChar : Pointer to function : state dst src -> void
+foreign import ccall "THCTensorCopy.h &THCudaCharTensor_copyCudaChar"
+  p_copyCudaChar :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> IO ())
+
+-- | p_copyCudaShort : Pointer to function : state dst src -> void
+foreign import ccall "THCTensorCopy.h &THCudaCharTensor_copyCudaShort"
+  p_copyCudaShort :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaShortTensor -> IO ())
+
+-- | p_copyCudaInt : Pointer to function : state dst src -> void
+foreign import ccall "THCTensorCopy.h &THCudaCharTensor_copyCudaInt"
+  p_copyCudaInt :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaIntTensor -> IO ())
+
+-- | p_copyCudaLong : Pointer to function : state dst src -> void
+foreign import ccall "THCTensorCopy.h &THCudaCharTensor_copyCudaLong"
+  p_copyCudaLong :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaLongTensor -> IO ())
+
+-- | p_copyCudaDouble : Pointer to function : state dst src -> void
+foreign import ccall "THCTensorCopy.h &THCudaCharTensor_copyCudaDouble"
+  p_copyCudaDouble :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_copyCuda : Pointer to function : state self src -> void
+foreign import ccall "THCTensorCopy.h &THCudaCharTensor_copyCuda"
+  p_copyCuda :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> IO ())
+
+-- | p_thCopyCuda : Pointer to function : state self src -> void
+foreign import ccall "THCTensorCopy.h &THCharTensor_copyCuda"
+  p_thCopyCuda :: FunPtr (Ptr C'THCState -> Ptr C'THCharTensor -> Ptr C'THCudaCharTensor -> IO ())
+
+-- | p_copyCPU : Pointer to function : state self src -> void
+foreign import ccall "THCTensorCopy.h &THCudaCharTensor_copyCPU"
+  p_copyCPU :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCharTensor -> IO ())
+
+-- | p_copyAsyncCPU : Pointer to function : state self src -> void
+foreign import ccall "THCTensorCopy.h &THCudaCharTensor_copyAsyncCPU"
+  p_copyAsyncCPU :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCharTensor -> IO ())
+
+-- | p_thCopyAsyncCuda : Pointer to function : state self src -> void
+foreign import ccall "THCTensorCopy.h &THCharTensor_copyAsyncCuda"
+  p_thCopyAsyncCuda :: FunPtr (Ptr C'THCState -> Ptr C'THCharTensor -> Ptr C'THCudaCharTensor -> IO ())
diff --git a/src/Torch/FFI/THC/Char/TensorIndex.hs b/src/Torch/FFI/THC/Char/TensorIndex.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Char/TensorIndex.hs
@@ -0,0 +1,97 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Char.TensorIndex where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_indexCopy :  state res_ dim indices src -> void
+foreign import ccall "THCTensorIndex.h THCudaCharTensor_indexCopy"
+  c_indexCopy :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> CInt -> Ptr C'THCudaLongTensor -> Ptr C'THCudaCharTensor -> IO ()
+
+-- | c_indexAdd :  state res_ dim indices src -> void
+foreign import ccall "THCTensorIndex.h THCudaCharTensor_indexAdd"
+  c_indexAdd :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> CInt -> Ptr C'THCudaLongTensor -> Ptr C'THCudaCharTensor -> IO ()
+
+-- | c_indexFill :  state tensor dim index val -> void
+foreign import ccall "THCTensorIndex.h THCudaCharTensor_indexFill"
+  c_indexFill :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> CInt -> Ptr C'THCudaLongTensor -> CChar -> IO ()
+
+-- | c_indexSelect :  state tensor src dim index -> void
+foreign import ccall "THCTensorIndex.h THCudaCharTensor_indexSelect"
+  c_indexSelect :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> CInt -> Ptr C'THCudaLongTensor -> IO ()
+
+-- | c_take :  state res_ src index -> void
+foreign import ccall "THCTensorIndex.h THCudaCharTensor_take"
+  c_take :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> Ptr C'THCudaLongTensor -> IO ()
+
+-- | c_put :  state res_ indices src accumulate -> void
+foreign import ccall "THCTensorIndex.h THCudaCharTensor_put"
+  c_put :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaCharTensor -> CInt -> IO ()
+
+-- | c_indexCopy_long :  state res_ dim indices src -> void
+foreign import ccall "THCTensorIndex.h THCudaCharTensor_indexCopy_long"
+  c_indexCopy_long :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> CInt -> Ptr C'THLongTensor -> Ptr C'THCudaCharTensor -> IO ()
+
+-- | c_indexAdd_long :  state res_ dim indices src -> void
+foreign import ccall "THCTensorIndex.h THCudaCharTensor_indexAdd_long"
+  c_indexAdd_long :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> CInt -> Ptr C'THLongTensor -> Ptr C'THCudaCharTensor -> IO ()
+
+-- | c_indexFill_long :  state tensor dim index val -> void
+foreign import ccall "THCTensorIndex.h THCudaCharTensor_indexFill_long"
+  c_indexFill_long :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> CInt -> Ptr C'THLongTensor -> CChar -> IO ()
+
+-- | c_indexSelect_long :  state tensor src dim index -> void
+foreign import ccall "THCTensorIndex.h THCudaCharTensor_indexSelect_long"
+  c_indexSelect_long :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> CInt -> Ptr C'THLongTensor -> IO ()
+
+-- | c_calculateAdvancedIndexingOffsets :  state output indexed baseOffset indexers -> void
+foreign import ccall "THCTensorIndex.h THCudaCharTensor_calculateAdvancedIndexingOffsets"
+  c_calculateAdvancedIndexingOffsets :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaCharTensor -> CPtrdiff -> Ptr (Ptr C'THCudaLongTensor) -> IO ()
+
+-- | p_indexCopy : Pointer to function : state res_ dim indices src -> void
+foreign import ccall "THCTensorIndex.h &THCudaCharTensor_indexCopy"
+  p_indexCopy :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> CInt -> Ptr C'THCudaLongTensor -> Ptr C'THCudaCharTensor -> IO ())
+
+-- | p_indexAdd : Pointer to function : state res_ dim indices src -> void
+foreign import ccall "THCTensorIndex.h &THCudaCharTensor_indexAdd"
+  p_indexAdd :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> CInt -> Ptr C'THCudaLongTensor -> Ptr C'THCudaCharTensor -> IO ())
+
+-- | p_indexFill : Pointer to function : state tensor dim index val -> void
+foreign import ccall "THCTensorIndex.h &THCudaCharTensor_indexFill"
+  p_indexFill :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> CInt -> Ptr C'THCudaLongTensor -> CChar -> IO ())
+
+-- | p_indexSelect : Pointer to function : state tensor src dim index -> void
+foreign import ccall "THCTensorIndex.h &THCudaCharTensor_indexSelect"
+  p_indexSelect :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> CInt -> Ptr C'THCudaLongTensor -> IO ())
+
+-- | p_take : Pointer to function : state res_ src index -> void
+foreign import ccall "THCTensorIndex.h &THCudaCharTensor_take"
+  p_take :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> Ptr C'THCudaLongTensor -> IO ())
+
+-- | p_put : Pointer to function : state res_ indices src accumulate -> void
+foreign import ccall "THCTensorIndex.h &THCudaCharTensor_put"
+  p_put :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaCharTensor -> CInt -> IO ())
+
+-- | p_indexCopy_long : Pointer to function : state res_ dim indices src -> void
+foreign import ccall "THCTensorIndex.h &THCudaCharTensor_indexCopy_long"
+  p_indexCopy_long :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> CInt -> Ptr C'THLongTensor -> Ptr C'THCudaCharTensor -> IO ())
+
+-- | p_indexAdd_long : Pointer to function : state res_ dim indices src -> void
+foreign import ccall "THCTensorIndex.h &THCudaCharTensor_indexAdd_long"
+  p_indexAdd_long :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> CInt -> Ptr C'THLongTensor -> Ptr C'THCudaCharTensor -> IO ())
+
+-- | p_indexFill_long : Pointer to function : state tensor dim index val -> void
+foreign import ccall "THCTensorIndex.h &THCudaCharTensor_indexFill_long"
+  p_indexFill_long :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> CInt -> Ptr C'THLongTensor -> CChar -> IO ())
+
+-- | p_indexSelect_long : Pointer to function : state tensor src dim index -> void
+foreign import ccall "THCTensorIndex.h &THCudaCharTensor_indexSelect_long"
+  p_indexSelect_long :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> CInt -> Ptr C'THLongTensor -> IO ())
+
+-- | p_calculateAdvancedIndexingOffsets : Pointer to function : state output indexed baseOffset indexers -> void
+foreign import ccall "THCTensorIndex.h &THCudaCharTensor_calculateAdvancedIndexingOffsets"
+  p_calculateAdvancedIndexingOffsets :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaCharTensor -> CPtrdiff -> Ptr (Ptr C'THCudaLongTensor) -> IO ())
diff --git a/src/Torch/FFI/THC/Char/TensorMasked.hs b/src/Torch/FFI/THC/Char/TensorMasked.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Char/TensorMasked.hs
@@ -0,0 +1,57 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Char.TensorMasked where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_maskedFill :  state tensor mask value -> void
+foreign import ccall "THCTensorMasked.h THCudaCharTensor_maskedFill"
+  c_maskedFill :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaByteTensor -> CChar -> IO ()
+
+-- | c_maskedFillByte :  state tensor mask value -> void
+foreign import ccall "THCTensorMasked.h THCudaCharTensor_maskedFillByte"
+  c_maskedFillByte :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THByteTensor -> CChar -> IO ()
+
+-- | c_maskedCopy :  state tensor mask src -> void
+foreign import ccall "THCTensorMasked.h THCudaCharTensor_maskedCopy"
+  c_maskedCopy :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaByteTensor -> Ptr C'THCudaCharTensor -> IO ()
+
+-- | c_maskedCopyByte :  state tensor mask src -> void
+foreign import ccall "THCTensorMasked.h THCudaCharTensor_maskedCopyByte"
+  c_maskedCopyByte :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THByteTensor -> Ptr C'THCudaCharTensor -> IO ()
+
+-- | c_maskedSelect :  state tensor src mask -> void
+foreign import ccall "THCTensorMasked.h THCudaCharTensor_maskedSelect"
+  c_maskedSelect :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> Ptr C'THCudaByteTensor -> IO ()
+
+-- | c_maskedSelectByte :  state tensor src mask -> void
+foreign import ccall "THCTensorMasked.h THCudaCharTensor_maskedSelectByte"
+  c_maskedSelectByte :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> Ptr C'THByteTensor -> IO ()
+
+-- | p_maskedFill : Pointer to function : state tensor mask value -> void
+foreign import ccall "THCTensorMasked.h &THCudaCharTensor_maskedFill"
+  p_maskedFill :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaByteTensor -> CChar -> IO ())
+
+-- | p_maskedFillByte : Pointer to function : state tensor mask value -> void
+foreign import ccall "THCTensorMasked.h &THCudaCharTensor_maskedFillByte"
+  p_maskedFillByte :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THByteTensor -> CChar -> IO ())
+
+-- | p_maskedCopy : Pointer to function : state tensor mask src -> void
+foreign import ccall "THCTensorMasked.h &THCudaCharTensor_maskedCopy"
+  p_maskedCopy :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaByteTensor -> Ptr C'THCudaCharTensor -> IO ())
+
+-- | p_maskedCopyByte : Pointer to function : state tensor mask src -> void
+foreign import ccall "THCTensorMasked.h &THCudaCharTensor_maskedCopyByte"
+  p_maskedCopyByte :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THByteTensor -> Ptr C'THCudaCharTensor -> IO ())
+
+-- | p_maskedSelect : Pointer to function : state tensor src mask -> void
+foreign import ccall "THCTensorMasked.h &THCudaCharTensor_maskedSelect"
+  p_maskedSelect :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> Ptr C'THCudaByteTensor -> IO ())
+
+-- | p_maskedSelectByte : Pointer to function : state tensor src mask -> void
+foreign import ccall "THCTensorMasked.h &THCudaCharTensor_maskedSelectByte"
+  p_maskedSelectByte :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> Ptr C'THByteTensor -> IO ())
diff --git a/src/Torch/FFI/THC/Char/TensorMath.hs b/src/Torch/FFI/THC/Char/TensorMath.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Char/TensorMath.hs
@@ -0,0 +1,153 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Char.TensorMath where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_fill :  state self value -> void
+foreign import ccall "THCTensorMath.h THCudaCharTensor_fill"
+  c_fill :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> CChar -> IO ()
+
+-- | c_zero :  state self -> void
+foreign import ccall "THCTensorMath.h THCudaCharTensor_zero"
+  c_zero :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> IO ()
+
+-- | c_zeros :  state r_ size -> void
+foreign import ccall "THCTensorMath.h THCudaCharTensor_zeros"
+  c_zeros :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THLongStorage -> IO ()
+
+-- | c_zerosLike :  state r_ input -> void
+foreign import ccall "THCTensorMath.h THCudaCharTensor_zerosLike"
+  c_zerosLike :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> IO ()
+
+-- | c_ones :  state r_ size -> void
+foreign import ccall "THCTensorMath.h THCudaCharTensor_ones"
+  c_ones :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THLongStorage -> IO ()
+
+-- | c_onesLike :  state r_ input -> void
+foreign import ccall "THCTensorMath.h THCudaCharTensor_onesLike"
+  c_onesLike :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> IO ()
+
+-- | c_reshape :  state r_ t size -> void
+foreign import ccall "THCTensorMath.h THCudaCharTensor_reshape"
+  c_reshape :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> Ptr C'THLongStorage -> IO ()
+
+-- | c_numel :  state t -> ptrdiff_t
+foreign import ccall "THCTensorMath.h THCudaCharTensor_numel"
+  c_numel :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> IO CPtrdiff
+
+-- | c_cat :  state result ta tb dimension -> void
+foreign import ccall "THCTensorMath.h THCudaCharTensor_cat"
+  c_cat :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> CInt -> IO ()
+
+-- | c_catArray :  state result inputs numInputs dimension -> void
+foreign import ccall "THCTensorMath.h THCudaCharTensor_catArray"
+  c_catArray :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr (Ptr C'THCudaCharTensor) -> CInt -> CInt -> IO ()
+
+-- | c_nonzero :  state tensor self -> void
+foreign import ccall "THCTensorMath.h THCudaCharTensor_nonzero"
+  c_nonzero :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaCharTensor -> IO ()
+
+-- | c_tril :  state self src k -> void
+foreign import ccall "THCTensorMath.h THCudaCharTensor_tril"
+  c_tril :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> CLLong -> IO ()
+
+-- | c_triu :  state self src k -> void
+foreign import ccall "THCTensorMath.h THCudaCharTensor_triu"
+  c_triu :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> CLLong -> IO ()
+
+-- | c_diag :  state self src k -> void
+foreign import ccall "THCTensorMath.h THCudaCharTensor_diag"
+  c_diag :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> CLLong -> IO ()
+
+-- | c_eye :  state self n k -> void
+foreign import ccall "THCTensorMath.h THCudaCharTensor_eye"
+  c_eye :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> CLLong -> CLLong -> IO ()
+
+-- | c_trace :  state self -> accreal
+foreign import ccall "THCTensorMath.h THCudaCharTensor_trace"
+  c_trace :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> IO CLong
+
+-- | c_range :  state r_ xmin xmax step -> void
+foreign import ccall "THCTensorMath.h THCudaCharTensor_range"
+  c_range :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> CLong -> CLong -> CLong -> IO ()
+
+-- | c_arange :  state r_ xmin xmax step -> void
+foreign import ccall "THCTensorMath.h THCudaCharTensor_arange"
+  c_arange :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> CLong -> CLong -> CLong -> IO ()
+
+-- | p_fill : Pointer to function : state self value -> void
+foreign import ccall "THCTensorMath.h &THCudaCharTensor_fill"
+  p_fill :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> CChar -> IO ())
+
+-- | p_zero : Pointer to function : state self -> void
+foreign import ccall "THCTensorMath.h &THCudaCharTensor_zero"
+  p_zero :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> IO ())
+
+-- | p_zeros : Pointer to function : state r_ size -> void
+foreign import ccall "THCTensorMath.h &THCudaCharTensor_zeros"
+  p_zeros :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THLongStorage -> IO ())
+
+-- | p_zerosLike : Pointer to function : state r_ input -> void
+foreign import ccall "THCTensorMath.h &THCudaCharTensor_zerosLike"
+  p_zerosLike :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> IO ())
+
+-- | p_ones : Pointer to function : state r_ size -> void
+foreign import ccall "THCTensorMath.h &THCudaCharTensor_ones"
+  p_ones :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THLongStorage -> IO ())
+
+-- | p_onesLike : Pointer to function : state r_ input -> void
+foreign import ccall "THCTensorMath.h &THCudaCharTensor_onesLike"
+  p_onesLike :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> IO ())
+
+-- | p_reshape : Pointer to function : state r_ t size -> void
+foreign import ccall "THCTensorMath.h &THCudaCharTensor_reshape"
+  p_reshape :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> Ptr C'THLongStorage -> IO ())
+
+-- | p_numel : Pointer to function : state t -> ptrdiff_t
+foreign import ccall "THCTensorMath.h &THCudaCharTensor_numel"
+  p_numel :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> IO CPtrdiff)
+
+-- | p_cat : Pointer to function : state result ta tb dimension -> void
+foreign import ccall "THCTensorMath.h &THCudaCharTensor_cat"
+  p_cat :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> CInt -> IO ())
+
+-- | p_catArray : Pointer to function : state result inputs numInputs dimension -> void
+foreign import ccall "THCTensorMath.h &THCudaCharTensor_catArray"
+  p_catArray :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr (Ptr C'THCudaCharTensor) -> CInt -> CInt -> IO ())
+
+-- | p_nonzero : Pointer to function : state tensor self -> void
+foreign import ccall "THCTensorMath.h &THCudaCharTensor_nonzero"
+  p_nonzero :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaCharTensor -> IO ())
+
+-- | p_tril : Pointer to function : state self src k -> void
+foreign import ccall "THCTensorMath.h &THCudaCharTensor_tril"
+  p_tril :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> CLLong -> IO ())
+
+-- | p_triu : Pointer to function : state self src k -> void
+foreign import ccall "THCTensorMath.h &THCudaCharTensor_triu"
+  p_triu :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> CLLong -> IO ())
+
+-- | p_diag : Pointer to function : state self src k -> void
+foreign import ccall "THCTensorMath.h &THCudaCharTensor_diag"
+  p_diag :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> CLLong -> IO ())
+
+-- | p_eye : Pointer to function : state self n k -> void
+foreign import ccall "THCTensorMath.h &THCudaCharTensor_eye"
+  p_eye :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> CLLong -> CLLong -> IO ())
+
+-- | p_trace : Pointer to function : state self -> accreal
+foreign import ccall "THCTensorMath.h &THCudaCharTensor_trace"
+  p_trace :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> IO CLong)
+
+-- | p_range : Pointer to function : state r_ xmin xmax step -> void
+foreign import ccall "THCTensorMath.h &THCudaCharTensor_range"
+  p_range :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> CLong -> CLong -> CLong -> IO ())
+
+-- | p_arange : Pointer to function : state r_ xmin xmax step -> void
+foreign import ccall "THCTensorMath.h &THCudaCharTensor_arange"
+  p_arange :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> CLong -> CLong -> CLong -> IO ())
diff --git a/src/Torch/FFI/THC/Char/TensorMathCompare.hs b/src/Torch/FFI/THC/Char/TensorMathCompare.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Char/TensorMathCompare.hs
@@ -0,0 +1,105 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Char.TensorMathCompare where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_ltValue :  state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h THCudaCharTensor_ltValue"
+  c_ltValue :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaCharTensor -> CChar -> IO ()
+
+-- | c_gtValue :  state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h THCudaCharTensor_gtValue"
+  c_gtValue :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaCharTensor -> CChar -> IO ()
+
+-- | c_leValue :  state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h THCudaCharTensor_leValue"
+  c_leValue :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaCharTensor -> CChar -> IO ()
+
+-- | c_geValue :  state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h THCudaCharTensor_geValue"
+  c_geValue :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaCharTensor -> CChar -> IO ()
+
+-- | c_eqValue :  state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h THCudaCharTensor_eqValue"
+  c_eqValue :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaCharTensor -> CChar -> IO ()
+
+-- | c_neValue :  state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h THCudaCharTensor_neValue"
+  c_neValue :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaCharTensor -> CChar -> IO ()
+
+-- | c_ltValueT :  state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h THCudaCharTensor_ltValueT"
+  c_ltValueT :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> CChar -> IO ()
+
+-- | c_gtValueT :  state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h THCudaCharTensor_gtValueT"
+  c_gtValueT :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> CChar -> IO ()
+
+-- | c_leValueT :  state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h THCudaCharTensor_leValueT"
+  c_leValueT :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> CChar -> IO ()
+
+-- | c_geValueT :  state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h THCudaCharTensor_geValueT"
+  c_geValueT :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> CChar -> IO ()
+
+-- | c_eqValueT :  state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h THCudaCharTensor_eqValueT"
+  c_eqValueT :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> CChar -> IO ()
+
+-- | c_neValueT :  state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h THCudaCharTensor_neValueT"
+  c_neValueT :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> CChar -> IO ()
+
+-- | p_ltValue : Pointer to function : state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h &THCudaCharTensor_ltValue"
+  p_ltValue :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaCharTensor -> CChar -> IO ())
+
+-- | p_gtValue : Pointer to function : state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h &THCudaCharTensor_gtValue"
+  p_gtValue :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaCharTensor -> CChar -> IO ())
+
+-- | p_leValue : Pointer to function : state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h &THCudaCharTensor_leValue"
+  p_leValue :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaCharTensor -> CChar -> IO ())
+
+-- | p_geValue : Pointer to function : state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h &THCudaCharTensor_geValue"
+  p_geValue :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaCharTensor -> CChar -> IO ())
+
+-- | p_eqValue : Pointer to function : state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h &THCudaCharTensor_eqValue"
+  p_eqValue :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaCharTensor -> CChar -> IO ())
+
+-- | p_neValue : Pointer to function : state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h &THCudaCharTensor_neValue"
+  p_neValue :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaCharTensor -> CChar -> IO ())
+
+-- | p_ltValueT : Pointer to function : state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h &THCudaCharTensor_ltValueT"
+  p_ltValueT :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> CChar -> IO ())
+
+-- | p_gtValueT : Pointer to function : state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h &THCudaCharTensor_gtValueT"
+  p_gtValueT :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> CChar -> IO ())
+
+-- | p_leValueT : Pointer to function : state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h &THCudaCharTensor_leValueT"
+  p_leValueT :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> CChar -> IO ())
+
+-- | p_geValueT : Pointer to function : state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h &THCudaCharTensor_geValueT"
+  p_geValueT :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> CChar -> IO ())
+
+-- | p_eqValueT : Pointer to function : state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h &THCudaCharTensor_eqValueT"
+  p_eqValueT :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> CChar -> IO ())
+
+-- | p_neValueT : Pointer to function : state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h &THCudaCharTensor_neValueT"
+  p_neValueT :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> CChar -> IO ())
diff --git a/src/Torch/FFI/THC/Char/TensorMathCompareT.hs b/src/Torch/FFI/THC/Char/TensorMathCompareT.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Char/TensorMathCompareT.hs
@@ -0,0 +1,105 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Char.TensorMathCompareT where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_ltTensor :  state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h THCudaCharTensor_ltTensor"
+  c_ltTensor :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> IO ()
+
+-- | c_gtTensor :  state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h THCudaCharTensor_gtTensor"
+  c_gtTensor :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> IO ()
+
+-- | c_leTensor :  state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h THCudaCharTensor_leTensor"
+  c_leTensor :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> IO ()
+
+-- | c_geTensor :  state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h THCudaCharTensor_geTensor"
+  c_geTensor :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> IO ()
+
+-- | c_eqTensor :  state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h THCudaCharTensor_eqTensor"
+  c_eqTensor :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> IO ()
+
+-- | c_neTensor :  state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h THCudaCharTensor_neTensor"
+  c_neTensor :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> IO ()
+
+-- | c_ltTensorT :  state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h THCudaCharTensor_ltTensorT"
+  c_ltTensorT :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> IO ()
+
+-- | c_gtTensorT :  state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h THCudaCharTensor_gtTensorT"
+  c_gtTensorT :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> IO ()
+
+-- | c_leTensorT :  state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h THCudaCharTensor_leTensorT"
+  c_leTensorT :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> IO ()
+
+-- | c_geTensorT :  state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h THCudaCharTensor_geTensorT"
+  c_geTensorT :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> IO ()
+
+-- | c_eqTensorT :  state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h THCudaCharTensor_eqTensorT"
+  c_eqTensorT :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> IO ()
+
+-- | c_neTensorT :  state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h THCudaCharTensor_neTensorT"
+  c_neTensorT :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> IO ()
+
+-- | p_ltTensor : Pointer to function : state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h &THCudaCharTensor_ltTensor"
+  p_ltTensor :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> IO ())
+
+-- | p_gtTensor : Pointer to function : state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h &THCudaCharTensor_gtTensor"
+  p_gtTensor :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> IO ())
+
+-- | p_leTensor : Pointer to function : state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h &THCudaCharTensor_leTensor"
+  p_leTensor :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> IO ())
+
+-- | p_geTensor : Pointer to function : state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h &THCudaCharTensor_geTensor"
+  p_geTensor :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> IO ())
+
+-- | p_eqTensor : Pointer to function : state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h &THCudaCharTensor_eqTensor"
+  p_eqTensor :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> IO ())
+
+-- | p_neTensor : Pointer to function : state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h &THCudaCharTensor_neTensor"
+  p_neTensor :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> IO ())
+
+-- | p_ltTensorT : Pointer to function : state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h &THCudaCharTensor_ltTensorT"
+  p_ltTensorT :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> IO ())
+
+-- | p_gtTensorT : Pointer to function : state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h &THCudaCharTensor_gtTensorT"
+  p_gtTensorT :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> IO ())
+
+-- | p_leTensorT : Pointer to function : state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h &THCudaCharTensor_leTensorT"
+  p_leTensorT :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> IO ())
+
+-- | p_geTensorT : Pointer to function : state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h &THCudaCharTensor_geTensorT"
+  p_geTensorT :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> IO ())
+
+-- | p_eqTensorT : Pointer to function : state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h &THCudaCharTensor_eqTensorT"
+  p_eqTensorT :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> IO ())
+
+-- | p_neTensorT : Pointer to function : state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h &THCudaCharTensor_neTensorT"
+  p_neTensorT :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> IO ())
diff --git a/src/Torch/FFI/THC/Char/TensorMathPairwise.hs b/src/Torch/FFI/THC/Char/TensorMathPairwise.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Char/TensorMathPairwise.hs
@@ -0,0 +1,121 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Char.TensorMathPairwise where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_add :  state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h THCudaCharTensor_add"
+  c_add :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> CChar -> IO ()
+
+-- | c_sub :  state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h THCudaCharTensor_sub"
+  c_sub :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> CChar -> IO ()
+
+-- | c_add_scaled :  state self src value alpha -> void
+foreign import ccall "THCTensorMathPairwise.h THCudaCharTensor_add_scaled"
+  c_add_scaled :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> CChar -> CChar -> IO ()
+
+-- | c_sub_scaled :  state self src value alpha -> void
+foreign import ccall "THCTensorMathPairwise.h THCudaCharTensor_sub_scaled"
+  c_sub_scaled :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> CChar -> CChar -> IO ()
+
+-- | c_mul :  state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h THCudaCharTensor_mul"
+  c_mul :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> CChar -> IO ()
+
+-- | c_div :  state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h THCudaCharTensor_div"
+  c_div :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> CChar -> IO ()
+
+-- | c_lshift :  state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h THCudaCharTensor_lshift"
+  c_lshift :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> CChar -> IO ()
+
+-- | c_rshift :  state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h THCudaCharTensor_rshift"
+  c_rshift :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> CChar -> IO ()
+
+-- | c_fmod :  state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h THCudaCharTensor_fmod"
+  c_fmod :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> CChar -> IO ()
+
+-- | c_remainder :  state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h THCudaCharTensor_remainder"
+  c_remainder :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> CChar -> IO ()
+
+-- | c_bitand :  state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h THCudaCharTensor_bitand"
+  c_bitand :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> CChar -> IO ()
+
+-- | c_bitor :  state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h THCudaCharTensor_bitor"
+  c_bitor :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> CChar -> IO ()
+
+-- | c_bitxor :  state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h THCudaCharTensor_bitxor"
+  c_bitxor :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> CChar -> IO ()
+
+-- | c_equal :  state self src -> int
+foreign import ccall "THCTensorMathPairwise.h THCudaCharTensor_equal"
+  c_equal :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> IO CInt
+
+-- | p_add : Pointer to function : state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h &THCudaCharTensor_add"
+  p_add :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> CChar -> IO ())
+
+-- | p_sub : Pointer to function : state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h &THCudaCharTensor_sub"
+  p_sub :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> CChar -> IO ())
+
+-- | p_add_scaled : Pointer to function : state self src value alpha -> void
+foreign import ccall "THCTensorMathPairwise.h &THCudaCharTensor_add_scaled"
+  p_add_scaled :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> CChar -> CChar -> IO ())
+
+-- | p_sub_scaled : Pointer to function : state self src value alpha -> void
+foreign import ccall "THCTensorMathPairwise.h &THCudaCharTensor_sub_scaled"
+  p_sub_scaled :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> CChar -> CChar -> IO ())
+
+-- | p_mul : Pointer to function : state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h &THCudaCharTensor_mul"
+  p_mul :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> CChar -> IO ())
+
+-- | p_div : Pointer to function : state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h &THCudaCharTensor_div"
+  p_div :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> CChar -> IO ())
+
+-- | p_lshift : Pointer to function : state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h &THCudaCharTensor_lshift"
+  p_lshift :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> CChar -> IO ())
+
+-- | p_rshift : Pointer to function : state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h &THCudaCharTensor_rshift"
+  p_rshift :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> CChar -> IO ())
+
+-- | p_fmod : Pointer to function : state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h &THCudaCharTensor_fmod"
+  p_fmod :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> CChar -> IO ())
+
+-- | p_remainder : Pointer to function : state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h &THCudaCharTensor_remainder"
+  p_remainder :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> CChar -> IO ())
+
+-- | p_bitand : Pointer to function : state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h &THCudaCharTensor_bitand"
+  p_bitand :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> CChar -> IO ())
+
+-- | p_bitor : Pointer to function : state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h &THCudaCharTensor_bitor"
+  p_bitor :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> CChar -> IO ())
+
+-- | p_bitxor : Pointer to function : state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h &THCudaCharTensor_bitxor"
+  p_bitxor :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> CChar -> IO ())
+
+-- | p_equal : Pointer to function : state self src -> int
+foreign import ccall "THCTensorMathPairwise.h &THCudaCharTensor_equal"
+  p_equal :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> IO CInt)
diff --git a/src/Torch/FFI/THC/Char/TensorMathPointwise.hs b/src/Torch/FFI/THC/Char/TensorMathPointwise.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Char/TensorMathPointwise.hs
@@ -0,0 +1,177 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Char.TensorMathPointwise where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_sign :  state self src -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaCharTensor_sign"
+  c_sign :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> IO ()
+
+-- | c_clamp :  state self src min_value max_value -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaCharTensor_clamp"
+  c_clamp :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> CChar -> CChar -> IO ()
+
+-- | c_cross :  state self src1 src2 dimension -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaCharTensor_cross"
+  c_cross :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> CInt -> IO ()
+
+-- | c_cadd :  state self src1 value src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaCharTensor_cadd"
+  c_cadd :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> CChar -> Ptr C'THCudaCharTensor -> IO ()
+
+-- | c_csub :  state self src1 value src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaCharTensor_csub"
+  c_csub :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> CChar -> Ptr C'THCudaCharTensor -> IO ()
+
+-- | c_cmul :  state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaCharTensor_cmul"
+  c_cmul :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> IO ()
+
+-- | c_cpow :  state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaCharTensor_cpow"
+  c_cpow :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> IO ()
+
+-- | c_cdiv :  state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaCharTensor_cdiv"
+  c_cdiv :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> IO ()
+
+-- | c_clshift :  state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaCharTensor_clshift"
+  c_clshift :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> IO ()
+
+-- | c_crshift :  state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaCharTensor_crshift"
+  c_crshift :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> IO ()
+
+-- | c_cmax :  state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaCharTensor_cmax"
+  c_cmax :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> IO ()
+
+-- | c_cmin :  state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaCharTensor_cmin"
+  c_cmin :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> IO ()
+
+-- | c_cfmod :  state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaCharTensor_cfmod"
+  c_cfmod :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> IO ()
+
+-- | c_cremainder :  state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaCharTensor_cremainder"
+  c_cremainder :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> IO ()
+
+-- | c_cmaxValue :  state self src value -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaCharTensor_cmaxValue"
+  c_cmaxValue :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> CChar -> IO ()
+
+-- | c_cminValue :  state self src value -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaCharTensor_cminValue"
+  c_cminValue :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> CChar -> IO ()
+
+-- | c_cbitand :  state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaCharTensor_cbitand"
+  c_cbitand :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> IO ()
+
+-- | c_cbitor :  state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaCharTensor_cbitor"
+  c_cbitor :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> IO ()
+
+-- | c_cbitxor :  state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaCharTensor_cbitxor"
+  c_cbitxor :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> IO ()
+
+-- | c_addcmul :  state self t value src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaCharTensor_addcmul"
+  c_addcmul :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> CChar -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> IO ()
+
+-- | c_addcdiv :  state self t value src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaCharTensor_addcdiv"
+  c_addcdiv :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> CChar -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> IO ()
+
+-- | p_sign : Pointer to function : state self src -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaCharTensor_sign"
+  p_sign :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> IO ())
+
+-- | p_clamp : Pointer to function : state self src min_value max_value -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaCharTensor_clamp"
+  p_clamp :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> CChar -> CChar -> IO ())
+
+-- | p_cross : Pointer to function : state self src1 src2 dimension -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaCharTensor_cross"
+  p_cross :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> CInt -> IO ())
+
+-- | p_cadd : Pointer to function : state self src1 value src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaCharTensor_cadd"
+  p_cadd :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> CChar -> Ptr C'THCudaCharTensor -> IO ())
+
+-- | p_csub : Pointer to function : state self src1 value src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaCharTensor_csub"
+  p_csub :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> CChar -> Ptr C'THCudaCharTensor -> IO ())
+
+-- | p_cmul : Pointer to function : state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaCharTensor_cmul"
+  p_cmul :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> IO ())
+
+-- | p_cpow : Pointer to function : state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaCharTensor_cpow"
+  p_cpow :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> IO ())
+
+-- | p_cdiv : Pointer to function : state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaCharTensor_cdiv"
+  p_cdiv :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> IO ())
+
+-- | p_clshift : Pointer to function : state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaCharTensor_clshift"
+  p_clshift :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> IO ())
+
+-- | p_crshift : Pointer to function : state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaCharTensor_crshift"
+  p_crshift :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> IO ())
+
+-- | p_cmax : Pointer to function : state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaCharTensor_cmax"
+  p_cmax :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> IO ())
+
+-- | p_cmin : Pointer to function : state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaCharTensor_cmin"
+  p_cmin :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> IO ())
+
+-- | p_cfmod : Pointer to function : state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaCharTensor_cfmod"
+  p_cfmod :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> IO ())
+
+-- | p_cremainder : Pointer to function : state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaCharTensor_cremainder"
+  p_cremainder :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> IO ())
+
+-- | p_cmaxValue : Pointer to function : state self src value -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaCharTensor_cmaxValue"
+  p_cmaxValue :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> CChar -> IO ())
+
+-- | p_cminValue : Pointer to function : state self src value -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaCharTensor_cminValue"
+  p_cminValue :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> CChar -> IO ())
+
+-- | p_cbitand : Pointer to function : state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaCharTensor_cbitand"
+  p_cbitand :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> IO ())
+
+-- | p_cbitor : Pointer to function : state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaCharTensor_cbitor"
+  p_cbitor :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> IO ())
+
+-- | p_cbitxor : Pointer to function : state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaCharTensor_cbitxor"
+  p_cbitxor :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> IO ())
+
+-- | p_addcmul : Pointer to function : state self t value src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaCharTensor_addcmul"
+  p_addcmul :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> CChar -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> IO ())
+
+-- | p_addcdiv : Pointer to function : state self t value src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaCharTensor_addcdiv"
+  p_addcdiv :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> CChar -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> IO ())
diff --git a/src/Torch/FFI/THC/Char/TensorMathReduce.hs b/src/Torch/FFI/THC/Char/TensorMathReduce.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Char/TensorMathReduce.hs
@@ -0,0 +1,89 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Char.TensorMathReduce where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_sum :  state self src dim keepdim -> void
+foreign import ccall "THCTensorMathReduce.h THCudaCharTensor_sum"
+  c_sum :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> CInt -> CInt -> IO ()
+
+-- | c_prod :  state self src dim keepdim -> void
+foreign import ccall "THCTensorMathReduce.h THCudaCharTensor_prod"
+  c_prod :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> CInt -> CInt -> IO ()
+
+-- | c_sumall :  state self -> accreal
+foreign import ccall "THCTensorMathReduce.h THCudaCharTensor_sumall"
+  c_sumall :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> IO CLong
+
+-- | c_prodall :  state self -> accreal
+foreign import ccall "THCTensorMathReduce.h THCudaCharTensor_prodall"
+  c_prodall :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> IO CLong
+
+-- | c_min :  state values indices src dim keepdim -> void
+foreign import ccall "THCTensorMathReduce.h THCudaCharTensor_min"
+  c_min :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaCharTensor -> CInt -> CInt -> IO ()
+
+-- | c_max :  state values indices src dim keepdim -> void
+foreign import ccall "THCTensorMathReduce.h THCudaCharTensor_max"
+  c_max :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaCharTensor -> CInt -> CInt -> IO ()
+
+-- | c_minall :  state self -> real
+foreign import ccall "THCTensorMathReduce.h THCudaCharTensor_minall"
+  c_minall :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> IO CChar
+
+-- | c_maxall :  state self -> real
+foreign import ccall "THCTensorMathReduce.h THCudaCharTensor_maxall"
+  c_maxall :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> IO CChar
+
+-- | c_medianall :  state self -> real
+foreign import ccall "THCTensorMathReduce.h THCudaCharTensor_medianall"
+  c_medianall :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> IO CChar
+
+-- | c_median :  state values indices src dim keepdim -> void
+foreign import ccall "THCTensorMathReduce.h THCudaCharTensor_median"
+  c_median :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaCharTensor -> CInt -> CInt -> IO ()
+
+-- | p_sum : Pointer to function : state self src dim keepdim -> void
+foreign import ccall "THCTensorMathReduce.h &THCudaCharTensor_sum"
+  p_sum :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> CInt -> CInt -> IO ())
+
+-- | p_prod : Pointer to function : state self src dim keepdim -> void
+foreign import ccall "THCTensorMathReduce.h &THCudaCharTensor_prod"
+  p_prod :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> CInt -> CInt -> IO ())
+
+-- | p_sumall : Pointer to function : state self -> accreal
+foreign import ccall "THCTensorMathReduce.h &THCudaCharTensor_sumall"
+  p_sumall :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> IO CLong)
+
+-- | p_prodall : Pointer to function : state self -> accreal
+foreign import ccall "THCTensorMathReduce.h &THCudaCharTensor_prodall"
+  p_prodall :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> IO CLong)
+
+-- | p_min : Pointer to function : state values indices src dim keepdim -> void
+foreign import ccall "THCTensorMathReduce.h &THCudaCharTensor_min"
+  p_min :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaCharTensor -> CInt -> CInt -> IO ())
+
+-- | p_max : Pointer to function : state values indices src dim keepdim -> void
+foreign import ccall "THCTensorMathReduce.h &THCudaCharTensor_max"
+  p_max :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaCharTensor -> CInt -> CInt -> IO ())
+
+-- | p_minall : Pointer to function : state self -> real
+foreign import ccall "THCTensorMathReduce.h &THCudaCharTensor_minall"
+  p_minall :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> IO CChar)
+
+-- | p_maxall : Pointer to function : state self -> real
+foreign import ccall "THCTensorMathReduce.h &THCudaCharTensor_maxall"
+  p_maxall :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> IO CChar)
+
+-- | p_medianall : Pointer to function : state self -> real
+foreign import ccall "THCTensorMathReduce.h &THCudaCharTensor_medianall"
+  p_medianall :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> IO CChar)
+
+-- | p_median : Pointer to function : state values indices src dim keepdim -> void
+foreign import ccall "THCTensorMathReduce.h &THCudaCharTensor_median"
+  p_median :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaCharTensor -> CInt -> CInt -> IO ())
diff --git a/src/Torch/FFI/THC/Char/TensorMathScan.hs b/src/Torch/FFI/THC/Char/TensorMathScan.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Char/TensorMathScan.hs
@@ -0,0 +1,25 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Char.TensorMathScan where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_cumsum :  state self src dim -> void
+foreign import ccall "THCTensorMathScan.h THCudaCharTensor_cumsum"
+  c_cumsum :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> CInt -> IO ()
+
+-- | c_cumprod :  state self src dim -> void
+foreign import ccall "THCTensorMathScan.h THCudaCharTensor_cumprod"
+  c_cumprod :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> CInt -> IO ()
+
+-- | p_cumsum : Pointer to function : state self src dim -> void
+foreign import ccall "THCTensorMathScan.h &THCudaCharTensor_cumsum"
+  p_cumsum :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> CInt -> IO ())
+
+-- | p_cumprod : Pointer to function : state self src dim -> void
+foreign import ccall "THCTensorMathScan.h &THCudaCharTensor_cumprod"
+  p_cumprod :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> CInt -> IO ())
diff --git a/src/Torch/FFI/THC/Char/TensorMode.hs b/src/Torch/FFI/THC/Char/TensorMode.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Char/TensorMode.hs
@@ -0,0 +1,17 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Char.TensorMode where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_mode :  state values indices input dimension keepdim -> void
+foreign import ccall "THCTensorMode.h THCudaCharTensor_mode"
+  c_mode :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaCharTensor -> CInt -> CInt -> IO ()
+
+-- | p_mode : Pointer to function : state values indices input dimension keepdim -> void
+foreign import ccall "THCTensorMode.h &THCudaCharTensor_mode"
+  p_mode :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaCharTensor -> CInt -> CInt -> IO ())
diff --git a/src/Torch/FFI/THC/Char/TensorRandom.hs b/src/Torch/FFI/THC/Char/TensorRandom.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Char/TensorRandom.hs
@@ -0,0 +1,57 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Char.TensorRandom where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_random :  state self -> void
+foreign import ccall "THCTensorRandom.h THCudaCharTensor_random"
+  c_random :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> IO ()
+
+-- | c_clampedRandom :  state self min max -> void
+foreign import ccall "THCTensorRandom.h THCudaCharTensor_clampedRandom"
+  c_clampedRandom :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> CLLong -> CLLong -> IO ()
+
+-- | c_cappedRandom :  state self max -> void
+foreign import ccall "THCTensorRandom.h THCudaCharTensor_cappedRandom"
+  c_cappedRandom :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> CLLong -> IO ()
+
+-- | c_bernoulli :  state self p -> void
+foreign import ccall "THCTensorRandom.h THCudaCharTensor_bernoulli"
+  c_bernoulli :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> CDouble -> IO ()
+
+-- | c_bernoulli_DoubleTensor :  state self p -> void
+foreign import ccall "THCTensorRandom.h THCudaCharTensor_bernoulli_DoubleTensor"
+  c_bernoulli_DoubleTensor :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_geometric :  state self p -> void
+foreign import ccall "THCTensorRandom.h THCudaCharTensor_geometric"
+  c_geometric :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> CDouble -> IO ()
+
+-- | p_random : Pointer to function : state self -> void
+foreign import ccall "THCTensorRandom.h &THCudaCharTensor_random"
+  p_random :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> IO ())
+
+-- | p_clampedRandom : Pointer to function : state self min max -> void
+foreign import ccall "THCTensorRandom.h &THCudaCharTensor_clampedRandom"
+  p_clampedRandom :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> CLLong -> CLLong -> IO ())
+
+-- | p_cappedRandom : Pointer to function : state self max -> void
+foreign import ccall "THCTensorRandom.h &THCudaCharTensor_cappedRandom"
+  p_cappedRandom :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> CLLong -> IO ())
+
+-- | p_bernoulli : Pointer to function : state self p -> void
+foreign import ccall "THCTensorRandom.h &THCudaCharTensor_bernoulli"
+  p_bernoulli :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> CDouble -> IO ())
+
+-- | p_bernoulli_DoubleTensor : Pointer to function : state self p -> void
+foreign import ccall "THCTensorRandom.h &THCudaCharTensor_bernoulli_DoubleTensor"
+  p_bernoulli_DoubleTensor :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_geometric : Pointer to function : state self p -> void
+foreign import ccall "THCTensorRandom.h &THCudaCharTensor_geometric"
+  p_geometric :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> CDouble -> IO ())
diff --git a/src/Torch/FFI/THC/Char/TensorScatterGather.hs b/src/Torch/FFI/THC/Char/TensorScatterGather.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Char/TensorScatterGather.hs
@@ -0,0 +1,41 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Char.TensorScatterGather where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_gather :  state tensor src dim index -> void
+foreign import ccall "THCTensorScatterGather.h THCudaCharTensor_gather"
+  c_gather :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> CInt -> Ptr C'THCudaLongTensor -> IO ()
+
+-- | c_scatter :  state tensor dim index src -> void
+foreign import ccall "THCTensorScatterGather.h THCudaCharTensor_scatter"
+  c_scatter :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> CInt -> Ptr C'THCudaLongTensor -> Ptr C'THCudaCharTensor -> IO ()
+
+-- | c_scatterAdd :  state tensor dim index src -> void
+foreign import ccall "THCTensorScatterGather.h THCudaCharTensor_scatterAdd"
+  c_scatterAdd :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> CInt -> Ptr C'THCudaLongTensor -> Ptr C'THCudaCharTensor -> IO ()
+
+-- | c_scatterFill :  state tensor dim index value -> void
+foreign import ccall "THCTensorScatterGather.h THCudaCharTensor_scatterFill"
+  c_scatterFill :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> CInt -> Ptr C'THCudaLongTensor -> CChar -> IO ()
+
+-- | p_gather : Pointer to function : state tensor src dim index -> void
+foreign import ccall "THCTensorScatterGather.h &THCudaCharTensor_gather"
+  p_gather :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaCharTensor -> CInt -> Ptr C'THCudaLongTensor -> IO ())
+
+-- | p_scatter : Pointer to function : state tensor dim index src -> void
+foreign import ccall "THCTensorScatterGather.h &THCudaCharTensor_scatter"
+  p_scatter :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> CInt -> Ptr C'THCudaLongTensor -> Ptr C'THCudaCharTensor -> IO ())
+
+-- | p_scatterAdd : Pointer to function : state tensor dim index src -> void
+foreign import ccall "THCTensorScatterGather.h &THCudaCharTensor_scatterAdd"
+  p_scatterAdd :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> CInt -> Ptr C'THCudaLongTensor -> Ptr C'THCudaCharTensor -> IO ())
+
+-- | p_scatterFill : Pointer to function : state tensor dim index value -> void
+foreign import ccall "THCTensorScatterGather.h &THCudaCharTensor_scatterFill"
+  p_scatterFill :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> CInt -> Ptr C'THCudaLongTensor -> CChar -> IO ())
diff --git a/src/Torch/FFI/THC/Char/TensorSort.hs b/src/Torch/FFI/THC/Char/TensorSort.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Char/TensorSort.hs
@@ -0,0 +1,25 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Char.TensorSort where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_sortKeyValueInplace :  state keys values dim order -> void
+foreign import ccall "THCTensorSort.h THCudaCharTensor_sortKeyValueInplace"
+  c_sortKeyValueInplace :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaLongTensor -> CInt -> CInt -> IO ()
+
+-- | c_sort :  state sorted indices input dim order -> void
+foreign import ccall "THCTensorSort.h THCudaCharTensor_sort"
+  c_sort :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaCharTensor -> CInt -> CInt -> IO ()
+
+-- | p_sortKeyValueInplace : Pointer to function : state keys values dim order -> void
+foreign import ccall "THCTensorSort.h &THCudaCharTensor_sortKeyValueInplace"
+  p_sortKeyValueInplace :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaLongTensor -> CInt -> CInt -> IO ())
+
+-- | p_sort : Pointer to function : state sorted indices input dim order -> void
+foreign import ccall "THCTensorSort.h &THCudaCharTensor_sort"
+  p_sort :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaCharTensor -> CInt -> CInt -> IO ())
diff --git a/src/Torch/FFI/THC/Char/TensorTopK.hs b/src/Torch/FFI/THC/Char/TensorTopK.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Char/TensorTopK.hs
@@ -0,0 +1,17 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Char.TensorTopK where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_topk :  state topK indices input k dim dir sorted -> void
+foreign import ccall "THCTensorTopK.h THCudaCharTensor_topk"
+  c_topk :: Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaCharTensor -> CLLong -> CInt -> CInt -> CInt -> IO ()
+
+-- | p_topk : Pointer to function : state topK indices input k dim dir sorted -> void
+foreign import ccall "THCTensorTopK.h &THCudaCharTensor_topk"
+  p_topk :: FunPtr (Ptr C'THCState -> Ptr C'THCudaCharTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaCharTensor -> CLLong -> CInt -> CInt -> CInt -> IO ())
diff --git a/src/Torch/FFI/THC/Double/Storage.hs b/src/Torch/FFI/THC/Double/Storage.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Double/Storage.hs
@@ -0,0 +1,161 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Double.Storage where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_data :  state  -> real *
+foreign import ccall "THCStorage.h THCudaDoubleStorage_data"
+  c_data :: Ptr C'THCState -> Ptr C'THCDoubleStorage -> IO (Ptr CDouble)
+
+-- | c_size :  state  -> ptrdiff_t
+foreign import ccall "THCStorage.h THCudaDoubleStorage_size"
+  c_size :: Ptr C'THCState -> Ptr C'THCDoubleStorage -> IO CPtrdiff
+
+-- | c_set :  state    -> void
+foreign import ccall "THCStorage.h THCudaDoubleStorage_set"
+  c_set :: Ptr C'THCState -> Ptr C'THCDoubleStorage -> CPtrdiff -> CDouble -> IO ()
+
+-- | c_get :  state   -> real
+foreign import ccall "THCStorage.h THCudaDoubleStorage_get"
+  c_get :: Ptr C'THCState -> Ptr C'THCDoubleStorage -> CPtrdiff -> IO CDouble
+
+-- | c_new :  state -> THCStorage *
+foreign import ccall "THCStorage.h THCudaDoubleStorage_new"
+  c_new :: Ptr C'THCState -> IO (Ptr C'THCDoubleStorage)
+
+-- | c_newWithSize :  state size -> THCStorage *
+foreign import ccall "THCStorage.h THCudaDoubleStorage_newWithSize"
+  c_newWithSize :: Ptr C'THCState -> CPtrdiff -> IO (Ptr C'THCDoubleStorage)
+
+-- | c_newWithSize1 :  state  -> THCStorage *
+foreign import ccall "THCStorage.h THCudaDoubleStorage_newWithSize1"
+  c_newWithSize1 :: Ptr C'THCState -> CDouble -> IO (Ptr C'THCDoubleStorage)
+
+-- | c_newWithSize2 :  state   -> THCStorage *
+foreign import ccall "THCStorage.h THCudaDoubleStorage_newWithSize2"
+  c_newWithSize2 :: Ptr C'THCState -> CDouble -> CDouble -> IO (Ptr C'THCDoubleStorage)
+
+-- | c_newWithSize3 :  state    -> THCStorage *
+foreign import ccall "THCStorage.h THCudaDoubleStorage_newWithSize3"
+  c_newWithSize3 :: Ptr C'THCState -> CDouble -> CDouble -> CDouble -> IO (Ptr C'THCDoubleStorage)
+
+-- | c_newWithSize4 :  state     -> THCStorage *
+foreign import ccall "THCStorage.h THCudaDoubleStorage_newWithSize4"
+  c_newWithSize4 :: Ptr C'THCState -> CDouble -> CDouble -> CDouble -> CDouble -> IO (Ptr C'THCDoubleStorage)
+
+-- | c_newWithMapping :  state filename size shared -> THCStorage *
+foreign import ccall "THCStorage.h THCudaDoubleStorage_newWithMapping"
+  c_newWithMapping :: Ptr C'THCState -> Ptr CChar -> CPtrdiff -> CInt -> IO (Ptr C'THCDoubleStorage)
+
+-- | c_newWithData :  state data size -> THCStorage *
+foreign import ccall "THCStorage.h THCudaDoubleStorage_newWithData"
+  c_newWithData :: Ptr C'THCState -> Ptr CDouble -> CPtrdiff -> IO (Ptr C'THCDoubleStorage)
+
+-- | c_setFlag :  state storage flag -> void
+foreign import ccall "THCStorage.h THCudaDoubleStorage_setFlag"
+  c_setFlag :: Ptr C'THCState -> Ptr C'THCDoubleStorage -> CChar -> IO ()
+
+-- | c_clearFlag :  state storage flag -> void
+foreign import ccall "THCStorage.h THCudaDoubleStorage_clearFlag"
+  c_clearFlag :: Ptr C'THCState -> Ptr C'THCDoubleStorage -> CChar -> IO ()
+
+-- | c_retain :  state storage -> void
+foreign import ccall "THCStorage.h THCudaDoubleStorage_retain"
+  c_retain :: Ptr C'THCState -> Ptr C'THCDoubleStorage -> IO ()
+
+-- | c_free :  state storage -> void
+foreign import ccall "THCStorage.h THCudaDoubleStorage_free"
+  c_free :: Ptr C'THCState -> Ptr C'THCDoubleStorage -> IO ()
+
+-- | c_resize :  state storage size -> void
+foreign import ccall "THCStorage.h THCudaDoubleStorage_resize"
+  c_resize :: Ptr C'THCState -> Ptr C'THCDoubleStorage -> CPtrdiff -> IO ()
+
+-- | c_fill :  state storage value -> void
+foreign import ccall "THCStorage.h THCudaDoubleStorage_fill"
+  c_fill :: Ptr C'THCState -> Ptr C'THCDoubleStorage -> CDouble -> IO ()
+
+-- | c_getDevice :  state storage -> int
+foreign import ccall "THCStorage.h THCudaDoubleStorage_getDevice"
+  c_getDevice :: Ptr C'THCState -> Ptr C'THCDoubleStorage -> IO CInt
+
+-- | p_data : Pointer to function : state  -> real *
+foreign import ccall "THCStorage.h &THCudaDoubleStorage_data"
+  p_data :: FunPtr (Ptr C'THCState -> Ptr C'THCDoubleStorage -> IO (Ptr CDouble))
+
+-- | p_size : Pointer to function : state  -> ptrdiff_t
+foreign import ccall "THCStorage.h &THCudaDoubleStorage_size"
+  p_size :: FunPtr (Ptr C'THCState -> Ptr C'THCDoubleStorage -> IO CPtrdiff)
+
+-- | p_set : Pointer to function : state    -> void
+foreign import ccall "THCStorage.h &THCudaDoubleStorage_set"
+  p_set :: FunPtr (Ptr C'THCState -> Ptr C'THCDoubleStorage -> CPtrdiff -> CDouble -> IO ())
+
+-- | p_get : Pointer to function : state   -> real
+foreign import ccall "THCStorage.h &THCudaDoubleStorage_get"
+  p_get :: FunPtr (Ptr C'THCState -> Ptr C'THCDoubleStorage -> CPtrdiff -> IO CDouble)
+
+-- | p_new : Pointer to function : state -> THCStorage *
+foreign import ccall "THCStorage.h &THCudaDoubleStorage_new"
+  p_new :: FunPtr (Ptr C'THCState -> IO (Ptr C'THCDoubleStorage))
+
+-- | p_newWithSize : Pointer to function : state size -> THCStorage *
+foreign import ccall "THCStorage.h &THCudaDoubleStorage_newWithSize"
+  p_newWithSize :: FunPtr (Ptr C'THCState -> CPtrdiff -> IO (Ptr C'THCDoubleStorage))
+
+-- | p_newWithSize1 : Pointer to function : state  -> THCStorage *
+foreign import ccall "THCStorage.h &THCudaDoubleStorage_newWithSize1"
+  p_newWithSize1 :: FunPtr (Ptr C'THCState -> CDouble -> IO (Ptr C'THCDoubleStorage))
+
+-- | p_newWithSize2 : Pointer to function : state   -> THCStorage *
+foreign import ccall "THCStorage.h &THCudaDoubleStorage_newWithSize2"
+  p_newWithSize2 :: FunPtr (Ptr C'THCState -> CDouble -> CDouble -> IO (Ptr C'THCDoubleStorage))
+
+-- | p_newWithSize3 : Pointer to function : state    -> THCStorage *
+foreign import ccall "THCStorage.h &THCudaDoubleStorage_newWithSize3"
+  p_newWithSize3 :: FunPtr (Ptr C'THCState -> CDouble -> CDouble -> CDouble -> IO (Ptr C'THCDoubleStorage))
+
+-- | p_newWithSize4 : Pointer to function : state     -> THCStorage *
+foreign import ccall "THCStorage.h &THCudaDoubleStorage_newWithSize4"
+  p_newWithSize4 :: FunPtr (Ptr C'THCState -> CDouble -> CDouble -> CDouble -> CDouble -> IO (Ptr C'THCDoubleStorage))
+
+-- | p_newWithMapping : Pointer to function : state filename size shared -> THCStorage *
+foreign import ccall "THCStorage.h &THCudaDoubleStorage_newWithMapping"
+  p_newWithMapping :: FunPtr (Ptr C'THCState -> Ptr CChar -> CPtrdiff -> CInt -> IO (Ptr C'THCDoubleStorage))
+
+-- | p_newWithData : Pointer to function : state data size -> THCStorage *
+foreign import ccall "THCStorage.h &THCudaDoubleStorage_newWithData"
+  p_newWithData :: FunPtr (Ptr C'THCState -> Ptr CDouble -> CPtrdiff -> IO (Ptr C'THCDoubleStorage))
+
+-- | p_setFlag : Pointer to function : state storage flag -> void
+foreign import ccall "THCStorage.h &THCudaDoubleStorage_setFlag"
+  p_setFlag :: FunPtr (Ptr C'THCState -> Ptr C'THCDoubleStorage -> CChar -> IO ())
+
+-- | p_clearFlag : Pointer to function : state storage flag -> void
+foreign import ccall "THCStorage.h &THCudaDoubleStorage_clearFlag"
+  p_clearFlag :: FunPtr (Ptr C'THCState -> Ptr C'THCDoubleStorage -> CChar -> IO ())
+
+-- | p_retain : Pointer to function : state storage -> void
+foreign import ccall "THCStorage.h &THCudaDoubleStorage_retain"
+  p_retain :: FunPtr (Ptr C'THCState -> Ptr C'THCDoubleStorage -> IO ())
+
+-- | p_free : Pointer to function : state storage -> void
+foreign import ccall "THCStorage.h &THCudaDoubleStorage_free"
+  p_free :: FunPtr (Ptr C'THCState -> Ptr C'THCDoubleStorage -> IO ())
+
+-- | p_resize : Pointer to function : state storage size -> void
+foreign import ccall "THCStorage.h &THCudaDoubleStorage_resize"
+  p_resize :: FunPtr (Ptr C'THCState -> Ptr C'THCDoubleStorage -> CPtrdiff -> IO ())
+
+-- | p_fill : Pointer to function : state storage value -> void
+foreign import ccall "THCStorage.h &THCudaDoubleStorage_fill"
+  p_fill :: FunPtr (Ptr C'THCState -> Ptr C'THCDoubleStorage -> CDouble -> IO ())
+
+-- | p_getDevice : Pointer to function : state storage -> int
+foreign import ccall "THCStorage.h &THCudaDoubleStorage_getDevice"
+  p_getDevice :: FunPtr (Ptr C'THCState -> Ptr C'THCDoubleStorage -> IO CInt)
diff --git a/src/Torch/FFI/THC/Double/StorageCopy.hs b/src/Torch/FFI/THC/Double/StorageCopy.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Double/StorageCopy.hs
@@ -0,0 +1,113 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Double.StorageCopy where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_rawCopy :  state storage src -> void
+foreign import ccall "THCStorageCopy.h THCudaDoubleStorage_rawCopy"
+  c_rawCopy :: Ptr C'THCState -> Ptr C'THCDoubleStorage -> Ptr CDouble -> IO ()
+
+-- | c_copy :  state storage src -> void
+foreign import ccall "THCStorageCopy.h THCudaDoubleStorage_copy"
+  c_copy :: Ptr C'THCState -> Ptr C'THCDoubleStorage -> Ptr C'THCDoubleStorage -> IO ()
+
+-- | c_copyByte :  state storage src -> void
+foreign import ccall "THCStorageCopy.h THCudaDoubleStorage_copyByte"
+  c_copyByte :: Ptr C'THCState -> Ptr C'THCDoubleStorage -> Ptr C'THByteStorage -> IO ()
+
+-- | c_copyChar :  state storage src -> void
+foreign import ccall "THCStorageCopy.h THCudaDoubleStorage_copyChar"
+  c_copyChar :: Ptr C'THCState -> Ptr C'THCDoubleStorage -> Ptr C'THCharStorage -> IO ()
+
+-- | c_copyShort :  state storage src -> void
+foreign import ccall "THCStorageCopy.h THCudaDoubleStorage_copyShort"
+  c_copyShort :: Ptr C'THCState -> Ptr C'THCDoubleStorage -> Ptr C'THShortStorage -> IO ()
+
+-- | c_copyInt :  state storage src -> void
+foreign import ccall "THCStorageCopy.h THCudaDoubleStorage_copyInt"
+  c_copyInt :: Ptr C'THCState -> Ptr C'THCDoubleStorage -> Ptr C'THIntStorage -> IO ()
+
+-- | c_copyLong :  state storage src -> void
+foreign import ccall "THCStorageCopy.h THCudaDoubleStorage_copyLong"
+  c_copyLong :: Ptr C'THCState -> Ptr C'THCDoubleStorage -> Ptr C'THLongStorage -> IO ()
+
+-- | c_copyFloat :  state storage src -> void
+foreign import ccall "THCStorageCopy.h THCudaDoubleStorage_copyFloat"
+  c_copyFloat :: Ptr C'THCState -> Ptr C'THCDoubleStorage -> Ptr C'THFloatStorage -> IO ()
+
+-- | c_copyDouble :  state storage src -> void
+foreign import ccall "THCStorageCopy.h THCudaDoubleStorage_copyDouble"
+  c_copyDouble :: Ptr C'THCState -> Ptr C'THCDoubleStorage -> Ptr C'THDoubleStorage -> IO ()
+
+-- | c_copyHalf :  state storage src -> void
+foreign import ccall "THCStorageCopy.h THCudaDoubleStorage_copyHalf"
+  c_copyHalf :: Ptr C'THCState -> Ptr C'THCDoubleStorage -> Ptr C'THHalfStorage -> IO ()
+
+-- | c_thCopyCuda :  state self src -> void
+foreign import ccall "THCStorageCopy.h THDoubleStorage_copyCuda"
+  c_thCopyCuda :: Ptr C'THCState -> Ptr C'THDoubleStorage -> Ptr C'THCDoubleStorage -> IO ()
+
+-- | c_copyCuda :  state self src -> void
+foreign import ccall "THCStorageCopy.h THCudaDoubleStorage_copyCuda"
+  c_copyCuda :: Ptr C'THCState -> Ptr C'THCDoubleStorage -> Ptr C'THCDoubleStorage -> IO ()
+
+-- | c_copyCPU :  state self src -> void
+foreign import ccall "THCStorageCopy.h THCudaDoubleStorage_copyCPU"
+  c_copyCPU :: Ptr C'THCState -> Ptr C'THCDoubleStorage -> Ptr C'THDoubleStorage -> IO ()
+
+-- | p_rawCopy : Pointer to function : state storage src -> void
+foreign import ccall "THCStorageCopy.h &THCudaDoubleStorage_rawCopy"
+  p_rawCopy :: FunPtr (Ptr C'THCState -> Ptr C'THCDoubleStorage -> Ptr CDouble -> IO ())
+
+-- | p_copy : Pointer to function : state storage src -> void
+foreign import ccall "THCStorageCopy.h &THCudaDoubleStorage_copy"
+  p_copy :: FunPtr (Ptr C'THCState -> Ptr C'THCDoubleStorage -> Ptr C'THCDoubleStorage -> IO ())
+
+-- | p_copyByte : Pointer to function : state storage src -> void
+foreign import ccall "THCStorageCopy.h &THCudaDoubleStorage_copyByte"
+  p_copyByte :: FunPtr (Ptr C'THCState -> Ptr C'THCDoubleStorage -> Ptr C'THByteStorage -> IO ())
+
+-- | p_copyChar : Pointer to function : state storage src -> void
+foreign import ccall "THCStorageCopy.h &THCudaDoubleStorage_copyChar"
+  p_copyChar :: FunPtr (Ptr C'THCState -> Ptr C'THCDoubleStorage -> Ptr C'THCharStorage -> IO ())
+
+-- | p_copyShort : Pointer to function : state storage src -> void
+foreign import ccall "THCStorageCopy.h &THCudaDoubleStorage_copyShort"
+  p_copyShort :: FunPtr (Ptr C'THCState -> Ptr C'THCDoubleStorage -> Ptr C'THShortStorage -> IO ())
+
+-- | p_copyInt : Pointer to function : state storage src -> void
+foreign import ccall "THCStorageCopy.h &THCudaDoubleStorage_copyInt"
+  p_copyInt :: FunPtr (Ptr C'THCState -> Ptr C'THCDoubleStorage -> Ptr C'THIntStorage -> IO ())
+
+-- | p_copyLong : Pointer to function : state storage src -> void
+foreign import ccall "THCStorageCopy.h &THCudaDoubleStorage_copyLong"
+  p_copyLong :: FunPtr (Ptr C'THCState -> Ptr C'THCDoubleStorage -> Ptr C'THLongStorage -> IO ())
+
+-- | p_copyFloat : Pointer to function : state storage src -> void
+foreign import ccall "THCStorageCopy.h &THCudaDoubleStorage_copyFloat"
+  p_copyFloat :: FunPtr (Ptr C'THCState -> Ptr C'THCDoubleStorage -> Ptr C'THFloatStorage -> IO ())
+
+-- | p_copyDouble : Pointer to function : state storage src -> void
+foreign import ccall "THCStorageCopy.h &THCudaDoubleStorage_copyDouble"
+  p_copyDouble :: FunPtr (Ptr C'THCState -> Ptr C'THCDoubleStorage -> Ptr C'THDoubleStorage -> IO ())
+
+-- | p_copyHalf : Pointer to function : state storage src -> void
+foreign import ccall "THCStorageCopy.h &THCudaDoubleStorage_copyHalf"
+  p_copyHalf :: FunPtr (Ptr C'THCState -> Ptr C'THCDoubleStorage -> Ptr C'THHalfStorage -> IO ())
+
+-- | p_thCopyCuda : Pointer to function : state self src -> void
+foreign import ccall "THCStorageCopy.h &THDoubleStorage_copyCuda"
+  p_thCopyCuda :: FunPtr (Ptr C'THCState -> Ptr C'THDoubleStorage -> Ptr C'THCDoubleStorage -> IO ())
+
+-- | p_copyCuda : Pointer to function : state self src -> void
+foreign import ccall "THCStorageCopy.h &THCudaDoubleStorage_copyCuda"
+  p_copyCuda :: FunPtr (Ptr C'THCState -> Ptr C'THCDoubleStorage -> Ptr C'THCDoubleStorage -> IO ())
+
+-- | p_copyCPU : Pointer to function : state self src -> void
+foreign import ccall "THCStorageCopy.h &THCudaDoubleStorage_copyCPU"
+  p_copyCPU :: FunPtr (Ptr C'THCState -> Ptr C'THCDoubleStorage -> Ptr C'THDoubleStorage -> IO ())
diff --git a/src/Torch/FFI/THC/Double/Tensor.hs b/src/Torch/FFI/THC/Double/Tensor.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Double/Tensor.hs
@@ -0,0 +1,593 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Double.Tensor where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_storage :  state self -> THCStorage *
+foreign import ccall "THCTensor.h THCudaDoubleTensor_storage"
+  c_storage :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> IO (Ptr C'THCDoubleStorage)
+
+-- | c_storageOffset :  state self -> ptrdiff_t
+foreign import ccall "THCTensor.h THCudaDoubleTensor_storageOffset"
+  c_storageOffset :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> IO CPtrdiff
+
+-- | c_nDimension :  state self -> int
+foreign import ccall "THCTensor.h THCudaDoubleTensor_nDimension"
+  c_nDimension :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> IO CInt
+
+-- | c_size :  state self dim -> int64_t
+foreign import ccall "THCTensor.h THCudaDoubleTensor_size"
+  c_size :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> CInt -> IO CLLong
+
+-- | c_stride :  state self dim -> int64_t
+foreign import ccall "THCTensor.h THCudaDoubleTensor_stride"
+  c_stride :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> CInt -> IO CLLong
+
+-- | c_newSizeOf :  state self -> THLongStorage *
+foreign import ccall "THCTensor.h THCudaDoubleTensor_newSizeOf"
+  c_newSizeOf :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> IO (Ptr C'THLongStorage)
+
+-- | c_newStrideOf :  state self -> THLongStorage *
+foreign import ccall "THCTensor.h THCudaDoubleTensor_newStrideOf"
+  c_newStrideOf :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> IO (Ptr C'THLongStorage)
+
+-- | c_data :  state self -> real *
+foreign import ccall "THCTensor.h THCudaDoubleTensor_data"
+  c_data :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> IO (Ptr CDouble)
+
+-- | c_setFlag :  state self flag -> void
+foreign import ccall "THCTensor.h THCudaDoubleTensor_setFlag"
+  c_setFlag :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> CChar -> IO ()
+
+-- | c_clearFlag :  state self flag -> void
+foreign import ccall "THCTensor.h THCudaDoubleTensor_clearFlag"
+  c_clearFlag :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> CChar -> IO ()
+
+-- | c_new :  state -> THCTensor *
+foreign import ccall "THCTensor.h THCudaDoubleTensor_new"
+  c_new :: Ptr C'THCState -> IO (Ptr C'THCudaDoubleTensor)
+
+-- | c_newWithTensor :  state tensor -> THCTensor *
+foreign import ccall "THCTensor.h THCudaDoubleTensor_newWithTensor"
+  c_newWithTensor :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> IO (Ptr C'THCudaDoubleTensor)
+
+-- | c_newWithStorage :  state storage_ storageOffset_ size_ stride_ -> THCTensor *
+foreign import ccall "THCTensor.h THCudaDoubleTensor_newWithStorage"
+  c_newWithStorage :: Ptr C'THCState -> Ptr C'THCDoubleStorage -> CPtrdiff -> Ptr C'THLongStorage -> Ptr C'THLongStorage -> IO (Ptr C'THCudaDoubleTensor)
+
+-- | c_newWithStorage1d :  state storage_ storageOffset_ size0_ stride0_ -> THCTensor *
+foreign import ccall "THCTensor.h THCudaDoubleTensor_newWithStorage1d"
+  c_newWithStorage1d :: Ptr C'THCState -> Ptr C'THCDoubleStorage -> CPtrdiff -> CLLong -> CLLong -> IO (Ptr C'THCudaDoubleTensor)
+
+-- | c_newWithStorage2d :  state storage_ storageOffset_ size0_ stride0_ size1_ stride1_ -> THCTensor *
+foreign import ccall "THCTensor.h THCudaDoubleTensor_newWithStorage2d"
+  c_newWithStorage2d :: Ptr C'THCState -> Ptr C'THCDoubleStorage -> CPtrdiff -> CLLong -> CLLong -> CLLong -> CLLong -> IO (Ptr C'THCudaDoubleTensor)
+
+-- | c_newWithStorage3d :  state storage_ storageOffset_ size0_ stride0_ size1_ stride1_ size2_ stride2_ -> THCTensor *
+foreign import ccall "THCTensor.h THCudaDoubleTensor_newWithStorage3d"
+  c_newWithStorage3d :: Ptr C'THCState -> Ptr C'THCDoubleStorage -> CPtrdiff -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> IO (Ptr C'THCudaDoubleTensor)
+
+-- | c_newWithStorage4d :  state storage_ storageOffset_ size0_ stride0_ size1_ stride1_ size2_ stride2_ size3_ stride3_ -> THCTensor *
+foreign import ccall "THCTensor.h THCudaDoubleTensor_newWithStorage4d"
+  c_newWithStorage4d :: Ptr C'THCState -> Ptr C'THCDoubleStorage -> CPtrdiff -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> IO (Ptr C'THCudaDoubleTensor)
+
+-- | c_newWithSize :  state size_ stride_ -> THCTensor *
+foreign import ccall "THCTensor.h THCudaDoubleTensor_newWithSize"
+  c_newWithSize :: Ptr C'THCState -> Ptr C'THLongStorage -> Ptr C'THLongStorage -> IO (Ptr C'THCudaDoubleTensor)
+
+-- | c_newWithSize1d :  state size0_ -> THCTensor *
+foreign import ccall "THCTensor.h THCudaDoubleTensor_newWithSize1d"
+  c_newWithSize1d :: Ptr C'THCState -> CLLong -> IO (Ptr C'THCudaDoubleTensor)
+
+-- | c_newWithSize2d :  state size0_ size1_ -> THCTensor *
+foreign import ccall "THCTensor.h THCudaDoubleTensor_newWithSize2d"
+  c_newWithSize2d :: Ptr C'THCState -> CLLong -> CLLong -> IO (Ptr C'THCudaDoubleTensor)
+
+-- | c_newWithSize3d :  state size0_ size1_ size2_ -> THCTensor *
+foreign import ccall "THCTensor.h THCudaDoubleTensor_newWithSize3d"
+  c_newWithSize3d :: Ptr C'THCState -> CLLong -> CLLong -> CLLong -> IO (Ptr C'THCudaDoubleTensor)
+
+-- | c_newWithSize4d :  state size0_ size1_ size2_ size3_ -> THCTensor *
+foreign import ccall "THCTensor.h THCudaDoubleTensor_newWithSize4d"
+  c_newWithSize4d :: Ptr C'THCState -> CLLong -> CLLong -> CLLong -> CLLong -> IO (Ptr C'THCudaDoubleTensor)
+
+-- | c_newClone :  state self -> THCTensor *
+foreign import ccall "THCTensor.h THCudaDoubleTensor_newClone"
+  c_newClone :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> IO (Ptr C'THCudaDoubleTensor)
+
+-- | c_newContiguous :  state tensor -> THCTensor *
+foreign import ccall "THCTensor.h THCudaDoubleTensor_newContiguous"
+  c_newContiguous :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> IO (Ptr C'THCudaDoubleTensor)
+
+-- | c_newSelect :  state tensor dimension_ sliceIndex_ -> THCTensor *
+foreign import ccall "THCTensor.h THCudaDoubleTensor_newSelect"
+  c_newSelect :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> CInt -> CLLong -> IO (Ptr C'THCudaDoubleTensor)
+
+-- | c_newNarrow :  state tensor dimension_ firstIndex_ size_ -> THCTensor *
+foreign import ccall "THCTensor.h THCudaDoubleTensor_newNarrow"
+  c_newNarrow :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> CInt -> CLLong -> CLLong -> IO (Ptr C'THCudaDoubleTensor)
+
+-- | c_newTranspose :  state tensor dimension1_ dimension2_ -> THCTensor *
+foreign import ccall "THCTensor.h THCudaDoubleTensor_newTranspose"
+  c_newTranspose :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> IO (Ptr C'THCudaDoubleTensor)
+
+-- | c_newUnfold :  state tensor dimension_ size_ step_ -> THCTensor *
+foreign import ccall "THCTensor.h THCudaDoubleTensor_newUnfold"
+  c_newUnfold :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> CInt -> CLLong -> CLLong -> IO (Ptr C'THCudaDoubleTensor)
+
+-- | c_newView :  state tensor size -> THCTensor *
+foreign import ccall "THCTensor.h THCudaDoubleTensor_newView"
+  c_newView :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THLongStorage -> IO (Ptr C'THCudaDoubleTensor)
+
+-- | c_newFoldBatchDim :  state input -> THCTensor *
+foreign import ccall "THCTensor.h THCudaDoubleTensor_newFoldBatchDim"
+  c_newFoldBatchDim :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> IO (Ptr C'THCudaDoubleTensor)
+
+-- | c_newExpand :  state tensor size -> THCTensor *
+foreign import ccall "THCTensor.h THCudaDoubleTensor_newExpand"
+  c_newExpand :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THLongStorage -> IO (Ptr C'THCudaDoubleTensor)
+
+-- | c_expand :  state r tensor sizes -> void
+foreign import ccall "THCTensor.h THCudaDoubleTensor_expand"
+  c_expand :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THLongStorage -> IO ()
+
+-- | c_expandNd :  state rets ops count -> void
+foreign import ccall "THCTensor.h THCudaDoubleTensor_expandNd"
+  c_expandNd :: Ptr C'THCState -> Ptr (Ptr C'THCudaDoubleTensor) -> Ptr (Ptr C'THCudaDoubleTensor) -> CInt -> IO ()
+
+-- | c_resize :  state tensor size stride -> void
+foreign import ccall "THCTensor.h THCudaDoubleTensor_resize"
+  c_resize :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THLongStorage -> Ptr C'THLongStorage -> IO ()
+
+-- | c_resizeAs :  state tensor src -> void
+foreign import ccall "THCTensor.h THCudaDoubleTensor_resizeAs"
+  c_resizeAs :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_resize1d :  state tensor size0_ -> void
+foreign import ccall "THCTensor.h THCudaDoubleTensor_resize1d"
+  c_resize1d :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> CLLong -> IO ()
+
+-- | c_resize2d :  state tensor size0_ size1_ -> void
+foreign import ccall "THCTensor.h THCudaDoubleTensor_resize2d"
+  c_resize2d :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> CLLong -> CLLong -> IO ()
+
+-- | c_resize3d :  state tensor size0_ size1_ size2_ -> void
+foreign import ccall "THCTensor.h THCudaDoubleTensor_resize3d"
+  c_resize3d :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> CLLong -> CLLong -> CLLong -> IO ()
+
+-- | c_resize4d :  state tensor size0_ size1_ size2_ size3_ -> void
+foreign import ccall "THCTensor.h THCudaDoubleTensor_resize4d"
+  c_resize4d :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> CLLong -> CLLong -> CLLong -> CLLong -> IO ()
+
+-- | c_resize5d :  state tensor size0_ size1_ size2_ size3_ size4_ -> void
+foreign import ccall "THCTensor.h THCudaDoubleTensor_resize5d"
+  c_resize5d :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> IO ()
+
+-- | c_resizeNd :  state tensor nDimension size stride -> void
+foreign import ccall "THCTensor.h THCudaDoubleTensor_resizeNd"
+  c_resizeNd :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> CInt -> Ptr CLLong -> Ptr CLLong -> IO ()
+
+-- | c_set :  state self src -> void
+foreign import ccall "THCTensor.h THCudaDoubleTensor_set"
+  c_set :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_setStorage :  state self storage_ storageOffset_ size_ stride_ -> void
+foreign import ccall "THCTensor.h THCudaDoubleTensor_setStorage"
+  c_setStorage :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCDoubleStorage -> CPtrdiff -> Ptr C'THLongStorage -> Ptr C'THLongStorage -> IO ()
+
+-- | c_setStorageNd :  state self storage storageOffset nDimension size stride -> void
+foreign import ccall "THCTensor.h THCudaDoubleTensor_setStorageNd"
+  c_setStorageNd :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCDoubleStorage -> CPtrdiff -> CInt -> Ptr CLLong -> Ptr CLLong -> IO ()
+
+-- | c_setStorage1d :  state self storage_ storageOffset_ size0_ stride0_ -> void
+foreign import ccall "THCTensor.h THCudaDoubleTensor_setStorage1d"
+  c_setStorage1d :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCDoubleStorage -> CPtrdiff -> CLLong -> CLLong -> IO ()
+
+-- | c_setStorage2d :  state self storage_ storageOffset_ size0_ stride0_ size1_ stride1_ -> void
+foreign import ccall "THCTensor.h THCudaDoubleTensor_setStorage2d"
+  c_setStorage2d :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCDoubleStorage -> CPtrdiff -> CLLong -> CLLong -> CLLong -> CLLong -> IO ()
+
+-- | c_setStorage3d :  state self storage_ storageOffset_ size0_ stride0_ size1_ stride1_ size2_ stride2_ -> void
+foreign import ccall "THCTensor.h THCudaDoubleTensor_setStorage3d"
+  c_setStorage3d :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCDoubleStorage -> CPtrdiff -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> IO ()
+
+-- | c_setStorage4d :  state self storage_ storageOffset_ size0_ stride0_ size1_ stride1_ size2_ stride2_ size3_ stride3_ -> void
+foreign import ccall "THCTensor.h THCudaDoubleTensor_setStorage4d"
+  c_setStorage4d :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCDoubleStorage -> CPtrdiff -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> IO ()
+
+-- | c_narrow :  state self src dimension_ firstIndex_ size_ -> void
+foreign import ccall "THCTensor.h THCudaDoubleTensor_narrow"
+  c_narrow :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CLLong -> CLLong -> IO ()
+
+-- | c_select :  state self src dimension_ sliceIndex_ -> void
+foreign import ccall "THCTensor.h THCudaDoubleTensor_select"
+  c_select :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CLLong -> IO ()
+
+-- | c_transpose :  state self src dimension1_ dimension2_ -> void
+foreign import ccall "THCTensor.h THCudaDoubleTensor_transpose"
+  c_transpose :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> IO ()
+
+-- | c_unfold :  state self src dimension_ size_ step_ -> void
+foreign import ccall "THCTensor.h THCudaDoubleTensor_unfold"
+  c_unfold :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CLLong -> CLLong -> IO ()
+
+-- | c_squeeze :  state self src -> void
+foreign import ccall "THCTensor.h THCudaDoubleTensor_squeeze"
+  c_squeeze :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_squeeze1d :  state self src dimension_ -> void
+foreign import ccall "THCTensor.h THCudaDoubleTensor_squeeze1d"
+  c_squeeze1d :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> IO ()
+
+-- | c_unsqueeze1d :  state self src dimension_ -> void
+foreign import ccall "THCTensor.h THCudaDoubleTensor_unsqueeze1d"
+  c_unsqueeze1d :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> IO ()
+
+-- | c_isContiguous :  state self -> int
+foreign import ccall "THCTensor.h THCudaDoubleTensor_isContiguous"
+  c_isContiguous :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> IO CInt
+
+-- | c_isSameSizeAs :  state self src -> int
+foreign import ccall "THCTensor.h THCudaDoubleTensor_isSameSizeAs"
+  c_isSameSizeAs :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO CInt
+
+-- | c_isSetTo :  state self src -> int
+foreign import ccall "THCTensor.h THCudaDoubleTensor_isSetTo"
+  c_isSetTo :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO CInt
+
+-- | c_isSize :  state self dims -> int
+foreign import ccall "THCTensor.h THCudaDoubleTensor_isSize"
+  c_isSize :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THLongStorage -> IO CInt
+
+-- | c_nElement :  state self -> ptrdiff_t
+foreign import ccall "THCTensor.h THCudaDoubleTensor_nElement"
+  c_nElement :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> IO CPtrdiff
+
+-- | c_retain :  state self -> void
+foreign import ccall "THCTensor.h THCudaDoubleTensor_retain"
+  c_retain :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_free :  state self -> void
+foreign import ccall "THCTensor.h THCudaDoubleTensor_free"
+  c_free :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_freeCopyTo :  state self dst -> void
+foreign import ccall "THCTensor.h THCudaDoubleTensor_freeCopyTo"
+  c_freeCopyTo :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_set1d :  state tensor x0 value -> void
+foreign import ccall "THCTensor.h THCudaDoubleTensor_set1d"
+  c_set1d :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> CLLong -> CDouble -> IO ()
+
+-- | c_set2d :  state tensor x0 x1 value -> void
+foreign import ccall "THCTensor.h THCudaDoubleTensor_set2d"
+  c_set2d :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> CLLong -> CLLong -> CDouble -> IO ()
+
+-- | c_set3d :  state tensor x0 x1 x2 value -> void
+foreign import ccall "THCTensor.h THCudaDoubleTensor_set3d"
+  c_set3d :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> CLLong -> CLLong -> CLLong -> CDouble -> IO ()
+
+-- | c_set4d :  state tensor x0 x1 x2 x3 value -> void
+foreign import ccall "THCTensor.h THCudaDoubleTensor_set4d"
+  c_set4d :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> CLLong -> CLLong -> CLLong -> CLLong -> CDouble -> IO ()
+
+-- | c_get1d :  state tensor x0 -> real
+foreign import ccall "THCTensor.h THCudaDoubleTensor_get1d"
+  c_get1d :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> CLLong -> IO CDouble
+
+-- | c_get2d :  state tensor x0 x1 -> real
+foreign import ccall "THCTensor.h THCudaDoubleTensor_get2d"
+  c_get2d :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> CLLong -> CLLong -> IO CDouble
+
+-- | c_get3d :  state tensor x0 x1 x2 -> real
+foreign import ccall "THCTensor.h THCudaDoubleTensor_get3d"
+  c_get3d :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> CLLong -> CLLong -> CLLong -> IO CDouble
+
+-- | c_get4d :  state tensor x0 x1 x2 x3 -> real
+foreign import ccall "THCTensor.h THCudaDoubleTensor_get4d"
+  c_get4d :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> CLLong -> CLLong -> CLLong -> CLLong -> IO CDouble
+
+-- | c_getDevice :  state self -> int
+foreign import ccall "THCTensor.h THCudaDoubleTensor_getDevice"
+  c_getDevice :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> IO CInt
+
+-- | c_sizeDesc :  state tensor -> THCDescBuff
+foreign import ccall "THCTensor.h THCudaDoubleTensor_sizeDesc"
+  c_sizeDesc :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> IO (Ptr C'THCDescBuff)
+
+-- | p_storage : Pointer to function : state self -> THCStorage *
+foreign import ccall "THCTensor.h &THCudaDoubleTensor_storage"
+  p_storage :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> IO (Ptr C'THCDoubleStorage))
+
+-- | p_storageOffset : Pointer to function : state self -> ptrdiff_t
+foreign import ccall "THCTensor.h &THCudaDoubleTensor_storageOffset"
+  p_storageOffset :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> IO CPtrdiff)
+
+-- | p_nDimension : Pointer to function : state self -> int
+foreign import ccall "THCTensor.h &THCudaDoubleTensor_nDimension"
+  p_nDimension :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> IO CInt)
+
+-- | p_size : Pointer to function : state self dim -> int64_t
+foreign import ccall "THCTensor.h &THCudaDoubleTensor_size"
+  p_size :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> CInt -> IO CLLong)
+
+-- | p_stride : Pointer to function : state self dim -> int64_t
+foreign import ccall "THCTensor.h &THCudaDoubleTensor_stride"
+  p_stride :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> CInt -> IO CLLong)
+
+-- | p_newSizeOf : Pointer to function : state self -> THLongStorage *
+foreign import ccall "THCTensor.h &THCudaDoubleTensor_newSizeOf"
+  p_newSizeOf :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> IO (Ptr C'THLongStorage))
+
+-- | p_newStrideOf : Pointer to function : state self -> THLongStorage *
+foreign import ccall "THCTensor.h &THCudaDoubleTensor_newStrideOf"
+  p_newStrideOf :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> IO (Ptr C'THLongStorage))
+
+-- | p_data : Pointer to function : state self -> real *
+foreign import ccall "THCTensor.h &THCudaDoubleTensor_data"
+  p_data :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> IO (Ptr CDouble))
+
+-- | p_setFlag : Pointer to function : state self flag -> void
+foreign import ccall "THCTensor.h &THCudaDoubleTensor_setFlag"
+  p_setFlag :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> CChar -> IO ())
+
+-- | p_clearFlag : Pointer to function : state self flag -> void
+foreign import ccall "THCTensor.h &THCudaDoubleTensor_clearFlag"
+  p_clearFlag :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> CChar -> IO ())
+
+-- | p_new : Pointer to function : state -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaDoubleTensor_new"
+  p_new :: FunPtr (Ptr C'THCState -> IO (Ptr C'THCudaDoubleTensor))
+
+-- | p_newWithTensor : Pointer to function : state tensor -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaDoubleTensor_newWithTensor"
+  p_newWithTensor :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> IO (Ptr C'THCudaDoubleTensor))
+
+-- | p_newWithStorage : Pointer to function : state storage_ storageOffset_ size_ stride_ -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaDoubleTensor_newWithStorage"
+  p_newWithStorage :: FunPtr (Ptr C'THCState -> Ptr C'THCDoubleStorage -> CPtrdiff -> Ptr C'THLongStorage -> Ptr C'THLongStorage -> IO (Ptr C'THCudaDoubleTensor))
+
+-- | p_newWithStorage1d : Pointer to function : state storage_ storageOffset_ size0_ stride0_ -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaDoubleTensor_newWithStorage1d"
+  p_newWithStorage1d :: FunPtr (Ptr C'THCState -> Ptr C'THCDoubleStorage -> CPtrdiff -> CLLong -> CLLong -> IO (Ptr C'THCudaDoubleTensor))
+
+-- | p_newWithStorage2d : Pointer to function : state storage_ storageOffset_ size0_ stride0_ size1_ stride1_ -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaDoubleTensor_newWithStorage2d"
+  p_newWithStorage2d :: FunPtr (Ptr C'THCState -> Ptr C'THCDoubleStorage -> CPtrdiff -> CLLong -> CLLong -> CLLong -> CLLong -> IO (Ptr C'THCudaDoubleTensor))
+
+-- | p_newWithStorage3d : Pointer to function : state storage_ storageOffset_ size0_ stride0_ size1_ stride1_ size2_ stride2_ -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaDoubleTensor_newWithStorage3d"
+  p_newWithStorage3d :: FunPtr (Ptr C'THCState -> Ptr C'THCDoubleStorage -> CPtrdiff -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> IO (Ptr C'THCudaDoubleTensor))
+
+-- | p_newWithStorage4d : Pointer to function : state storage_ storageOffset_ size0_ stride0_ size1_ stride1_ size2_ stride2_ size3_ stride3_ -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaDoubleTensor_newWithStorage4d"
+  p_newWithStorage4d :: FunPtr (Ptr C'THCState -> Ptr C'THCDoubleStorage -> CPtrdiff -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> IO (Ptr C'THCudaDoubleTensor))
+
+-- | p_newWithSize : Pointer to function : state size_ stride_ -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaDoubleTensor_newWithSize"
+  p_newWithSize :: FunPtr (Ptr C'THCState -> Ptr C'THLongStorage -> Ptr C'THLongStorage -> IO (Ptr C'THCudaDoubleTensor))
+
+-- | p_newWithSize1d : Pointer to function : state size0_ -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaDoubleTensor_newWithSize1d"
+  p_newWithSize1d :: FunPtr (Ptr C'THCState -> CLLong -> IO (Ptr C'THCudaDoubleTensor))
+
+-- | p_newWithSize2d : Pointer to function : state size0_ size1_ -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaDoubleTensor_newWithSize2d"
+  p_newWithSize2d :: FunPtr (Ptr C'THCState -> CLLong -> CLLong -> IO (Ptr C'THCudaDoubleTensor))
+
+-- | p_newWithSize3d : Pointer to function : state size0_ size1_ size2_ -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaDoubleTensor_newWithSize3d"
+  p_newWithSize3d :: FunPtr (Ptr C'THCState -> CLLong -> CLLong -> CLLong -> IO (Ptr C'THCudaDoubleTensor))
+
+-- | p_newWithSize4d : Pointer to function : state size0_ size1_ size2_ size3_ -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaDoubleTensor_newWithSize4d"
+  p_newWithSize4d :: FunPtr (Ptr C'THCState -> CLLong -> CLLong -> CLLong -> CLLong -> IO (Ptr C'THCudaDoubleTensor))
+
+-- | p_newClone : Pointer to function : state self -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaDoubleTensor_newClone"
+  p_newClone :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> IO (Ptr C'THCudaDoubleTensor))
+
+-- | p_newContiguous : Pointer to function : state tensor -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaDoubleTensor_newContiguous"
+  p_newContiguous :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> IO (Ptr C'THCudaDoubleTensor))
+
+-- | p_newSelect : Pointer to function : state tensor dimension_ sliceIndex_ -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaDoubleTensor_newSelect"
+  p_newSelect :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> CInt -> CLLong -> IO (Ptr C'THCudaDoubleTensor))
+
+-- | p_newNarrow : Pointer to function : state tensor dimension_ firstIndex_ size_ -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaDoubleTensor_newNarrow"
+  p_newNarrow :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> CInt -> CLLong -> CLLong -> IO (Ptr C'THCudaDoubleTensor))
+
+-- | p_newTranspose : Pointer to function : state tensor dimension1_ dimension2_ -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaDoubleTensor_newTranspose"
+  p_newTranspose :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> IO (Ptr C'THCudaDoubleTensor))
+
+-- | p_newUnfold : Pointer to function : state tensor dimension_ size_ step_ -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaDoubleTensor_newUnfold"
+  p_newUnfold :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> CInt -> CLLong -> CLLong -> IO (Ptr C'THCudaDoubleTensor))
+
+-- | p_newView : Pointer to function : state tensor size -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaDoubleTensor_newView"
+  p_newView :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THLongStorage -> IO (Ptr C'THCudaDoubleTensor))
+
+-- | p_newFoldBatchDim : Pointer to function : state input -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaDoubleTensor_newFoldBatchDim"
+  p_newFoldBatchDim :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> IO (Ptr C'THCudaDoubleTensor))
+
+-- | p_newExpand : Pointer to function : state tensor size -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaDoubleTensor_newExpand"
+  p_newExpand :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THLongStorage -> IO (Ptr C'THCudaDoubleTensor))
+
+-- | p_expand : Pointer to function : state r tensor sizes -> void
+foreign import ccall "THCTensor.h &THCudaDoubleTensor_expand"
+  p_expand :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THLongStorage -> IO ())
+
+-- | p_expandNd : Pointer to function : state rets ops count -> void
+foreign import ccall "THCTensor.h &THCudaDoubleTensor_expandNd"
+  p_expandNd :: FunPtr (Ptr C'THCState -> Ptr (Ptr C'THCudaDoubleTensor) -> Ptr (Ptr C'THCudaDoubleTensor) -> CInt -> IO ())
+
+-- | p_resize : Pointer to function : state tensor size stride -> void
+foreign import ccall "THCTensor.h &THCudaDoubleTensor_resize"
+  p_resize :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THLongStorage -> Ptr C'THLongStorage -> IO ())
+
+-- | p_resizeAs : Pointer to function : state tensor src -> void
+foreign import ccall "THCTensor.h &THCudaDoubleTensor_resizeAs"
+  p_resizeAs :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_resize1d : Pointer to function : state tensor size0_ -> void
+foreign import ccall "THCTensor.h &THCudaDoubleTensor_resize1d"
+  p_resize1d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> CLLong -> IO ())
+
+-- | p_resize2d : Pointer to function : state tensor size0_ size1_ -> void
+foreign import ccall "THCTensor.h &THCudaDoubleTensor_resize2d"
+  p_resize2d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> CLLong -> CLLong -> IO ())
+
+-- | p_resize3d : Pointer to function : state tensor size0_ size1_ size2_ -> void
+foreign import ccall "THCTensor.h &THCudaDoubleTensor_resize3d"
+  p_resize3d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> CLLong -> CLLong -> CLLong -> IO ())
+
+-- | p_resize4d : Pointer to function : state tensor size0_ size1_ size2_ size3_ -> void
+foreign import ccall "THCTensor.h &THCudaDoubleTensor_resize4d"
+  p_resize4d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> CLLong -> CLLong -> CLLong -> CLLong -> IO ())
+
+-- | p_resize5d : Pointer to function : state tensor size0_ size1_ size2_ size3_ size4_ -> void
+foreign import ccall "THCTensor.h &THCudaDoubleTensor_resize5d"
+  p_resize5d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> IO ())
+
+-- | p_resizeNd : Pointer to function : state tensor nDimension size stride -> void
+foreign import ccall "THCTensor.h &THCudaDoubleTensor_resizeNd"
+  p_resizeNd :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> CInt -> Ptr CLLong -> Ptr CLLong -> IO ())
+
+-- | p_set : Pointer to function : state self src -> void
+foreign import ccall "THCTensor.h &THCudaDoubleTensor_set"
+  p_set :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_setStorage : Pointer to function : state self storage_ storageOffset_ size_ stride_ -> void
+foreign import ccall "THCTensor.h &THCudaDoubleTensor_setStorage"
+  p_setStorage :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCDoubleStorage -> CPtrdiff -> Ptr C'THLongStorage -> Ptr C'THLongStorage -> IO ())
+
+-- | p_setStorageNd : Pointer to function : state self storage storageOffset nDimension size stride -> void
+foreign import ccall "THCTensor.h &THCudaDoubleTensor_setStorageNd"
+  p_setStorageNd :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCDoubleStorage -> CPtrdiff -> CInt -> Ptr CLLong -> Ptr CLLong -> IO ())
+
+-- | p_setStorage1d : Pointer to function : state self storage_ storageOffset_ size0_ stride0_ -> void
+foreign import ccall "THCTensor.h &THCudaDoubleTensor_setStorage1d"
+  p_setStorage1d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCDoubleStorage -> CPtrdiff -> CLLong -> CLLong -> IO ())
+
+-- | p_setStorage2d : Pointer to function : state self storage_ storageOffset_ size0_ stride0_ size1_ stride1_ -> void
+foreign import ccall "THCTensor.h &THCudaDoubleTensor_setStorage2d"
+  p_setStorage2d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCDoubleStorage -> CPtrdiff -> CLLong -> CLLong -> CLLong -> CLLong -> IO ())
+
+-- | p_setStorage3d : Pointer to function : state self storage_ storageOffset_ size0_ stride0_ size1_ stride1_ size2_ stride2_ -> void
+foreign import ccall "THCTensor.h &THCudaDoubleTensor_setStorage3d"
+  p_setStorage3d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCDoubleStorage -> CPtrdiff -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> IO ())
+
+-- | p_setStorage4d : Pointer to function : state self storage_ storageOffset_ size0_ stride0_ size1_ stride1_ size2_ stride2_ size3_ stride3_ -> void
+foreign import ccall "THCTensor.h &THCudaDoubleTensor_setStorage4d"
+  p_setStorage4d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCDoubleStorage -> CPtrdiff -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> IO ())
+
+-- | p_narrow : Pointer to function : state self src dimension_ firstIndex_ size_ -> void
+foreign import ccall "THCTensor.h &THCudaDoubleTensor_narrow"
+  p_narrow :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CLLong -> CLLong -> IO ())
+
+-- | p_select : Pointer to function : state self src dimension_ sliceIndex_ -> void
+foreign import ccall "THCTensor.h &THCudaDoubleTensor_select"
+  p_select :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CLLong -> IO ())
+
+-- | p_transpose : Pointer to function : state self src dimension1_ dimension2_ -> void
+foreign import ccall "THCTensor.h &THCudaDoubleTensor_transpose"
+  p_transpose :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> IO ())
+
+-- | p_unfold : Pointer to function : state self src dimension_ size_ step_ -> void
+foreign import ccall "THCTensor.h &THCudaDoubleTensor_unfold"
+  p_unfold :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CLLong -> CLLong -> IO ())
+
+-- | p_squeeze : Pointer to function : state self src -> void
+foreign import ccall "THCTensor.h &THCudaDoubleTensor_squeeze"
+  p_squeeze :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_squeeze1d : Pointer to function : state self src dimension_ -> void
+foreign import ccall "THCTensor.h &THCudaDoubleTensor_squeeze1d"
+  p_squeeze1d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> IO ())
+
+-- | p_unsqueeze1d : Pointer to function : state self src dimension_ -> void
+foreign import ccall "THCTensor.h &THCudaDoubleTensor_unsqueeze1d"
+  p_unsqueeze1d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> IO ())
+
+-- | p_isContiguous : Pointer to function : state self -> int
+foreign import ccall "THCTensor.h &THCudaDoubleTensor_isContiguous"
+  p_isContiguous :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> IO CInt)
+
+-- | p_isSameSizeAs : Pointer to function : state self src -> int
+foreign import ccall "THCTensor.h &THCudaDoubleTensor_isSameSizeAs"
+  p_isSameSizeAs :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO CInt)
+
+-- | p_isSetTo : Pointer to function : state self src -> int
+foreign import ccall "THCTensor.h &THCudaDoubleTensor_isSetTo"
+  p_isSetTo :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO CInt)
+
+-- | p_isSize : Pointer to function : state self dims -> int
+foreign import ccall "THCTensor.h &THCudaDoubleTensor_isSize"
+  p_isSize :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THLongStorage -> IO CInt)
+
+-- | p_nElement : Pointer to function : state self -> ptrdiff_t
+foreign import ccall "THCTensor.h &THCudaDoubleTensor_nElement"
+  p_nElement :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> IO CPtrdiff)
+
+-- | p_retain : Pointer to function : state self -> void
+foreign import ccall "THCTensor.h &THCudaDoubleTensor_retain"
+  p_retain :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_free : Pointer to function : state self -> void
+foreign import ccall "THCTensor.h &THCudaDoubleTensor_free"
+  p_free :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_freeCopyTo : Pointer to function : state self dst -> void
+foreign import ccall "THCTensor.h &THCudaDoubleTensor_freeCopyTo"
+  p_freeCopyTo :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_set1d : Pointer to function : state tensor x0 value -> void
+foreign import ccall "THCTensor.h &THCudaDoubleTensor_set1d"
+  p_set1d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> CLLong -> CDouble -> IO ())
+
+-- | p_set2d : Pointer to function : state tensor x0 x1 value -> void
+foreign import ccall "THCTensor.h &THCudaDoubleTensor_set2d"
+  p_set2d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> CLLong -> CLLong -> CDouble -> IO ())
+
+-- | p_set3d : Pointer to function : state tensor x0 x1 x2 value -> void
+foreign import ccall "THCTensor.h &THCudaDoubleTensor_set3d"
+  p_set3d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> CLLong -> CLLong -> CLLong -> CDouble -> IO ())
+
+-- | p_set4d : Pointer to function : state tensor x0 x1 x2 x3 value -> void
+foreign import ccall "THCTensor.h &THCudaDoubleTensor_set4d"
+  p_set4d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> CLLong -> CLLong -> CLLong -> CLLong -> CDouble -> IO ())
+
+-- | p_get1d : Pointer to function : state tensor x0 -> real
+foreign import ccall "THCTensor.h &THCudaDoubleTensor_get1d"
+  p_get1d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> CLLong -> IO CDouble)
+
+-- | p_get2d : Pointer to function : state tensor x0 x1 -> real
+foreign import ccall "THCTensor.h &THCudaDoubleTensor_get2d"
+  p_get2d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> CLLong -> CLLong -> IO CDouble)
+
+-- | p_get3d : Pointer to function : state tensor x0 x1 x2 -> real
+foreign import ccall "THCTensor.h &THCudaDoubleTensor_get3d"
+  p_get3d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> CLLong -> CLLong -> CLLong -> IO CDouble)
+
+-- | p_get4d : Pointer to function : state tensor x0 x1 x2 x3 -> real
+foreign import ccall "THCTensor.h &THCudaDoubleTensor_get4d"
+  p_get4d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> CLLong -> CLLong -> CLLong -> CLLong -> IO CDouble)
+
+-- | p_getDevice : Pointer to function : state self -> int
+foreign import ccall "THCTensor.h &THCudaDoubleTensor_getDevice"
+  p_getDevice :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> IO CInt)
+
+-- | p_sizeDesc : Pointer to function : state tensor -> THCDescBuff
+foreign import ccall "THCTensor.h &THCudaDoubleTensor_sizeDesc"
+  p_sizeDesc :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> IO (Ptr C'THCDescBuff))
diff --git a/src/Torch/FFI/THC/Double/TensorCopy.hs b/src/Torch/FFI/THC/Double/TensorCopy.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Double/TensorCopy.hs
@@ -0,0 +1,177 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Double.TensorCopy where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_copy :  state self src -> void
+foreign import ccall "THCTensorCopy.h THCudaDoubleTensor_copy"
+  c_copy :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_copyIgnoringOverlaps :  state self src -> void
+foreign import ccall "THCTensorCopy.h THCudaDoubleTensor_copyIgnoringOverlaps"
+  c_copyIgnoringOverlaps :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_copyByte :  state self src -> void
+foreign import ccall "THCTensorCopy.h THCudaDoubleTensor_copyByte"
+  c_copyByte :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THByteTensor -> IO ()
+
+-- | c_copyChar :  state self src -> void
+foreign import ccall "THCTensorCopy.h THCudaDoubleTensor_copyChar"
+  c_copyChar :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCharTensor -> IO ()
+
+-- | c_copyShort :  state self src -> void
+foreign import ccall "THCTensorCopy.h THCudaDoubleTensor_copyShort"
+  c_copyShort :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THShortTensor -> IO ()
+
+-- | c_copyInt :  state self src -> void
+foreign import ccall "THCTensorCopy.h THCudaDoubleTensor_copyInt"
+  c_copyInt :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THIntTensor -> IO ()
+
+-- | c_copyLong :  state self src -> void
+foreign import ccall "THCTensorCopy.h THCudaDoubleTensor_copyLong"
+  c_copyLong :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THLongTensor -> IO ()
+
+-- | c_copyFloat :  state self src -> void
+foreign import ccall "THCTensorCopy.h THCudaDoubleTensor_copyFloat"
+  c_copyFloat :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THFloatTensor -> IO ()
+
+-- | c_copyDouble :  state self src -> void
+foreign import ccall "THCTensorCopy.h THCudaDoubleTensor_copyDouble"
+  c_copyDouble :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THDoubleTensor -> IO ()
+
+-- | c_copyHalf :  state self src -> void
+foreign import ccall "THCTensorCopy.h THCudaDoubleTensor_copyHalf"
+  c_copyHalf :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THHalfTensor -> IO ()
+
+-- | c_copyCudaByte :  state dst src -> void
+foreign import ccall "THCTensorCopy.h THCudaDoubleTensor_copyCudaByte"
+  c_copyCudaByte :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaByteTensor -> IO ()
+
+-- | c_copyCudaChar :  state dst src -> void
+foreign import ccall "THCTensorCopy.h THCudaDoubleTensor_copyCudaChar"
+  c_copyCudaChar :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaCharTensor -> IO ()
+
+-- | c_copyCudaShort :  state dst src -> void
+foreign import ccall "THCTensorCopy.h THCudaDoubleTensor_copyCudaShort"
+  c_copyCudaShort :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaShortTensor -> IO ()
+
+-- | c_copyCudaInt :  state dst src -> void
+foreign import ccall "THCTensorCopy.h THCudaDoubleTensor_copyCudaInt"
+  c_copyCudaInt :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaIntTensor -> IO ()
+
+-- | c_copyCudaLong :  state dst src -> void
+foreign import ccall "THCTensorCopy.h THCudaDoubleTensor_copyCudaLong"
+  c_copyCudaLong :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaLongTensor -> IO ()
+
+-- | c_copyCudaDouble :  state dst src -> void
+foreign import ccall "THCTensorCopy.h THCudaDoubleTensor_copyCudaDouble"
+  c_copyCudaDouble :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_copyCuda :  state self src -> void
+foreign import ccall "THCTensorCopy.h THCudaDoubleTensor_copyCuda"
+  c_copyCuda :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_thCopyCuda :  state self src -> void
+foreign import ccall "THCTensorCopy.h THDoubleTensor_copyCuda"
+  c_thCopyCuda :: Ptr C'THCState -> Ptr C'THDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_copyCPU :  state self src -> void
+foreign import ccall "THCTensorCopy.h THCudaDoubleTensor_copyCPU"
+  c_copyCPU :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THDoubleTensor -> IO ()
+
+-- | c_copyAsyncCPU :  state self src -> void
+foreign import ccall "THCTensorCopy.h THCudaDoubleTensor_copyAsyncCPU"
+  c_copyAsyncCPU :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THDoubleTensor -> IO ()
+
+-- | c_thCopyAsyncCuda :  state self src -> void
+foreign import ccall "THCTensorCopy.h THDoubleTensor_copyAsyncCuda"
+  c_thCopyAsyncCuda :: Ptr C'THCState -> Ptr C'THDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | p_copy : Pointer to function : state self src -> void
+foreign import ccall "THCTensorCopy.h &THCudaDoubleTensor_copy"
+  p_copy :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_copyIgnoringOverlaps : Pointer to function : state self src -> void
+foreign import ccall "THCTensorCopy.h &THCudaDoubleTensor_copyIgnoringOverlaps"
+  p_copyIgnoringOverlaps :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_copyByte : Pointer to function : state self src -> void
+foreign import ccall "THCTensorCopy.h &THCudaDoubleTensor_copyByte"
+  p_copyByte :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THByteTensor -> IO ())
+
+-- | p_copyChar : Pointer to function : state self src -> void
+foreign import ccall "THCTensorCopy.h &THCudaDoubleTensor_copyChar"
+  p_copyChar :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCharTensor -> IO ())
+
+-- | p_copyShort : Pointer to function : state self src -> void
+foreign import ccall "THCTensorCopy.h &THCudaDoubleTensor_copyShort"
+  p_copyShort :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THShortTensor -> IO ())
+
+-- | p_copyInt : Pointer to function : state self src -> void
+foreign import ccall "THCTensorCopy.h &THCudaDoubleTensor_copyInt"
+  p_copyInt :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THIntTensor -> IO ())
+
+-- | p_copyLong : Pointer to function : state self src -> void
+foreign import ccall "THCTensorCopy.h &THCudaDoubleTensor_copyLong"
+  p_copyLong :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THLongTensor -> IO ())
+
+-- | p_copyFloat : Pointer to function : state self src -> void
+foreign import ccall "THCTensorCopy.h &THCudaDoubleTensor_copyFloat"
+  p_copyFloat :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THFloatTensor -> IO ())
+
+-- | p_copyDouble : Pointer to function : state self src -> void
+foreign import ccall "THCTensorCopy.h &THCudaDoubleTensor_copyDouble"
+  p_copyDouble :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THDoubleTensor -> IO ())
+
+-- | p_copyHalf : Pointer to function : state self src -> void
+foreign import ccall "THCTensorCopy.h &THCudaDoubleTensor_copyHalf"
+  p_copyHalf :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THHalfTensor -> IO ())
+
+-- | p_copyCudaByte : Pointer to function : state dst src -> void
+foreign import ccall "THCTensorCopy.h &THCudaDoubleTensor_copyCudaByte"
+  p_copyCudaByte :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaByteTensor -> IO ())
+
+-- | p_copyCudaChar : Pointer to function : state dst src -> void
+foreign import ccall "THCTensorCopy.h &THCudaDoubleTensor_copyCudaChar"
+  p_copyCudaChar :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaCharTensor -> IO ())
+
+-- | p_copyCudaShort : Pointer to function : state dst src -> void
+foreign import ccall "THCTensorCopy.h &THCudaDoubleTensor_copyCudaShort"
+  p_copyCudaShort :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaShortTensor -> IO ())
+
+-- | p_copyCudaInt : Pointer to function : state dst src -> void
+foreign import ccall "THCTensorCopy.h &THCudaDoubleTensor_copyCudaInt"
+  p_copyCudaInt :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaIntTensor -> IO ())
+
+-- | p_copyCudaLong : Pointer to function : state dst src -> void
+foreign import ccall "THCTensorCopy.h &THCudaDoubleTensor_copyCudaLong"
+  p_copyCudaLong :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaLongTensor -> IO ())
+
+-- | p_copyCudaDouble : Pointer to function : state dst src -> void
+foreign import ccall "THCTensorCopy.h &THCudaDoubleTensor_copyCudaDouble"
+  p_copyCudaDouble :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_copyCuda : Pointer to function : state self src -> void
+foreign import ccall "THCTensorCopy.h &THCudaDoubleTensor_copyCuda"
+  p_copyCuda :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_thCopyCuda : Pointer to function : state self src -> void
+foreign import ccall "THCTensorCopy.h &THDoubleTensor_copyCuda"
+  p_thCopyCuda :: FunPtr (Ptr C'THCState -> Ptr C'THDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_copyCPU : Pointer to function : state self src -> void
+foreign import ccall "THCTensorCopy.h &THCudaDoubleTensor_copyCPU"
+  p_copyCPU :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THDoubleTensor -> IO ())
+
+-- | p_copyAsyncCPU : Pointer to function : state self src -> void
+foreign import ccall "THCTensorCopy.h &THCudaDoubleTensor_copyAsyncCPU"
+  p_copyAsyncCPU :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THDoubleTensor -> IO ())
+
+-- | p_thCopyAsyncCuda : Pointer to function : state self src -> void
+foreign import ccall "THCTensorCopy.h &THDoubleTensor_copyAsyncCuda"
+  p_thCopyAsyncCuda :: FunPtr (Ptr C'THCState -> Ptr C'THDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ())
diff --git a/src/Torch/FFI/THC/Double/TensorIndex.hs b/src/Torch/FFI/THC/Double/TensorIndex.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Double/TensorIndex.hs
@@ -0,0 +1,97 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Double.TensorIndex where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_indexCopy :  state res_ dim indices src -> void
+foreign import ccall "THCTensorIndex.h THCudaDoubleTensor_indexCopy"
+  c_indexCopy :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> CInt -> Ptr C'THCudaLongTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_indexAdd :  state res_ dim indices src -> void
+foreign import ccall "THCTensorIndex.h THCudaDoubleTensor_indexAdd"
+  c_indexAdd :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> CInt -> Ptr C'THCudaLongTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_indexFill :  state tensor dim index val -> void
+foreign import ccall "THCTensorIndex.h THCudaDoubleTensor_indexFill"
+  c_indexFill :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> CInt -> Ptr C'THCudaLongTensor -> CDouble -> IO ()
+
+-- | c_indexSelect :  state tensor src dim index -> void
+foreign import ccall "THCTensorIndex.h THCudaDoubleTensor_indexSelect"
+  c_indexSelect :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> Ptr C'THCudaLongTensor -> IO ()
+
+-- | c_take :  state res_ src index -> void
+foreign import ccall "THCTensorIndex.h THCudaDoubleTensor_take"
+  c_take :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaLongTensor -> IO ()
+
+-- | c_put :  state res_ indices src accumulate -> void
+foreign import ccall "THCTensorIndex.h THCudaDoubleTensor_put"
+  c_put :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaDoubleTensor -> CInt -> IO ()
+
+-- | c_indexCopy_long :  state res_ dim indices src -> void
+foreign import ccall "THCTensorIndex.h THCudaDoubleTensor_indexCopy_long"
+  c_indexCopy_long :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> CInt -> Ptr C'THLongTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_indexAdd_long :  state res_ dim indices src -> void
+foreign import ccall "THCTensorIndex.h THCudaDoubleTensor_indexAdd_long"
+  c_indexAdd_long :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> CInt -> Ptr C'THLongTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_indexFill_long :  state tensor dim index val -> void
+foreign import ccall "THCTensorIndex.h THCudaDoubleTensor_indexFill_long"
+  c_indexFill_long :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> CInt -> Ptr C'THLongTensor -> CDouble -> IO ()
+
+-- | c_indexSelect_long :  state tensor src dim index -> void
+foreign import ccall "THCTensorIndex.h THCudaDoubleTensor_indexSelect_long"
+  c_indexSelect_long :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> Ptr C'THLongTensor -> IO ()
+
+-- | c_calculateAdvancedIndexingOffsets :  state output indexed baseOffset indexers -> void
+foreign import ccall "THCTensorIndex.h THCudaDoubleTensor_calculateAdvancedIndexingOffsets"
+  c_calculateAdvancedIndexingOffsets :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaDoubleTensor -> CPtrdiff -> Ptr (Ptr C'THCudaLongTensor) -> IO ()
+
+-- | p_indexCopy : Pointer to function : state res_ dim indices src -> void
+foreign import ccall "THCTensorIndex.h &THCudaDoubleTensor_indexCopy"
+  p_indexCopy :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> CInt -> Ptr C'THCudaLongTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_indexAdd : Pointer to function : state res_ dim indices src -> void
+foreign import ccall "THCTensorIndex.h &THCudaDoubleTensor_indexAdd"
+  p_indexAdd :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> CInt -> Ptr C'THCudaLongTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_indexFill : Pointer to function : state tensor dim index val -> void
+foreign import ccall "THCTensorIndex.h &THCudaDoubleTensor_indexFill"
+  p_indexFill :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> CInt -> Ptr C'THCudaLongTensor -> CDouble -> IO ())
+
+-- | p_indexSelect : Pointer to function : state tensor src dim index -> void
+foreign import ccall "THCTensorIndex.h &THCudaDoubleTensor_indexSelect"
+  p_indexSelect :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> Ptr C'THCudaLongTensor -> IO ())
+
+-- | p_take : Pointer to function : state res_ src index -> void
+foreign import ccall "THCTensorIndex.h &THCudaDoubleTensor_take"
+  p_take :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaLongTensor -> IO ())
+
+-- | p_put : Pointer to function : state res_ indices src accumulate -> void
+foreign import ccall "THCTensorIndex.h &THCudaDoubleTensor_put"
+  p_put :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaDoubleTensor -> CInt -> IO ())
+
+-- | p_indexCopy_long : Pointer to function : state res_ dim indices src -> void
+foreign import ccall "THCTensorIndex.h &THCudaDoubleTensor_indexCopy_long"
+  p_indexCopy_long :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> CInt -> Ptr C'THLongTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_indexAdd_long : Pointer to function : state res_ dim indices src -> void
+foreign import ccall "THCTensorIndex.h &THCudaDoubleTensor_indexAdd_long"
+  p_indexAdd_long :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> CInt -> Ptr C'THLongTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_indexFill_long : Pointer to function : state tensor dim index val -> void
+foreign import ccall "THCTensorIndex.h &THCudaDoubleTensor_indexFill_long"
+  p_indexFill_long :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> CInt -> Ptr C'THLongTensor -> CDouble -> IO ())
+
+-- | p_indexSelect_long : Pointer to function : state tensor src dim index -> void
+foreign import ccall "THCTensorIndex.h &THCudaDoubleTensor_indexSelect_long"
+  p_indexSelect_long :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> Ptr C'THLongTensor -> IO ())
+
+-- | p_calculateAdvancedIndexingOffsets : Pointer to function : state output indexed baseOffset indexers -> void
+foreign import ccall "THCTensorIndex.h &THCudaDoubleTensor_calculateAdvancedIndexingOffsets"
+  p_calculateAdvancedIndexingOffsets :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaDoubleTensor -> CPtrdiff -> Ptr (Ptr C'THCudaLongTensor) -> IO ())
diff --git a/src/Torch/FFI/THC/Double/TensorMasked.hs b/src/Torch/FFI/THC/Double/TensorMasked.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Double/TensorMasked.hs
@@ -0,0 +1,57 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Double.TensorMasked where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_maskedFill :  state tensor mask value -> void
+foreign import ccall "THCTensorMasked.h THCudaDoubleTensor_maskedFill"
+  c_maskedFill :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaByteTensor -> CDouble -> IO ()
+
+-- | c_maskedFillByte :  state tensor mask value -> void
+foreign import ccall "THCTensorMasked.h THCudaDoubleTensor_maskedFillByte"
+  c_maskedFillByte :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THByteTensor -> CDouble -> IO ()
+
+-- | c_maskedCopy :  state tensor mask src -> void
+foreign import ccall "THCTensorMasked.h THCudaDoubleTensor_maskedCopy"
+  c_maskedCopy :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaByteTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_maskedCopyByte :  state tensor mask src -> void
+foreign import ccall "THCTensorMasked.h THCudaDoubleTensor_maskedCopyByte"
+  c_maskedCopyByte :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THByteTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_maskedSelect :  state tensor src mask -> void
+foreign import ccall "THCTensorMasked.h THCudaDoubleTensor_maskedSelect"
+  c_maskedSelect :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaByteTensor -> IO ()
+
+-- | c_maskedSelectByte :  state tensor src mask -> void
+foreign import ccall "THCTensorMasked.h THCudaDoubleTensor_maskedSelectByte"
+  c_maskedSelectByte :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THByteTensor -> IO ()
+
+-- | p_maskedFill : Pointer to function : state tensor mask value -> void
+foreign import ccall "THCTensorMasked.h &THCudaDoubleTensor_maskedFill"
+  p_maskedFill :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaByteTensor -> CDouble -> IO ())
+
+-- | p_maskedFillByte : Pointer to function : state tensor mask value -> void
+foreign import ccall "THCTensorMasked.h &THCudaDoubleTensor_maskedFillByte"
+  p_maskedFillByte :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THByteTensor -> CDouble -> IO ())
+
+-- | p_maskedCopy : Pointer to function : state tensor mask src -> void
+foreign import ccall "THCTensorMasked.h &THCudaDoubleTensor_maskedCopy"
+  p_maskedCopy :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaByteTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_maskedCopyByte : Pointer to function : state tensor mask src -> void
+foreign import ccall "THCTensorMasked.h &THCudaDoubleTensor_maskedCopyByte"
+  p_maskedCopyByte :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THByteTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_maskedSelect : Pointer to function : state tensor src mask -> void
+foreign import ccall "THCTensorMasked.h &THCudaDoubleTensor_maskedSelect"
+  p_maskedSelect :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaByteTensor -> IO ())
+
+-- | p_maskedSelectByte : Pointer to function : state tensor src mask -> void
+foreign import ccall "THCTensorMasked.h &THCudaDoubleTensor_maskedSelectByte"
+  p_maskedSelectByte :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THByteTensor -> IO ())
diff --git a/src/Torch/FFI/THC/Double/TensorMath.hs b/src/Torch/FFI/THC/Double/TensorMath.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Double/TensorMath.hs
@@ -0,0 +1,169 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Double.TensorMath where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_fill :  state self value -> void
+foreign import ccall "THCTensorMath.h THCudaDoubleTensor_fill"
+  c_fill :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> CDouble -> IO ()
+
+-- | c_zero :  state self -> void
+foreign import ccall "THCTensorMath.h THCudaDoubleTensor_zero"
+  c_zero :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_zeros :  state r_ size -> void
+foreign import ccall "THCTensorMath.h THCudaDoubleTensor_zeros"
+  c_zeros :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THLongStorage -> IO ()
+
+-- | c_zerosLike :  state r_ input -> void
+foreign import ccall "THCTensorMath.h THCudaDoubleTensor_zerosLike"
+  c_zerosLike :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_ones :  state r_ size -> void
+foreign import ccall "THCTensorMath.h THCudaDoubleTensor_ones"
+  c_ones :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THLongStorage -> IO ()
+
+-- | c_onesLike :  state r_ input -> void
+foreign import ccall "THCTensorMath.h THCudaDoubleTensor_onesLike"
+  c_onesLike :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_reshape :  state r_ t size -> void
+foreign import ccall "THCTensorMath.h THCudaDoubleTensor_reshape"
+  c_reshape :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THLongStorage -> IO ()
+
+-- | c_numel :  state t -> ptrdiff_t
+foreign import ccall "THCTensorMath.h THCudaDoubleTensor_numel"
+  c_numel :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> IO CPtrdiff
+
+-- | c_cat :  state result ta tb dimension -> void
+foreign import ccall "THCTensorMath.h THCudaDoubleTensor_cat"
+  c_cat :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> IO ()
+
+-- | c_catArray :  state result inputs numInputs dimension -> void
+foreign import ccall "THCTensorMath.h THCudaDoubleTensor_catArray"
+  c_catArray :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr (Ptr C'THCudaDoubleTensor) -> CInt -> CInt -> IO ()
+
+-- | c_nonzero :  state tensor self -> void
+foreign import ccall "THCTensorMath.h THCudaDoubleTensor_nonzero"
+  c_nonzero :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_tril :  state self src k -> void
+foreign import ccall "THCTensorMath.h THCudaDoubleTensor_tril"
+  c_tril :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CLLong -> IO ()
+
+-- | c_triu :  state self src k -> void
+foreign import ccall "THCTensorMath.h THCudaDoubleTensor_triu"
+  c_triu :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CLLong -> IO ()
+
+-- | c_diag :  state self src k -> void
+foreign import ccall "THCTensorMath.h THCudaDoubleTensor_diag"
+  c_diag :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CLLong -> IO ()
+
+-- | c_eye :  state self n k -> void
+foreign import ccall "THCTensorMath.h THCudaDoubleTensor_eye"
+  c_eye :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> CLLong -> CLLong -> IO ()
+
+-- | c_trace :  state self -> accreal
+foreign import ccall "THCTensorMath.h THCudaDoubleTensor_trace"
+  c_trace :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> IO CDouble
+
+-- | c_linspace :  state r_ a b n -> void
+foreign import ccall "THCTensorMath.h THCudaDoubleTensor_linspace"
+  c_linspace :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> CDouble -> CDouble -> CLLong -> IO ()
+
+-- | c_logspace :  state r_ a b n -> void
+foreign import ccall "THCTensorMath.h THCudaDoubleTensor_logspace"
+  c_logspace :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> CDouble -> CDouble -> CLLong -> IO ()
+
+-- | c_range :  state r_ xmin xmax step -> void
+foreign import ccall "THCTensorMath.h THCudaDoubleTensor_range"
+  c_range :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> CDouble -> CDouble -> CDouble -> IO ()
+
+-- | c_arange :  state r_ xmin xmax step -> void
+foreign import ccall "THCTensorMath.h THCudaDoubleTensor_arange"
+  c_arange :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> CDouble -> CDouble -> CDouble -> IO ()
+
+-- | p_fill : Pointer to function : state self value -> void
+foreign import ccall "THCTensorMath.h &THCudaDoubleTensor_fill"
+  p_fill :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> CDouble -> IO ())
+
+-- | p_zero : Pointer to function : state self -> void
+foreign import ccall "THCTensorMath.h &THCudaDoubleTensor_zero"
+  p_zero :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_zeros : Pointer to function : state r_ size -> void
+foreign import ccall "THCTensorMath.h &THCudaDoubleTensor_zeros"
+  p_zeros :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THLongStorage -> IO ())
+
+-- | p_zerosLike : Pointer to function : state r_ input -> void
+foreign import ccall "THCTensorMath.h &THCudaDoubleTensor_zerosLike"
+  p_zerosLike :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_ones : Pointer to function : state r_ size -> void
+foreign import ccall "THCTensorMath.h &THCudaDoubleTensor_ones"
+  p_ones :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THLongStorage -> IO ())
+
+-- | p_onesLike : Pointer to function : state r_ input -> void
+foreign import ccall "THCTensorMath.h &THCudaDoubleTensor_onesLike"
+  p_onesLike :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_reshape : Pointer to function : state r_ t size -> void
+foreign import ccall "THCTensorMath.h &THCudaDoubleTensor_reshape"
+  p_reshape :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THLongStorage -> IO ())
+
+-- | p_numel : Pointer to function : state t -> ptrdiff_t
+foreign import ccall "THCTensorMath.h &THCudaDoubleTensor_numel"
+  p_numel :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> IO CPtrdiff)
+
+-- | p_cat : Pointer to function : state result ta tb dimension -> void
+foreign import ccall "THCTensorMath.h &THCudaDoubleTensor_cat"
+  p_cat :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> IO ())
+
+-- | p_catArray : Pointer to function : state result inputs numInputs dimension -> void
+foreign import ccall "THCTensorMath.h &THCudaDoubleTensor_catArray"
+  p_catArray :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr (Ptr C'THCudaDoubleTensor) -> CInt -> CInt -> IO ())
+
+-- | p_nonzero : Pointer to function : state tensor self -> void
+foreign import ccall "THCTensorMath.h &THCudaDoubleTensor_nonzero"
+  p_nonzero :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_tril : Pointer to function : state self src k -> void
+foreign import ccall "THCTensorMath.h &THCudaDoubleTensor_tril"
+  p_tril :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CLLong -> IO ())
+
+-- | p_triu : Pointer to function : state self src k -> void
+foreign import ccall "THCTensorMath.h &THCudaDoubleTensor_triu"
+  p_triu :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CLLong -> IO ())
+
+-- | p_diag : Pointer to function : state self src k -> void
+foreign import ccall "THCTensorMath.h &THCudaDoubleTensor_diag"
+  p_diag :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CLLong -> IO ())
+
+-- | p_eye : Pointer to function : state self n k -> void
+foreign import ccall "THCTensorMath.h &THCudaDoubleTensor_eye"
+  p_eye :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> CLLong -> CLLong -> IO ())
+
+-- | p_trace : Pointer to function : state self -> accreal
+foreign import ccall "THCTensorMath.h &THCudaDoubleTensor_trace"
+  p_trace :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> IO CDouble)
+
+-- | p_linspace : Pointer to function : state r_ a b n -> void
+foreign import ccall "THCTensorMath.h &THCudaDoubleTensor_linspace"
+  p_linspace :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> CDouble -> CDouble -> CLLong -> IO ())
+
+-- | p_logspace : Pointer to function : state r_ a b n -> void
+foreign import ccall "THCTensorMath.h &THCudaDoubleTensor_logspace"
+  p_logspace :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> CDouble -> CDouble -> CLLong -> IO ())
+
+-- | p_range : Pointer to function : state r_ xmin xmax step -> void
+foreign import ccall "THCTensorMath.h &THCudaDoubleTensor_range"
+  p_range :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> CDouble -> CDouble -> CDouble -> IO ())
+
+-- | p_arange : Pointer to function : state r_ xmin xmax step -> void
+foreign import ccall "THCTensorMath.h &THCudaDoubleTensor_arange"
+  p_arange :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> CDouble -> CDouble -> CDouble -> IO ())
diff --git a/src/Torch/FFI/THC/Double/TensorMathBlas.hs b/src/Torch/FFI/THC/Double/TensorMathBlas.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Double/TensorMathBlas.hs
@@ -0,0 +1,73 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Double.TensorMathBlas where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_dot :  state self src -> accreal
+foreign import ccall "THCTensorMathBlas.h THCudaDoubleTensor_dot"
+  c_dot :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO CDouble
+
+-- | c_addmv :  state self beta t alpha mat vec -> void
+foreign import ccall "THCTensorMathBlas.h THCudaDoubleTensor_addmv"
+  c_addmv :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> CDouble -> Ptr C'THCudaDoubleTensor -> CDouble -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_addmm :  state self beta t alpha mat1 mat2 -> void
+foreign import ccall "THCTensorMathBlas.h THCudaDoubleTensor_addmm"
+  c_addmm :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> CDouble -> Ptr C'THCudaDoubleTensor -> CDouble -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_addr :  state self beta t alpha vec1 vec2 -> void
+foreign import ccall "THCTensorMathBlas.h THCudaDoubleTensor_addr"
+  c_addr :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> CDouble -> Ptr C'THCudaDoubleTensor -> CDouble -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_addbmm :  state result beta t alpha batch1 batch2 -> void
+foreign import ccall "THCTensorMathBlas.h THCudaDoubleTensor_addbmm"
+  c_addbmm :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> CDouble -> Ptr C'THCudaDoubleTensor -> CDouble -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_baddbmm :  state result beta t alpha batch1 batch2 -> void
+foreign import ccall "THCTensorMathBlas.h THCudaDoubleTensor_baddbmm"
+  c_baddbmm :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> CDouble -> Ptr C'THCudaDoubleTensor -> CDouble -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_btrifact :  state ra_ rpivots_ rinfo_ pivot a -> void
+foreign import ccall "THCTensorMathBlas.h THCudaDoubleTensor_btrifact"
+  c_btrifact :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> CInt -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_btrisolve :  state rb_ b atf pivots -> void
+foreign import ccall "THCTensorMathBlas.h THCudaDoubleTensor_btrisolve"
+  c_btrisolve :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaIntTensor -> IO ()
+
+-- | p_dot : Pointer to function : state self src -> accreal
+foreign import ccall "THCTensorMathBlas.h &THCudaDoubleTensor_dot"
+  p_dot :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO CDouble)
+
+-- | p_addmv : Pointer to function : state self beta t alpha mat vec -> void
+foreign import ccall "THCTensorMathBlas.h &THCudaDoubleTensor_addmv"
+  p_addmv :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> CDouble -> Ptr C'THCudaDoubleTensor -> CDouble -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_addmm : Pointer to function : state self beta t alpha mat1 mat2 -> void
+foreign import ccall "THCTensorMathBlas.h &THCudaDoubleTensor_addmm"
+  p_addmm :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> CDouble -> Ptr C'THCudaDoubleTensor -> CDouble -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_addr : Pointer to function : state self beta t alpha vec1 vec2 -> void
+foreign import ccall "THCTensorMathBlas.h &THCudaDoubleTensor_addr"
+  p_addr :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> CDouble -> Ptr C'THCudaDoubleTensor -> CDouble -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_addbmm : Pointer to function : state result beta t alpha batch1 batch2 -> void
+foreign import ccall "THCTensorMathBlas.h &THCudaDoubleTensor_addbmm"
+  p_addbmm :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> CDouble -> Ptr C'THCudaDoubleTensor -> CDouble -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_baddbmm : Pointer to function : state result beta t alpha batch1 batch2 -> void
+foreign import ccall "THCTensorMathBlas.h &THCudaDoubleTensor_baddbmm"
+  p_baddbmm :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> CDouble -> Ptr C'THCudaDoubleTensor -> CDouble -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_btrifact : Pointer to function : state ra_ rpivots_ rinfo_ pivot a -> void
+foreign import ccall "THCTensorMathBlas.h &THCudaDoubleTensor_btrifact"
+  p_btrifact :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> CInt -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_btrisolve : Pointer to function : state rb_ b atf pivots -> void
+foreign import ccall "THCTensorMathBlas.h &THCudaDoubleTensor_btrisolve"
+  p_btrisolve :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaIntTensor -> IO ())
diff --git a/src/Torch/FFI/THC/Double/TensorMathCompare.hs b/src/Torch/FFI/THC/Double/TensorMathCompare.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Double/TensorMathCompare.hs
@@ -0,0 +1,105 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Double.TensorMathCompare where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_ltValue :  state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h THCudaDoubleTensor_ltValue"
+  c_ltValue :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> IO ()
+
+-- | c_gtValue :  state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h THCudaDoubleTensor_gtValue"
+  c_gtValue :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> IO ()
+
+-- | c_leValue :  state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h THCudaDoubleTensor_leValue"
+  c_leValue :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> IO ()
+
+-- | c_geValue :  state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h THCudaDoubleTensor_geValue"
+  c_geValue :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> IO ()
+
+-- | c_eqValue :  state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h THCudaDoubleTensor_eqValue"
+  c_eqValue :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> IO ()
+
+-- | c_neValue :  state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h THCudaDoubleTensor_neValue"
+  c_neValue :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> IO ()
+
+-- | c_ltValueT :  state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h THCudaDoubleTensor_ltValueT"
+  c_ltValueT :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> IO ()
+
+-- | c_gtValueT :  state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h THCudaDoubleTensor_gtValueT"
+  c_gtValueT :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> IO ()
+
+-- | c_leValueT :  state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h THCudaDoubleTensor_leValueT"
+  c_leValueT :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> IO ()
+
+-- | c_geValueT :  state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h THCudaDoubleTensor_geValueT"
+  c_geValueT :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> IO ()
+
+-- | c_eqValueT :  state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h THCudaDoubleTensor_eqValueT"
+  c_eqValueT :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> IO ()
+
+-- | c_neValueT :  state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h THCudaDoubleTensor_neValueT"
+  c_neValueT :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> IO ()
+
+-- | p_ltValue : Pointer to function : state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h &THCudaDoubleTensor_ltValue"
+  p_ltValue :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> IO ())
+
+-- | p_gtValue : Pointer to function : state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h &THCudaDoubleTensor_gtValue"
+  p_gtValue :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> IO ())
+
+-- | p_leValue : Pointer to function : state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h &THCudaDoubleTensor_leValue"
+  p_leValue :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> IO ())
+
+-- | p_geValue : Pointer to function : state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h &THCudaDoubleTensor_geValue"
+  p_geValue :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> IO ())
+
+-- | p_eqValue : Pointer to function : state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h &THCudaDoubleTensor_eqValue"
+  p_eqValue :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> IO ())
+
+-- | p_neValue : Pointer to function : state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h &THCudaDoubleTensor_neValue"
+  p_neValue :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> IO ())
+
+-- | p_ltValueT : Pointer to function : state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h &THCudaDoubleTensor_ltValueT"
+  p_ltValueT :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> IO ())
+
+-- | p_gtValueT : Pointer to function : state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h &THCudaDoubleTensor_gtValueT"
+  p_gtValueT :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> IO ())
+
+-- | p_leValueT : Pointer to function : state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h &THCudaDoubleTensor_leValueT"
+  p_leValueT :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> IO ())
+
+-- | p_geValueT : Pointer to function : state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h &THCudaDoubleTensor_geValueT"
+  p_geValueT :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> IO ())
+
+-- | p_eqValueT : Pointer to function : state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h &THCudaDoubleTensor_eqValueT"
+  p_eqValueT :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> IO ())
+
+-- | p_neValueT : Pointer to function : state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h &THCudaDoubleTensor_neValueT"
+  p_neValueT :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> IO ())
diff --git a/src/Torch/FFI/THC/Double/TensorMathCompareT.hs b/src/Torch/FFI/THC/Double/TensorMathCompareT.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Double/TensorMathCompareT.hs
@@ -0,0 +1,105 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Double.TensorMathCompareT where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_ltTensor :  state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h THCudaDoubleTensor_ltTensor"
+  c_ltTensor :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_gtTensor :  state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h THCudaDoubleTensor_gtTensor"
+  c_gtTensor :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_leTensor :  state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h THCudaDoubleTensor_leTensor"
+  c_leTensor :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_geTensor :  state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h THCudaDoubleTensor_geTensor"
+  c_geTensor :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_eqTensor :  state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h THCudaDoubleTensor_eqTensor"
+  c_eqTensor :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_neTensor :  state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h THCudaDoubleTensor_neTensor"
+  c_neTensor :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_ltTensorT :  state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h THCudaDoubleTensor_ltTensorT"
+  c_ltTensorT :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_gtTensorT :  state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h THCudaDoubleTensor_gtTensorT"
+  c_gtTensorT :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_leTensorT :  state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h THCudaDoubleTensor_leTensorT"
+  c_leTensorT :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_geTensorT :  state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h THCudaDoubleTensor_geTensorT"
+  c_geTensorT :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_eqTensorT :  state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h THCudaDoubleTensor_eqTensorT"
+  c_eqTensorT :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_neTensorT :  state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h THCudaDoubleTensor_neTensorT"
+  c_neTensorT :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | p_ltTensor : Pointer to function : state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h &THCudaDoubleTensor_ltTensor"
+  p_ltTensor :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_gtTensor : Pointer to function : state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h &THCudaDoubleTensor_gtTensor"
+  p_gtTensor :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_leTensor : Pointer to function : state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h &THCudaDoubleTensor_leTensor"
+  p_leTensor :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_geTensor : Pointer to function : state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h &THCudaDoubleTensor_geTensor"
+  p_geTensor :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_eqTensor : Pointer to function : state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h &THCudaDoubleTensor_eqTensor"
+  p_eqTensor :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_neTensor : Pointer to function : state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h &THCudaDoubleTensor_neTensor"
+  p_neTensor :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_ltTensorT : Pointer to function : state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h &THCudaDoubleTensor_ltTensorT"
+  p_ltTensorT :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_gtTensorT : Pointer to function : state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h &THCudaDoubleTensor_gtTensorT"
+  p_gtTensorT :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_leTensorT : Pointer to function : state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h &THCudaDoubleTensor_leTensorT"
+  p_leTensorT :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_geTensorT : Pointer to function : state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h &THCudaDoubleTensor_geTensorT"
+  p_geTensorT :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_eqTensorT : Pointer to function : state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h &THCudaDoubleTensor_eqTensorT"
+  p_eqTensorT :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_neTensorT : Pointer to function : state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h &THCudaDoubleTensor_neTensorT"
+  p_neTensorT :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ())
diff --git a/src/Torch/FFI/THC/Double/TensorMathMagma.hs b/src/Torch/FFI/THC/Double/TensorMathMagma.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Double/TensorMathMagma.hs
@@ -0,0 +1,105 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Double.TensorMathMagma where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_gesv :  state rb_ ra_ b_ a_ -> void
+foreign import ccall "THCTensorMathMagma.h THCudaDoubleTensor_gesv"
+  c_gesv :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_gels :  state rb_ ra_ b_ a_ -> void
+foreign import ccall "THCTensorMathMagma.h THCudaDoubleTensor_gels"
+  c_gels :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_syev :  state re_ rv_ a_ jobz uplo -> void
+foreign import ccall "THCTensorMathMagma.h THCudaDoubleTensor_syev"
+  c_syev :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr CChar -> Ptr CChar -> IO ()
+
+-- | c_geev :  state re_ rv_ a_ jobvr -> void
+foreign import ccall "THCTensorMathMagma.h THCudaDoubleTensor_geev"
+  c_geev :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr CChar -> IO ()
+
+-- | c_gesvd :  state ru_ rs_ rv_ a jobu -> void
+foreign import ccall "THCTensorMathMagma.h THCudaDoubleTensor_gesvd"
+  c_gesvd :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr CChar -> IO ()
+
+-- | c_gesvd2 :  state ru_ rs_ rv_ ra_ a jobu -> void
+foreign import ccall "THCTensorMathMagma.h THCudaDoubleTensor_gesvd2"
+  c_gesvd2 :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr CChar -> IO ()
+
+-- | c_getri :  state ra_ a -> void
+foreign import ccall "THCTensorMathMagma.h THCudaDoubleTensor_getri"
+  c_getri :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_potri :  state ra_ a uplo -> void
+foreign import ccall "THCTensorMathMagma.h THCudaDoubleTensor_potri"
+  c_potri :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr CChar -> IO ()
+
+-- | c_potrf :  state ra_ a uplo -> void
+foreign import ccall "THCTensorMathMagma.h THCudaDoubleTensor_potrf"
+  c_potrf :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr CChar -> IO ()
+
+-- | c_potrs :  state rb_ a b uplo -> void
+foreign import ccall "THCTensorMathMagma.h THCudaDoubleTensor_potrs"
+  c_potrs :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr CChar -> IO ()
+
+-- | c_geqrf :  state ra_ rtau_ a_ -> void
+foreign import ccall "THCTensorMathMagma.h THCudaDoubleTensor_geqrf"
+  c_geqrf :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_qr :  state rq_ rr_ a -> void
+foreign import ccall "THCTensorMathMagma.h THCudaDoubleTensor_qr"
+  c_qr :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | p_gesv : Pointer to function : state rb_ ra_ b_ a_ -> void
+foreign import ccall "THCTensorMathMagma.h &THCudaDoubleTensor_gesv"
+  p_gesv :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_gels : Pointer to function : state rb_ ra_ b_ a_ -> void
+foreign import ccall "THCTensorMathMagma.h &THCudaDoubleTensor_gels"
+  p_gels :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_syev : Pointer to function : state re_ rv_ a_ jobz uplo -> void
+foreign import ccall "THCTensorMathMagma.h &THCudaDoubleTensor_syev"
+  p_syev :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr CChar -> Ptr CChar -> IO ())
+
+-- | p_geev : Pointer to function : state re_ rv_ a_ jobvr -> void
+foreign import ccall "THCTensorMathMagma.h &THCudaDoubleTensor_geev"
+  p_geev :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr CChar -> IO ())
+
+-- | p_gesvd : Pointer to function : state ru_ rs_ rv_ a jobu -> void
+foreign import ccall "THCTensorMathMagma.h &THCudaDoubleTensor_gesvd"
+  p_gesvd :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr CChar -> IO ())
+
+-- | p_gesvd2 : Pointer to function : state ru_ rs_ rv_ ra_ a jobu -> void
+foreign import ccall "THCTensorMathMagma.h &THCudaDoubleTensor_gesvd2"
+  p_gesvd2 :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr CChar -> IO ())
+
+-- | p_getri : Pointer to function : state ra_ a -> void
+foreign import ccall "THCTensorMathMagma.h &THCudaDoubleTensor_getri"
+  p_getri :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_potri : Pointer to function : state ra_ a uplo -> void
+foreign import ccall "THCTensorMathMagma.h &THCudaDoubleTensor_potri"
+  p_potri :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr CChar -> IO ())
+
+-- | p_potrf : Pointer to function : state ra_ a uplo -> void
+foreign import ccall "THCTensorMathMagma.h &THCudaDoubleTensor_potrf"
+  p_potrf :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr CChar -> IO ())
+
+-- | p_potrs : Pointer to function : state rb_ a b uplo -> void
+foreign import ccall "THCTensorMathMagma.h &THCudaDoubleTensor_potrs"
+  p_potrs :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr CChar -> IO ())
+
+-- | p_geqrf : Pointer to function : state ra_ rtau_ a_ -> void
+foreign import ccall "THCTensorMathMagma.h &THCudaDoubleTensor_geqrf"
+  p_geqrf :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_qr : Pointer to function : state rq_ rr_ a -> void
+foreign import ccall "THCTensorMathMagma.h &THCudaDoubleTensor_qr"
+  p_qr :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ())
diff --git a/src/Torch/FFI/THC/Double/TensorMathPairwise.hs b/src/Torch/FFI/THC/Double/TensorMathPairwise.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Double/TensorMathPairwise.hs
@@ -0,0 +1,121 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Double.TensorMathPairwise where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_add :  state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h THCudaDoubleTensor_add"
+  c_add :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> IO ()
+
+-- | c_sub :  state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h THCudaDoubleTensor_sub"
+  c_sub :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> IO ()
+
+-- | c_add_scaled :  state self src value alpha -> void
+foreign import ccall "THCTensorMathPairwise.h THCudaDoubleTensor_add_scaled"
+  c_add_scaled :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> CDouble -> IO ()
+
+-- | c_sub_scaled :  state self src value alpha -> void
+foreign import ccall "THCTensorMathPairwise.h THCudaDoubleTensor_sub_scaled"
+  c_sub_scaled :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> CDouble -> IO ()
+
+-- | c_mul :  state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h THCudaDoubleTensor_mul"
+  c_mul :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> IO ()
+
+-- | c_div :  state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h THCudaDoubleTensor_div"
+  c_div :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> IO ()
+
+-- | c_lshift :  state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h THCudaDoubleTensor_lshift"
+  c_lshift :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> IO ()
+
+-- | c_rshift :  state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h THCudaDoubleTensor_rshift"
+  c_rshift :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> IO ()
+
+-- | c_fmod :  state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h THCudaDoubleTensor_fmod"
+  c_fmod :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> IO ()
+
+-- | c_remainder :  state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h THCudaDoubleTensor_remainder"
+  c_remainder :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> IO ()
+
+-- | c_bitand :  state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h THCudaDoubleTensor_bitand"
+  c_bitand :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> IO ()
+
+-- | c_bitor :  state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h THCudaDoubleTensor_bitor"
+  c_bitor :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> IO ()
+
+-- | c_bitxor :  state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h THCudaDoubleTensor_bitxor"
+  c_bitxor :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> IO ()
+
+-- | c_equal :  state self src -> int
+foreign import ccall "THCTensorMathPairwise.h THCudaDoubleTensor_equal"
+  c_equal :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO CInt
+
+-- | p_add : Pointer to function : state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h &THCudaDoubleTensor_add"
+  p_add :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> IO ())
+
+-- | p_sub : Pointer to function : state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h &THCudaDoubleTensor_sub"
+  p_sub :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> IO ())
+
+-- | p_add_scaled : Pointer to function : state self src value alpha -> void
+foreign import ccall "THCTensorMathPairwise.h &THCudaDoubleTensor_add_scaled"
+  p_add_scaled :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> CDouble -> IO ())
+
+-- | p_sub_scaled : Pointer to function : state self src value alpha -> void
+foreign import ccall "THCTensorMathPairwise.h &THCudaDoubleTensor_sub_scaled"
+  p_sub_scaled :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> CDouble -> IO ())
+
+-- | p_mul : Pointer to function : state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h &THCudaDoubleTensor_mul"
+  p_mul :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> IO ())
+
+-- | p_div : Pointer to function : state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h &THCudaDoubleTensor_div"
+  p_div :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> IO ())
+
+-- | p_lshift : Pointer to function : state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h &THCudaDoubleTensor_lshift"
+  p_lshift :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> IO ())
+
+-- | p_rshift : Pointer to function : state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h &THCudaDoubleTensor_rshift"
+  p_rshift :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> IO ())
+
+-- | p_fmod : Pointer to function : state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h &THCudaDoubleTensor_fmod"
+  p_fmod :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> IO ())
+
+-- | p_remainder : Pointer to function : state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h &THCudaDoubleTensor_remainder"
+  p_remainder :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> IO ())
+
+-- | p_bitand : Pointer to function : state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h &THCudaDoubleTensor_bitand"
+  p_bitand :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> IO ())
+
+-- | p_bitor : Pointer to function : state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h &THCudaDoubleTensor_bitor"
+  p_bitor :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> IO ())
+
+-- | p_bitxor : Pointer to function : state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h &THCudaDoubleTensor_bitxor"
+  p_bitxor :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> IO ())
+
+-- | p_equal : Pointer to function : state self src -> int
+foreign import ccall "THCTensorMathPairwise.h &THCudaDoubleTensor_equal"
+  p_equal :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO CInt)
diff --git a/src/Torch/FFI/THC/Double/TensorMathPointwise.hs b/src/Torch/FFI/THC/Double/TensorMathPointwise.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Double/TensorMathPointwise.hs
@@ -0,0 +1,441 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Double.TensorMathPointwise where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_sigmoid :  state self src -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaDoubleTensor_sigmoid"
+  c_sigmoid :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_log :  state self src -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaDoubleTensor_log"
+  c_log :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_lgamma :  state self src -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaDoubleTensor_lgamma"
+  c_lgamma :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_digamma :  state self src -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaDoubleTensor_digamma"
+  c_digamma :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_polygamma :  state self n src -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaDoubleTensor_polygamma"
+  c_polygamma :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> CLLong -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_log1p :  state self src -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaDoubleTensor_log1p"
+  c_log1p :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_exp :  state self src -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaDoubleTensor_exp"
+  c_exp :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_expm1 :  state self src -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaDoubleTensor_expm1"
+  c_expm1 :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_cos :  state self src -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaDoubleTensor_cos"
+  c_cos :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_acos :  state self src -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaDoubleTensor_acos"
+  c_acos :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_cosh :  state self src -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaDoubleTensor_cosh"
+  c_cosh :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_sin :  state self src -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaDoubleTensor_sin"
+  c_sin :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_asin :  state self src -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaDoubleTensor_asin"
+  c_asin :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_sinh :  state self src -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaDoubleTensor_sinh"
+  c_sinh :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_tan :  state self src -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaDoubleTensor_tan"
+  c_tan :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_atan :  state self src -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaDoubleTensor_atan"
+  c_atan :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_atan2 :  state r_ tx ty -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaDoubleTensor_atan2"
+  c_atan2 :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_tanh :  state self src -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaDoubleTensor_tanh"
+  c_tanh :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_erf :  state self src -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaDoubleTensor_erf"
+  c_erf :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_erfinv :  state self src -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaDoubleTensor_erfinv"
+  c_erfinv :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_pow :  state self src value -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaDoubleTensor_pow"
+  c_pow :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> IO ()
+
+-- | c_tpow :  state self value src -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaDoubleTensor_tpow"
+  c_tpow :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> CDouble -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_sqrt :  state self src -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaDoubleTensor_sqrt"
+  c_sqrt :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_rsqrt :  state self src -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaDoubleTensor_rsqrt"
+  c_rsqrt :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_ceil :  state self src -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaDoubleTensor_ceil"
+  c_ceil :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_floor :  state self src -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaDoubleTensor_floor"
+  c_floor :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_round :  state self src -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaDoubleTensor_round"
+  c_round :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_trunc :  state self src -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaDoubleTensor_trunc"
+  c_trunc :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_frac :  state self src -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaDoubleTensor_frac"
+  c_frac :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_lerp :  state result a b w -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaDoubleTensor_lerp"
+  c_lerp :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> IO ()
+
+-- | c_cinv :  state self src -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaDoubleTensor_cinv"
+  c_cinv :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_neg :  state self src -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaDoubleTensor_neg"
+  c_neg :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_abs :  state self src -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaDoubleTensor_abs"
+  c_abs :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_sign :  state self src -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaDoubleTensor_sign"
+  c_sign :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_clamp :  state self src min_value max_value -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaDoubleTensor_clamp"
+  c_clamp :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> CDouble -> IO ()
+
+-- | c_cross :  state self src1 src2 dimension -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaDoubleTensor_cross"
+  c_cross :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> IO ()
+
+-- | c_cadd :  state self src1 value src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaDoubleTensor_cadd"
+  c_cadd :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_csub :  state self src1 value src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaDoubleTensor_csub"
+  c_csub :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_cmul :  state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaDoubleTensor_cmul"
+  c_cmul :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_cpow :  state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaDoubleTensor_cpow"
+  c_cpow :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_cdiv :  state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaDoubleTensor_cdiv"
+  c_cdiv :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_clshift :  state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaDoubleTensor_clshift"
+  c_clshift :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_crshift :  state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaDoubleTensor_crshift"
+  c_crshift :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_cmax :  state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaDoubleTensor_cmax"
+  c_cmax :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_cmin :  state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaDoubleTensor_cmin"
+  c_cmin :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_cfmod :  state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaDoubleTensor_cfmod"
+  c_cfmod :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_cremainder :  state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaDoubleTensor_cremainder"
+  c_cremainder :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_cmaxValue :  state self src value -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaDoubleTensor_cmaxValue"
+  c_cmaxValue :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> IO ()
+
+-- | c_cminValue :  state self src value -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaDoubleTensor_cminValue"
+  c_cminValue :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> IO ()
+
+-- | c_cbitand :  state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaDoubleTensor_cbitand"
+  c_cbitand :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_cbitor :  state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaDoubleTensor_cbitor"
+  c_cbitor :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_cbitxor :  state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaDoubleTensor_cbitxor"
+  c_cbitxor :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_addcmul :  state self t value src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaDoubleTensor_addcmul"
+  c_addcmul :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_addcdiv :  state self t value src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaDoubleTensor_addcdiv"
+  c_addcdiv :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | p_sigmoid : Pointer to function : state self src -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaDoubleTensor_sigmoid"
+  p_sigmoid :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_log : Pointer to function : state self src -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaDoubleTensor_log"
+  p_log :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_lgamma : Pointer to function : state self src -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaDoubleTensor_lgamma"
+  p_lgamma :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_digamma : Pointer to function : state self src -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaDoubleTensor_digamma"
+  p_digamma :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_polygamma : Pointer to function : state self n src -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaDoubleTensor_polygamma"
+  p_polygamma :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> CLLong -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_log1p : Pointer to function : state self src -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaDoubleTensor_log1p"
+  p_log1p :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_exp : Pointer to function : state self src -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaDoubleTensor_exp"
+  p_exp :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_expm1 : Pointer to function : state self src -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaDoubleTensor_expm1"
+  p_expm1 :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_cos : Pointer to function : state self src -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaDoubleTensor_cos"
+  p_cos :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_acos : Pointer to function : state self src -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaDoubleTensor_acos"
+  p_acos :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_cosh : Pointer to function : state self src -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaDoubleTensor_cosh"
+  p_cosh :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_sin : Pointer to function : state self src -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaDoubleTensor_sin"
+  p_sin :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_asin : Pointer to function : state self src -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaDoubleTensor_asin"
+  p_asin :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_sinh : Pointer to function : state self src -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaDoubleTensor_sinh"
+  p_sinh :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_tan : Pointer to function : state self src -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaDoubleTensor_tan"
+  p_tan :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_atan : Pointer to function : state self src -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaDoubleTensor_atan"
+  p_atan :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_atan2 : Pointer to function : state r_ tx ty -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaDoubleTensor_atan2"
+  p_atan2 :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_tanh : Pointer to function : state self src -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaDoubleTensor_tanh"
+  p_tanh :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_erf : Pointer to function : state self src -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaDoubleTensor_erf"
+  p_erf :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_erfinv : Pointer to function : state self src -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaDoubleTensor_erfinv"
+  p_erfinv :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_pow : Pointer to function : state self src value -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaDoubleTensor_pow"
+  p_pow :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> IO ())
+
+-- | p_tpow : Pointer to function : state self value src -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaDoubleTensor_tpow"
+  p_tpow :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> CDouble -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_sqrt : Pointer to function : state self src -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaDoubleTensor_sqrt"
+  p_sqrt :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_rsqrt : Pointer to function : state self src -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaDoubleTensor_rsqrt"
+  p_rsqrt :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_ceil : Pointer to function : state self src -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaDoubleTensor_ceil"
+  p_ceil :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_floor : Pointer to function : state self src -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaDoubleTensor_floor"
+  p_floor :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_round : Pointer to function : state self src -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaDoubleTensor_round"
+  p_round :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_trunc : Pointer to function : state self src -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaDoubleTensor_trunc"
+  p_trunc :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_frac : Pointer to function : state self src -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaDoubleTensor_frac"
+  p_frac :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_lerp : Pointer to function : state result a b w -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaDoubleTensor_lerp"
+  p_lerp :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> IO ())
+
+-- | p_cinv : Pointer to function : state self src -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaDoubleTensor_cinv"
+  p_cinv :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_neg : Pointer to function : state self src -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaDoubleTensor_neg"
+  p_neg :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_abs : Pointer to function : state self src -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaDoubleTensor_abs"
+  p_abs :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_sign : Pointer to function : state self src -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaDoubleTensor_sign"
+  p_sign :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_clamp : Pointer to function : state self src min_value max_value -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaDoubleTensor_clamp"
+  p_clamp :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> CDouble -> IO ())
+
+-- | p_cross : Pointer to function : state self src1 src2 dimension -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaDoubleTensor_cross"
+  p_cross :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> IO ())
+
+-- | p_cadd : Pointer to function : state self src1 value src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaDoubleTensor_cadd"
+  p_cadd :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_csub : Pointer to function : state self src1 value src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaDoubleTensor_csub"
+  p_csub :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_cmul : Pointer to function : state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaDoubleTensor_cmul"
+  p_cmul :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_cpow : Pointer to function : state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaDoubleTensor_cpow"
+  p_cpow :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_cdiv : Pointer to function : state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaDoubleTensor_cdiv"
+  p_cdiv :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_clshift : Pointer to function : state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaDoubleTensor_clshift"
+  p_clshift :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_crshift : Pointer to function : state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaDoubleTensor_crshift"
+  p_crshift :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_cmax : Pointer to function : state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaDoubleTensor_cmax"
+  p_cmax :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_cmin : Pointer to function : state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaDoubleTensor_cmin"
+  p_cmin :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_cfmod : Pointer to function : state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaDoubleTensor_cfmod"
+  p_cfmod :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_cremainder : Pointer to function : state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaDoubleTensor_cremainder"
+  p_cremainder :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_cmaxValue : Pointer to function : state self src value -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaDoubleTensor_cmaxValue"
+  p_cmaxValue :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> IO ())
+
+-- | p_cminValue : Pointer to function : state self src value -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaDoubleTensor_cminValue"
+  p_cminValue :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> IO ())
+
+-- | p_cbitand : Pointer to function : state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaDoubleTensor_cbitand"
+  p_cbitand :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_cbitor : Pointer to function : state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaDoubleTensor_cbitor"
+  p_cbitor :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_cbitxor : Pointer to function : state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaDoubleTensor_cbitxor"
+  p_cbitxor :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_addcmul : Pointer to function : state self t value src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaDoubleTensor_addcmul"
+  p_addcmul :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_addcdiv : Pointer to function : state self t value src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaDoubleTensor_addcdiv"
+  p_addcdiv :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ())
diff --git a/src/Torch/FFI/THC/Double/TensorMathReduce.hs b/src/Torch/FFI/THC/Double/TensorMathReduce.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Double/TensorMathReduce.hs
@@ -0,0 +1,169 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Double.TensorMathReduce where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_renorm :  state self src value dimension max_norm -> void
+foreign import ccall "THCTensorMathReduce.h THCudaDoubleTensor_renorm"
+  c_renorm :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> CInt -> CDouble -> IO ()
+
+-- | c_std :  state self src dim biased keepdim -> void
+foreign import ccall "THCTensorMathReduce.h THCudaDoubleTensor_std"
+  c_std :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> IO ()
+
+-- | c_norm :  state self src value dimension keepdim -> void
+foreign import ccall "THCTensorMathReduce.h THCudaDoubleTensor_norm"
+  c_norm :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> CInt -> CInt -> IO ()
+
+-- | c_var :  state self src dim biased keepdim -> void
+foreign import ccall "THCTensorMathReduce.h THCudaDoubleTensor_var"
+  c_var :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> IO ()
+
+-- | c_stdall :  state self biased -> accreal
+foreign import ccall "THCTensorMathReduce.h THCudaDoubleTensor_stdall"
+  c_stdall :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> CInt -> IO CDouble
+
+-- | c_normall :  state self value -> accreal
+foreign import ccall "THCTensorMathReduce.h THCudaDoubleTensor_normall"
+  c_normall :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> CDouble -> IO CDouble
+
+-- | c_varall :  state self biased -> accreal
+foreign import ccall "THCTensorMathReduce.h THCudaDoubleTensor_varall"
+  c_varall :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> CInt -> IO CDouble
+
+-- | c_sum :  state self src dim keepdim -> void
+foreign import ccall "THCTensorMathReduce.h THCudaDoubleTensor_sum"
+  c_sum :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> IO ()
+
+-- | c_prod :  state self src dim keepdim -> void
+foreign import ccall "THCTensorMathReduce.h THCudaDoubleTensor_prod"
+  c_prod :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> IO ()
+
+-- | c_mean :  state self src dim keepdim -> void
+foreign import ccall "THCTensorMathReduce.h THCudaDoubleTensor_mean"
+  c_mean :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> IO ()
+
+-- | c_sumall :  state self -> accreal
+foreign import ccall "THCTensorMathReduce.h THCudaDoubleTensor_sumall"
+  c_sumall :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> IO CDouble
+
+-- | c_prodall :  state self -> accreal
+foreign import ccall "THCTensorMathReduce.h THCudaDoubleTensor_prodall"
+  c_prodall :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> IO CDouble
+
+-- | c_meanall :  state self -> accreal
+foreign import ccall "THCTensorMathReduce.h THCudaDoubleTensor_meanall"
+  c_meanall :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> IO CDouble
+
+-- | c_min :  state values indices src dim keepdim -> void
+foreign import ccall "THCTensorMathReduce.h THCudaDoubleTensor_min"
+  c_min :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> IO ()
+
+-- | c_max :  state values indices src dim keepdim -> void
+foreign import ccall "THCTensorMathReduce.h THCudaDoubleTensor_max"
+  c_max :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> IO ()
+
+-- | c_minall :  state self -> real
+foreign import ccall "THCTensorMathReduce.h THCudaDoubleTensor_minall"
+  c_minall :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> IO CDouble
+
+-- | c_maxall :  state self -> real
+foreign import ccall "THCTensorMathReduce.h THCudaDoubleTensor_maxall"
+  c_maxall :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> IO CDouble
+
+-- | c_medianall :  state self -> real
+foreign import ccall "THCTensorMathReduce.h THCudaDoubleTensor_medianall"
+  c_medianall :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> IO CDouble
+
+-- | c_median :  state values indices src dim keepdim -> void
+foreign import ccall "THCTensorMathReduce.h THCudaDoubleTensor_median"
+  c_median :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> IO ()
+
+-- | c_dist :  state self src value -> accreal
+foreign import ccall "THCTensorMathReduce.h THCudaDoubleTensor_dist"
+  c_dist :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> IO CDouble
+
+-- | p_renorm : Pointer to function : state self src value dimension max_norm -> void
+foreign import ccall "THCTensorMathReduce.h &THCudaDoubleTensor_renorm"
+  p_renorm :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> CInt -> CDouble -> IO ())
+
+-- | p_std : Pointer to function : state self src dim biased keepdim -> void
+foreign import ccall "THCTensorMathReduce.h &THCudaDoubleTensor_std"
+  p_std :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> IO ())
+
+-- | p_norm : Pointer to function : state self src value dimension keepdim -> void
+foreign import ccall "THCTensorMathReduce.h &THCudaDoubleTensor_norm"
+  p_norm :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> CInt -> CInt -> IO ())
+
+-- | p_var : Pointer to function : state self src dim biased keepdim -> void
+foreign import ccall "THCTensorMathReduce.h &THCudaDoubleTensor_var"
+  p_var :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> CInt -> IO ())
+
+-- | p_stdall : Pointer to function : state self biased -> accreal
+foreign import ccall "THCTensorMathReduce.h &THCudaDoubleTensor_stdall"
+  p_stdall :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> CInt -> IO CDouble)
+
+-- | p_normall : Pointer to function : state self value -> accreal
+foreign import ccall "THCTensorMathReduce.h &THCudaDoubleTensor_normall"
+  p_normall :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> CDouble -> IO CDouble)
+
+-- | p_varall : Pointer to function : state self biased -> accreal
+foreign import ccall "THCTensorMathReduce.h &THCudaDoubleTensor_varall"
+  p_varall :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> CInt -> IO CDouble)
+
+-- | p_sum : Pointer to function : state self src dim keepdim -> void
+foreign import ccall "THCTensorMathReduce.h &THCudaDoubleTensor_sum"
+  p_sum :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> IO ())
+
+-- | p_prod : Pointer to function : state self src dim keepdim -> void
+foreign import ccall "THCTensorMathReduce.h &THCudaDoubleTensor_prod"
+  p_prod :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> IO ())
+
+-- | p_mean : Pointer to function : state self src dim keepdim -> void
+foreign import ccall "THCTensorMathReduce.h &THCudaDoubleTensor_mean"
+  p_mean :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> IO ())
+
+-- | p_sumall : Pointer to function : state self -> accreal
+foreign import ccall "THCTensorMathReduce.h &THCudaDoubleTensor_sumall"
+  p_sumall :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> IO CDouble)
+
+-- | p_prodall : Pointer to function : state self -> accreal
+foreign import ccall "THCTensorMathReduce.h &THCudaDoubleTensor_prodall"
+  p_prodall :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> IO CDouble)
+
+-- | p_meanall : Pointer to function : state self -> accreal
+foreign import ccall "THCTensorMathReduce.h &THCudaDoubleTensor_meanall"
+  p_meanall :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> IO CDouble)
+
+-- | p_min : Pointer to function : state values indices src dim keepdim -> void
+foreign import ccall "THCTensorMathReduce.h &THCudaDoubleTensor_min"
+  p_min :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> IO ())
+
+-- | p_max : Pointer to function : state values indices src dim keepdim -> void
+foreign import ccall "THCTensorMathReduce.h &THCudaDoubleTensor_max"
+  p_max :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> IO ())
+
+-- | p_minall : Pointer to function : state self -> real
+foreign import ccall "THCTensorMathReduce.h &THCudaDoubleTensor_minall"
+  p_minall :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> IO CDouble)
+
+-- | p_maxall : Pointer to function : state self -> real
+foreign import ccall "THCTensorMathReduce.h &THCudaDoubleTensor_maxall"
+  p_maxall :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> IO CDouble)
+
+-- | p_medianall : Pointer to function : state self -> real
+foreign import ccall "THCTensorMathReduce.h &THCudaDoubleTensor_medianall"
+  p_medianall :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> IO CDouble)
+
+-- | p_median : Pointer to function : state values indices src dim keepdim -> void
+foreign import ccall "THCTensorMathReduce.h &THCudaDoubleTensor_median"
+  p_median :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> IO ())
+
+-- | p_dist : Pointer to function : state self src value -> accreal
+foreign import ccall "THCTensorMathReduce.h &THCudaDoubleTensor_dist"
+  p_dist :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> IO CDouble)
diff --git a/src/Torch/FFI/THC/Double/TensorMathScan.hs b/src/Torch/FFI/THC/Double/TensorMathScan.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Double/TensorMathScan.hs
@@ -0,0 +1,25 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Double.TensorMathScan where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_cumsum :  state self src dim -> void
+foreign import ccall "THCTensorMathScan.h THCudaDoubleTensor_cumsum"
+  c_cumsum :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> IO ()
+
+-- | c_cumprod :  state self src dim -> void
+foreign import ccall "THCTensorMathScan.h THCudaDoubleTensor_cumprod"
+  c_cumprod :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> IO ()
+
+-- | p_cumsum : Pointer to function : state self src dim -> void
+foreign import ccall "THCTensorMathScan.h &THCudaDoubleTensor_cumsum"
+  p_cumsum :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> IO ())
+
+-- | p_cumprod : Pointer to function : state self src dim -> void
+foreign import ccall "THCTensorMathScan.h &THCudaDoubleTensor_cumprod"
+  p_cumprod :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> IO ())
diff --git a/src/Torch/FFI/THC/Double/TensorMode.hs b/src/Torch/FFI/THC/Double/TensorMode.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Double/TensorMode.hs
@@ -0,0 +1,17 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Double.TensorMode where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_mode :  state values indices input dimension keepdim -> void
+foreign import ccall "THCTensorMode.h THCudaDoubleTensor_mode"
+  c_mode :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> IO ()
+
+-- | p_mode : Pointer to function : state values indices input dimension keepdim -> void
+foreign import ccall "THCTensorMode.h &THCudaDoubleTensor_mode"
+  p_mode :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> IO ())
diff --git a/src/Torch/FFI/THC/Double/TensorRandom.hs b/src/Torch/FFI/THC/Double/TensorRandom.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Double/TensorRandom.hs
@@ -0,0 +1,161 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Double.TensorRandom where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_uniform :  state self a b -> void
+foreign import ccall "THCTensorRandom.h THCudaDoubleTensor_uniform"
+  c_uniform :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> CDouble -> CDouble -> IO ()
+
+-- | c_rand :  state r_ size -> void
+foreign import ccall "THCTensorRandom.h THCudaDoubleTensor_rand"
+  c_rand :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THLongStorage -> IO ()
+
+-- | c_randn :  state r_ size -> void
+foreign import ccall "THCTensorRandom.h THCudaDoubleTensor_randn"
+  c_randn :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THLongStorage -> IO ()
+
+-- | c_normal :  state self mean stdv -> void
+foreign import ccall "THCTensorRandom.h THCudaDoubleTensor_normal"
+  c_normal :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> CDouble -> CDouble -> IO ()
+
+-- | c_normal_means :  state self means stddev -> void
+foreign import ccall "THCTensorRandom.h THCudaDoubleTensor_normal_means"
+  c_normal_means :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> IO ()
+
+-- | c_normal_stddevs :  state self mean stddevs -> void
+foreign import ccall "THCTensorRandom.h THCudaDoubleTensor_normal_stddevs"
+  c_normal_stddevs :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> CDouble -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_normal_means_stddevs :  state self means stddevs -> void
+foreign import ccall "THCTensorRandom.h THCudaDoubleTensor_normal_means_stddevs"
+  c_normal_means_stddevs :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_logNormal :  state self mean stdv -> void
+foreign import ccall "THCTensorRandom.h THCudaDoubleTensor_logNormal"
+  c_logNormal :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> CDouble -> CDouble -> IO ()
+
+-- | c_exponential :  state self lambda -> void
+foreign import ccall "THCTensorRandom.h THCudaDoubleTensor_exponential"
+  c_exponential :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> CDouble -> IO ()
+
+-- | c_cauchy :  state self median sigma -> void
+foreign import ccall "THCTensorRandom.h THCudaDoubleTensor_cauchy"
+  c_cauchy :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> CDouble -> CDouble -> IO ()
+
+-- | c_multinomial :  state self prob_dist n_sample with_replacement -> void
+foreign import ccall "THCTensorRandom.h THCudaDoubleTensor_multinomial"
+  c_multinomial :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> IO ()
+
+-- | c_multinomialAliasSetup :  state probs J q -> void
+foreign import ccall "THCTensorRandom.h THCudaDoubleTensor_multinomialAliasSetup"
+  c_multinomialAliasSetup :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_multinomialAliasDraw :  state self _J _q -> void
+foreign import ccall "THCTensorRandom.h THCudaDoubleTensor_multinomialAliasDraw"
+  c_multinomialAliasDraw :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_random :  state self -> void
+foreign import ccall "THCTensorRandom.h THCudaDoubleTensor_random"
+  c_random :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_clampedRandom :  state self min max -> void
+foreign import ccall "THCTensorRandom.h THCudaDoubleTensor_clampedRandom"
+  c_clampedRandom :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> CLLong -> CLLong -> IO ()
+
+-- | c_cappedRandom :  state self max -> void
+foreign import ccall "THCTensorRandom.h THCudaDoubleTensor_cappedRandom"
+  c_cappedRandom :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> CLLong -> IO ()
+
+-- | c_bernoulli :  state self p -> void
+foreign import ccall "THCTensorRandom.h THCudaDoubleTensor_bernoulli"
+  c_bernoulli :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> CDouble -> IO ()
+
+-- | c_bernoulli_DoubleTensor :  state self p -> void
+foreign import ccall "THCTensorRandom.h THCudaDoubleTensor_bernoulli_DoubleTensor"
+  c_bernoulli_DoubleTensor :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_geometric :  state self p -> void
+foreign import ccall "THCTensorRandom.h THCudaDoubleTensor_geometric"
+  c_geometric :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> CDouble -> IO ()
+
+-- | p_uniform : Pointer to function : state self a b -> void
+foreign import ccall "THCTensorRandom.h &THCudaDoubleTensor_uniform"
+  p_uniform :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> CDouble -> CDouble -> IO ())
+
+-- | p_rand : Pointer to function : state r_ size -> void
+foreign import ccall "THCTensorRandom.h &THCudaDoubleTensor_rand"
+  p_rand :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THLongStorage -> IO ())
+
+-- | p_randn : Pointer to function : state r_ size -> void
+foreign import ccall "THCTensorRandom.h &THCudaDoubleTensor_randn"
+  p_randn :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THLongStorage -> IO ())
+
+-- | p_normal : Pointer to function : state self mean stdv -> void
+foreign import ccall "THCTensorRandom.h &THCudaDoubleTensor_normal"
+  p_normal :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> CDouble -> CDouble -> IO ())
+
+-- | p_normal_means : Pointer to function : state self means stddev -> void
+foreign import ccall "THCTensorRandom.h &THCudaDoubleTensor_normal_means"
+  p_normal_means :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CDouble -> IO ())
+
+-- | p_normal_stddevs : Pointer to function : state self mean stddevs -> void
+foreign import ccall "THCTensorRandom.h &THCudaDoubleTensor_normal_stddevs"
+  p_normal_stddevs :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> CDouble -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_normal_means_stddevs : Pointer to function : state self means stddevs -> void
+foreign import ccall "THCTensorRandom.h &THCudaDoubleTensor_normal_means_stddevs"
+  p_normal_means_stddevs :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_logNormal : Pointer to function : state self mean stdv -> void
+foreign import ccall "THCTensorRandom.h &THCudaDoubleTensor_logNormal"
+  p_logNormal :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> CDouble -> CDouble -> IO ())
+
+-- | p_exponential : Pointer to function : state self lambda -> void
+foreign import ccall "THCTensorRandom.h &THCudaDoubleTensor_exponential"
+  p_exponential :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> CDouble -> IO ())
+
+-- | p_cauchy : Pointer to function : state self median sigma -> void
+foreign import ccall "THCTensorRandom.h &THCudaDoubleTensor_cauchy"
+  p_cauchy :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> CDouble -> CDouble -> IO ())
+
+-- | p_multinomial : Pointer to function : state self prob_dist n_sample with_replacement -> void
+foreign import ccall "THCTensorRandom.h &THCudaDoubleTensor_multinomial"
+  p_multinomial :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> IO ())
+
+-- | p_multinomialAliasSetup : Pointer to function : state probs J q -> void
+foreign import ccall "THCTensorRandom.h &THCudaDoubleTensor_multinomialAliasSetup"
+  p_multinomialAliasSetup :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_multinomialAliasDraw : Pointer to function : state self _J _q -> void
+foreign import ccall "THCTensorRandom.h &THCudaDoubleTensor_multinomialAliasDraw"
+  p_multinomialAliasDraw :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_random : Pointer to function : state self -> void
+foreign import ccall "THCTensorRandom.h &THCudaDoubleTensor_random"
+  p_random :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_clampedRandom : Pointer to function : state self min max -> void
+foreign import ccall "THCTensorRandom.h &THCudaDoubleTensor_clampedRandom"
+  p_clampedRandom :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> CLLong -> CLLong -> IO ())
+
+-- | p_cappedRandom : Pointer to function : state self max -> void
+foreign import ccall "THCTensorRandom.h &THCudaDoubleTensor_cappedRandom"
+  p_cappedRandom :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> CLLong -> IO ())
+
+-- | p_bernoulli : Pointer to function : state self p -> void
+foreign import ccall "THCTensorRandom.h &THCudaDoubleTensor_bernoulli"
+  p_bernoulli :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> CDouble -> IO ())
+
+-- | p_bernoulli_DoubleTensor : Pointer to function : state self p -> void
+foreign import ccall "THCTensorRandom.h &THCudaDoubleTensor_bernoulli_DoubleTensor"
+  p_bernoulli_DoubleTensor :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_geometric : Pointer to function : state self p -> void
+foreign import ccall "THCTensorRandom.h &THCudaDoubleTensor_geometric"
+  p_geometric :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> CDouble -> IO ())
diff --git a/src/Torch/FFI/THC/Double/TensorScatterGather.hs b/src/Torch/FFI/THC/Double/TensorScatterGather.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Double/TensorScatterGather.hs
@@ -0,0 +1,41 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Double.TensorScatterGather where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_gather :  state tensor src dim index -> void
+foreign import ccall "THCTensorScatterGather.h THCudaDoubleTensor_gather"
+  c_gather :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> Ptr C'THCudaLongTensor -> IO ()
+
+-- | c_scatter :  state tensor dim index src -> void
+foreign import ccall "THCTensorScatterGather.h THCudaDoubleTensor_scatter"
+  c_scatter :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> CInt -> Ptr C'THCudaLongTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_scatterAdd :  state tensor dim index src -> void
+foreign import ccall "THCTensorScatterGather.h THCudaDoubleTensor_scatterAdd"
+  c_scatterAdd :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> CInt -> Ptr C'THCudaLongTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_scatterFill :  state tensor dim index value -> void
+foreign import ccall "THCTensorScatterGather.h THCudaDoubleTensor_scatterFill"
+  c_scatterFill :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> CInt -> Ptr C'THCudaLongTensor -> CDouble -> IO ()
+
+-- | p_gather : Pointer to function : state tensor src dim index -> void
+foreign import ccall "THCTensorScatterGather.h &THCudaDoubleTensor_gather"
+  p_gather :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaDoubleTensor -> CInt -> Ptr C'THCudaLongTensor -> IO ())
+
+-- | p_scatter : Pointer to function : state tensor dim index src -> void
+foreign import ccall "THCTensorScatterGather.h &THCudaDoubleTensor_scatter"
+  p_scatter :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> CInt -> Ptr C'THCudaLongTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_scatterAdd : Pointer to function : state tensor dim index src -> void
+foreign import ccall "THCTensorScatterGather.h &THCudaDoubleTensor_scatterAdd"
+  p_scatterAdd :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> CInt -> Ptr C'THCudaLongTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_scatterFill : Pointer to function : state tensor dim index value -> void
+foreign import ccall "THCTensorScatterGather.h &THCudaDoubleTensor_scatterFill"
+  p_scatterFill :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> CInt -> Ptr C'THCudaLongTensor -> CDouble -> IO ())
diff --git a/src/Torch/FFI/THC/Double/TensorSort.hs b/src/Torch/FFI/THC/Double/TensorSort.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Double/TensorSort.hs
@@ -0,0 +1,25 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Double.TensorSort where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_sortKeyValueInplace :  state keys values dim order -> void
+foreign import ccall "THCTensorSort.h THCudaDoubleTensor_sortKeyValueInplace"
+  c_sortKeyValueInplace :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaLongTensor -> CInt -> CInt -> IO ()
+
+-- | c_sort :  state sorted indices input dim order -> void
+foreign import ccall "THCTensorSort.h THCudaDoubleTensor_sort"
+  c_sort :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> IO ()
+
+-- | p_sortKeyValueInplace : Pointer to function : state keys values dim order -> void
+foreign import ccall "THCTensorSort.h &THCudaDoubleTensor_sortKeyValueInplace"
+  p_sortKeyValueInplace :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaLongTensor -> CInt -> CInt -> IO ())
+
+-- | p_sort : Pointer to function : state sorted indices input dim order -> void
+foreign import ccall "THCTensorSort.h &THCudaDoubleTensor_sort"
+  p_sort :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaDoubleTensor -> CInt -> CInt -> IO ())
diff --git a/src/Torch/FFI/THC/Double/TensorTopK.hs b/src/Torch/FFI/THC/Double/TensorTopK.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Double/TensorTopK.hs
@@ -0,0 +1,17 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Double.TensorTopK where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_topk :  state topK indices input k dim dir sorted -> void
+foreign import ccall "THCTensorTopK.h THCudaDoubleTensor_topk"
+  c_topk :: Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaDoubleTensor -> CLLong -> CInt -> CInt -> CInt -> IO ()
+
+-- | p_topk : Pointer to function : state topK indices input k dim dir sorted -> void
+foreign import ccall "THCTensorTopK.h &THCudaDoubleTensor_topk"
+  p_topk :: FunPtr (Ptr C'THCState -> Ptr C'THCudaDoubleTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaDoubleTensor -> CLLong -> CInt -> CInt -> CInt -> IO ())
diff --git a/src/Torch/FFI/THC/Float/Storage.hs b/src/Torch/FFI/THC/Float/Storage.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Float/Storage.hs
@@ -0,0 +1,161 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Float.Storage where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_data :  state  -> real *
+foreign import ccall "THCStorage.h THCudaFloatStorage_data"
+  c_data :: Ptr C'THCState -> Ptr C'THCFloatStorage -> IO (Ptr CFloat)
+
+-- | c_size :  state  -> ptrdiff_t
+foreign import ccall "THCStorage.h THCudaFloatStorage_size"
+  c_size :: Ptr C'THCState -> Ptr C'THCFloatStorage -> IO CPtrdiff
+
+-- | c_set :  state    -> void
+foreign import ccall "THCStorage.h THCudaFloatStorage_set"
+  c_set :: Ptr C'THCState -> Ptr C'THCFloatStorage -> CPtrdiff -> CFloat -> IO ()
+
+-- | c_get :  state   -> real
+foreign import ccall "THCStorage.h THCudaFloatStorage_get"
+  c_get :: Ptr C'THCState -> Ptr C'THCFloatStorage -> CPtrdiff -> IO CFloat
+
+-- | c_new :  state -> THCStorage *
+foreign import ccall "THCStorage.h THCudaFloatStorage_new"
+  c_new :: Ptr C'THCState -> IO (Ptr C'THCFloatStorage)
+
+-- | c_newWithSize :  state size -> THCStorage *
+foreign import ccall "THCStorage.h THCudaFloatStorage_newWithSize"
+  c_newWithSize :: Ptr C'THCState -> CPtrdiff -> IO (Ptr C'THCFloatStorage)
+
+-- | c_newWithSize1 :  state  -> THCStorage *
+foreign import ccall "THCStorage.h THCudaFloatStorage_newWithSize1"
+  c_newWithSize1 :: Ptr C'THCState -> CFloat -> IO (Ptr C'THCFloatStorage)
+
+-- | c_newWithSize2 :  state   -> THCStorage *
+foreign import ccall "THCStorage.h THCudaFloatStorage_newWithSize2"
+  c_newWithSize2 :: Ptr C'THCState -> CFloat -> CFloat -> IO (Ptr C'THCFloatStorage)
+
+-- | c_newWithSize3 :  state    -> THCStorage *
+foreign import ccall "THCStorage.h THCudaFloatStorage_newWithSize3"
+  c_newWithSize3 :: Ptr C'THCState -> CFloat -> CFloat -> CFloat -> IO (Ptr C'THCFloatStorage)
+
+-- | c_newWithSize4 :  state     -> THCStorage *
+foreign import ccall "THCStorage.h THCudaFloatStorage_newWithSize4"
+  c_newWithSize4 :: Ptr C'THCState -> CFloat -> CFloat -> CFloat -> CFloat -> IO (Ptr C'THCFloatStorage)
+
+-- | c_newWithMapping :  state filename size shared -> THCStorage *
+foreign import ccall "THCStorage.h THCudaFloatStorage_newWithMapping"
+  c_newWithMapping :: Ptr C'THCState -> Ptr CChar -> CPtrdiff -> CInt -> IO (Ptr C'THCFloatStorage)
+
+-- | c_newWithData :  state data size -> THCStorage *
+foreign import ccall "THCStorage.h THCudaFloatStorage_newWithData"
+  c_newWithData :: Ptr C'THCState -> Ptr CFloat -> CPtrdiff -> IO (Ptr C'THCFloatStorage)
+
+-- | c_setFlag :  state storage flag -> void
+foreign import ccall "THCStorage.h THCudaFloatStorage_setFlag"
+  c_setFlag :: Ptr C'THCState -> Ptr C'THCFloatStorage -> CChar -> IO ()
+
+-- | c_clearFlag :  state storage flag -> void
+foreign import ccall "THCStorage.h THCudaFloatStorage_clearFlag"
+  c_clearFlag :: Ptr C'THCState -> Ptr C'THCFloatStorage -> CChar -> IO ()
+
+-- | c_retain :  state storage -> void
+foreign import ccall "THCStorage.h THCudaFloatStorage_retain"
+  c_retain :: Ptr C'THCState -> Ptr C'THCFloatStorage -> IO ()
+
+-- | c_free :  state storage -> void
+foreign import ccall "THCStorage.h THCudaFloatStorage_free"
+  c_free :: Ptr C'THCState -> Ptr C'THCFloatStorage -> IO ()
+
+-- | c_resize :  state storage size -> void
+foreign import ccall "THCStorage.h THCudaFloatStorage_resize"
+  c_resize :: Ptr C'THCState -> Ptr C'THCFloatStorage -> CPtrdiff -> IO ()
+
+-- | c_fill :  state storage value -> void
+foreign import ccall "THCStorage.h THCudaFloatStorage_fill"
+  c_fill :: Ptr C'THCState -> Ptr C'THCFloatStorage -> CFloat -> IO ()
+
+-- | c_getDevice :  state storage -> int
+foreign import ccall "THCStorage.h THCudaFloatStorage_getDevice"
+  c_getDevice :: Ptr C'THCState -> Ptr C'THCFloatStorage -> IO CInt
+
+-- | p_data : Pointer to function : state  -> real *
+foreign import ccall "THCStorage.h &THCudaFloatStorage_data"
+  p_data :: FunPtr (Ptr C'THCState -> Ptr C'THCFloatStorage -> IO (Ptr CFloat))
+
+-- | p_size : Pointer to function : state  -> ptrdiff_t
+foreign import ccall "THCStorage.h &THCudaFloatStorage_size"
+  p_size :: FunPtr (Ptr C'THCState -> Ptr C'THCFloatStorage -> IO CPtrdiff)
+
+-- | p_set : Pointer to function : state    -> void
+foreign import ccall "THCStorage.h &THCudaFloatStorage_set"
+  p_set :: FunPtr (Ptr C'THCState -> Ptr C'THCFloatStorage -> CPtrdiff -> CFloat -> IO ())
+
+-- | p_get : Pointer to function : state   -> real
+foreign import ccall "THCStorage.h &THCudaFloatStorage_get"
+  p_get :: FunPtr (Ptr C'THCState -> Ptr C'THCFloatStorage -> CPtrdiff -> IO CFloat)
+
+-- | p_new : Pointer to function : state -> THCStorage *
+foreign import ccall "THCStorage.h &THCudaFloatStorage_new"
+  p_new :: FunPtr (Ptr C'THCState -> IO (Ptr C'THCFloatStorage))
+
+-- | p_newWithSize : Pointer to function : state size -> THCStorage *
+foreign import ccall "THCStorage.h &THCudaFloatStorage_newWithSize"
+  p_newWithSize :: FunPtr (Ptr C'THCState -> CPtrdiff -> IO (Ptr C'THCFloatStorage))
+
+-- | p_newWithSize1 : Pointer to function : state  -> THCStorage *
+foreign import ccall "THCStorage.h &THCudaFloatStorage_newWithSize1"
+  p_newWithSize1 :: FunPtr (Ptr C'THCState -> CFloat -> IO (Ptr C'THCFloatStorage))
+
+-- | p_newWithSize2 : Pointer to function : state   -> THCStorage *
+foreign import ccall "THCStorage.h &THCudaFloatStorage_newWithSize2"
+  p_newWithSize2 :: FunPtr (Ptr C'THCState -> CFloat -> CFloat -> IO (Ptr C'THCFloatStorage))
+
+-- | p_newWithSize3 : Pointer to function : state    -> THCStorage *
+foreign import ccall "THCStorage.h &THCudaFloatStorage_newWithSize3"
+  p_newWithSize3 :: FunPtr (Ptr C'THCState -> CFloat -> CFloat -> CFloat -> IO (Ptr C'THCFloatStorage))
+
+-- | p_newWithSize4 : Pointer to function : state     -> THCStorage *
+foreign import ccall "THCStorage.h &THCudaFloatStorage_newWithSize4"
+  p_newWithSize4 :: FunPtr (Ptr C'THCState -> CFloat -> CFloat -> CFloat -> CFloat -> IO (Ptr C'THCFloatStorage))
+
+-- | p_newWithMapping : Pointer to function : state filename size shared -> THCStorage *
+foreign import ccall "THCStorage.h &THCudaFloatStorage_newWithMapping"
+  p_newWithMapping :: FunPtr (Ptr C'THCState -> Ptr CChar -> CPtrdiff -> CInt -> IO (Ptr C'THCFloatStorage))
+
+-- | p_newWithData : Pointer to function : state data size -> THCStorage *
+foreign import ccall "THCStorage.h &THCudaFloatStorage_newWithData"
+  p_newWithData :: FunPtr (Ptr C'THCState -> Ptr CFloat -> CPtrdiff -> IO (Ptr C'THCFloatStorage))
+
+-- | p_setFlag : Pointer to function : state storage flag -> void
+foreign import ccall "THCStorage.h &THCudaFloatStorage_setFlag"
+  p_setFlag :: FunPtr (Ptr C'THCState -> Ptr C'THCFloatStorage -> CChar -> IO ())
+
+-- | p_clearFlag : Pointer to function : state storage flag -> void
+foreign import ccall "THCStorage.h &THCudaFloatStorage_clearFlag"
+  p_clearFlag :: FunPtr (Ptr C'THCState -> Ptr C'THCFloatStorage -> CChar -> IO ())
+
+-- | p_retain : Pointer to function : state storage -> void
+foreign import ccall "THCStorage.h &THCudaFloatStorage_retain"
+  p_retain :: FunPtr (Ptr C'THCState -> Ptr C'THCFloatStorage -> IO ())
+
+-- | p_free : Pointer to function : state storage -> void
+foreign import ccall "THCStorage.h &THCudaFloatStorage_free"
+  p_free :: FunPtr (Ptr C'THCState -> Ptr C'THCFloatStorage -> IO ())
+
+-- | p_resize : Pointer to function : state storage size -> void
+foreign import ccall "THCStorage.h &THCudaFloatStorage_resize"
+  p_resize :: FunPtr (Ptr C'THCState -> Ptr C'THCFloatStorage -> CPtrdiff -> IO ())
+
+-- | p_fill : Pointer to function : state storage value -> void
+foreign import ccall "THCStorage.h &THCudaFloatStorage_fill"
+  p_fill :: FunPtr (Ptr C'THCState -> Ptr C'THCFloatStorage -> CFloat -> IO ())
+
+-- | p_getDevice : Pointer to function : state storage -> int
+foreign import ccall "THCStorage.h &THCudaFloatStorage_getDevice"
+  p_getDevice :: FunPtr (Ptr C'THCState -> Ptr C'THCFloatStorage -> IO CInt)
diff --git a/src/Torch/FFI/THC/Float/StorageCopy.hs b/src/Torch/FFI/THC/Float/StorageCopy.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Float/StorageCopy.hs
@@ -0,0 +1,113 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Float.StorageCopy where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_rawCopy :  state storage src -> void
+foreign import ccall "THCStorageCopy.h THCudaFloatStorage_rawCopy"
+  c_rawCopy :: Ptr C'THCState -> Ptr C'THCFloatStorage -> Ptr CFloat -> IO ()
+
+-- | c_copy :  state storage src -> void
+foreign import ccall "THCStorageCopy.h THCudaFloatStorage_copy"
+  c_copy :: Ptr C'THCState -> Ptr C'THCFloatStorage -> Ptr C'THCFloatStorage -> IO ()
+
+-- | c_copyByte :  state storage src -> void
+foreign import ccall "THCStorageCopy.h THCudaFloatStorage_copyByte"
+  c_copyByte :: Ptr C'THCState -> Ptr C'THCFloatStorage -> Ptr C'THByteStorage -> IO ()
+
+-- | c_copyChar :  state storage src -> void
+foreign import ccall "THCStorageCopy.h THCudaFloatStorage_copyChar"
+  c_copyChar :: Ptr C'THCState -> Ptr C'THCFloatStorage -> Ptr C'THCharStorage -> IO ()
+
+-- | c_copyShort :  state storage src -> void
+foreign import ccall "THCStorageCopy.h THCudaFloatStorage_copyShort"
+  c_copyShort :: Ptr C'THCState -> Ptr C'THCFloatStorage -> Ptr C'THShortStorage -> IO ()
+
+-- | c_copyInt :  state storage src -> void
+foreign import ccall "THCStorageCopy.h THCudaFloatStorage_copyInt"
+  c_copyInt :: Ptr C'THCState -> Ptr C'THCFloatStorage -> Ptr C'THIntStorage -> IO ()
+
+-- | c_copyLong :  state storage src -> void
+foreign import ccall "THCStorageCopy.h THCudaFloatStorage_copyLong"
+  c_copyLong :: Ptr C'THCState -> Ptr C'THCFloatStorage -> Ptr C'THLongStorage -> IO ()
+
+-- | c_copyFloat :  state storage src -> void
+foreign import ccall "THCStorageCopy.h THCudaFloatStorage_copyFloat"
+  c_copyFloat :: Ptr C'THCState -> Ptr C'THCFloatStorage -> Ptr C'THFloatStorage -> IO ()
+
+-- | c_copyDouble :  state storage src -> void
+foreign import ccall "THCStorageCopy.h THCudaFloatStorage_copyDouble"
+  c_copyDouble :: Ptr C'THCState -> Ptr C'THCFloatStorage -> Ptr C'THDoubleStorage -> IO ()
+
+-- | c_copyHalf :  state storage src -> void
+foreign import ccall "THCStorageCopy.h THCudaFloatStorage_copyHalf"
+  c_copyHalf :: Ptr C'THCState -> Ptr C'THCFloatStorage -> Ptr C'THHalfStorage -> IO ()
+
+-- | c_thCopyCuda :  state self src -> void
+foreign import ccall "THCStorageCopy.h THFloatStorage_copyCuda"
+  c_thCopyCuda :: Ptr C'THCState -> Ptr C'THFloatStorage -> Ptr C'THCFloatStorage -> IO ()
+
+-- | c_copyCuda :  state self src -> void
+foreign import ccall "THCStorageCopy.h THCudaFloatStorage_copyCuda"
+  c_copyCuda :: Ptr C'THCState -> Ptr C'THCFloatStorage -> Ptr C'THCFloatStorage -> IO ()
+
+-- | c_copyCPU :  state self src -> void
+foreign import ccall "THCStorageCopy.h THCudaFloatStorage_copyCPU"
+  c_copyCPU :: Ptr C'THCState -> Ptr C'THCFloatStorage -> Ptr C'THFloatStorage -> IO ()
+
+-- | p_rawCopy : Pointer to function : state storage src -> void
+foreign import ccall "THCStorageCopy.h &THCudaFloatStorage_rawCopy"
+  p_rawCopy :: FunPtr (Ptr C'THCState -> Ptr C'THCFloatStorage -> Ptr CFloat -> IO ())
+
+-- | p_copy : Pointer to function : state storage src -> void
+foreign import ccall "THCStorageCopy.h &THCudaFloatStorage_copy"
+  p_copy :: FunPtr (Ptr C'THCState -> Ptr C'THCFloatStorage -> Ptr C'THCFloatStorage -> IO ())
+
+-- | p_copyByte : Pointer to function : state storage src -> void
+foreign import ccall "THCStorageCopy.h &THCudaFloatStorage_copyByte"
+  p_copyByte :: FunPtr (Ptr C'THCState -> Ptr C'THCFloatStorage -> Ptr C'THByteStorage -> IO ())
+
+-- | p_copyChar : Pointer to function : state storage src -> void
+foreign import ccall "THCStorageCopy.h &THCudaFloatStorage_copyChar"
+  p_copyChar :: FunPtr (Ptr C'THCState -> Ptr C'THCFloatStorage -> Ptr C'THCharStorage -> IO ())
+
+-- | p_copyShort : Pointer to function : state storage src -> void
+foreign import ccall "THCStorageCopy.h &THCudaFloatStorage_copyShort"
+  p_copyShort :: FunPtr (Ptr C'THCState -> Ptr C'THCFloatStorage -> Ptr C'THShortStorage -> IO ())
+
+-- | p_copyInt : Pointer to function : state storage src -> void
+foreign import ccall "THCStorageCopy.h &THCudaFloatStorage_copyInt"
+  p_copyInt :: FunPtr (Ptr C'THCState -> Ptr C'THCFloatStorage -> Ptr C'THIntStorage -> IO ())
+
+-- | p_copyLong : Pointer to function : state storage src -> void
+foreign import ccall "THCStorageCopy.h &THCudaFloatStorage_copyLong"
+  p_copyLong :: FunPtr (Ptr C'THCState -> Ptr C'THCFloatStorage -> Ptr C'THLongStorage -> IO ())
+
+-- | p_copyFloat : Pointer to function : state storage src -> void
+foreign import ccall "THCStorageCopy.h &THCudaFloatStorage_copyFloat"
+  p_copyFloat :: FunPtr (Ptr C'THCState -> Ptr C'THCFloatStorage -> Ptr C'THFloatStorage -> IO ())
+
+-- | p_copyDouble : Pointer to function : state storage src -> void
+foreign import ccall "THCStorageCopy.h &THCudaFloatStorage_copyDouble"
+  p_copyDouble :: FunPtr (Ptr C'THCState -> Ptr C'THCFloatStorage -> Ptr C'THDoubleStorage -> IO ())
+
+-- | p_copyHalf : Pointer to function : state storage src -> void
+foreign import ccall "THCStorageCopy.h &THCudaFloatStorage_copyHalf"
+  p_copyHalf :: FunPtr (Ptr C'THCState -> Ptr C'THCFloatStorage -> Ptr C'THHalfStorage -> IO ())
+
+-- | p_thCopyCuda : Pointer to function : state self src -> void
+foreign import ccall "THCStorageCopy.h &THFloatStorage_copyCuda"
+  p_thCopyCuda :: FunPtr (Ptr C'THCState -> Ptr C'THFloatStorage -> Ptr C'THCFloatStorage -> IO ())
+
+-- | p_copyCuda : Pointer to function : state self src -> void
+foreign import ccall "THCStorageCopy.h &THCudaFloatStorage_copyCuda"
+  p_copyCuda :: FunPtr (Ptr C'THCState -> Ptr C'THCFloatStorage -> Ptr C'THCFloatStorage -> IO ())
+
+-- | p_copyCPU : Pointer to function : state self src -> void
+foreign import ccall "THCStorageCopy.h &THCudaFloatStorage_copyCPU"
+  p_copyCPU :: FunPtr (Ptr C'THCState -> Ptr C'THCFloatStorage -> Ptr C'THFloatStorage -> IO ())
diff --git a/src/Torch/FFI/THC/Float/Tensor.hs b/src/Torch/FFI/THC/Float/Tensor.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Float/Tensor.hs
@@ -0,0 +1,593 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Float.Tensor where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_storage :  state self -> THCStorage *
+foreign import ccall "THCTensor.h THCudaFloatTensor_storage"
+  c_storage :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> IO (Ptr C'THCFloatStorage)
+
+-- | c_storageOffset :  state self -> ptrdiff_t
+foreign import ccall "THCTensor.h THCudaFloatTensor_storageOffset"
+  c_storageOffset :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> IO CPtrdiff
+
+-- | c_nDimension :  state self -> int
+foreign import ccall "THCTensor.h THCudaFloatTensor_nDimension"
+  c_nDimension :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> IO CInt
+
+-- | c_size :  state self dim -> int64_t
+foreign import ccall "THCTensor.h THCudaFloatTensor_size"
+  c_size :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> CInt -> IO CLLong
+
+-- | c_stride :  state self dim -> int64_t
+foreign import ccall "THCTensor.h THCudaFloatTensor_stride"
+  c_stride :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> CInt -> IO CLLong
+
+-- | c_newSizeOf :  state self -> THLongStorage *
+foreign import ccall "THCTensor.h THCudaFloatTensor_newSizeOf"
+  c_newSizeOf :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> IO (Ptr C'THLongStorage)
+
+-- | c_newStrideOf :  state self -> THLongStorage *
+foreign import ccall "THCTensor.h THCudaFloatTensor_newStrideOf"
+  c_newStrideOf :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> IO (Ptr C'THLongStorage)
+
+-- | c_data :  state self -> real *
+foreign import ccall "THCTensor.h THCudaFloatTensor_data"
+  c_data :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> IO (Ptr CFloat)
+
+-- | c_setFlag :  state self flag -> void
+foreign import ccall "THCTensor.h THCudaFloatTensor_setFlag"
+  c_setFlag :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> CChar -> IO ()
+
+-- | c_clearFlag :  state self flag -> void
+foreign import ccall "THCTensor.h THCudaFloatTensor_clearFlag"
+  c_clearFlag :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> CChar -> IO ()
+
+-- | c_new :  state -> THCTensor *
+foreign import ccall "THCTensor.h THCudaFloatTensor_new"
+  c_new :: Ptr C'THCState -> IO (Ptr C'THCudaFloatTensor)
+
+-- | c_newWithTensor :  state tensor -> THCTensor *
+foreign import ccall "THCTensor.h THCudaFloatTensor_newWithTensor"
+  c_newWithTensor :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> IO (Ptr C'THCudaFloatTensor)
+
+-- | c_newWithStorage :  state storage_ storageOffset_ size_ stride_ -> THCTensor *
+foreign import ccall "THCTensor.h THCudaFloatTensor_newWithStorage"
+  c_newWithStorage :: Ptr C'THCState -> Ptr C'THCFloatStorage -> CPtrdiff -> Ptr C'THLongStorage -> Ptr C'THLongStorage -> IO (Ptr C'THCudaFloatTensor)
+
+-- | c_newWithStorage1d :  state storage_ storageOffset_ size0_ stride0_ -> THCTensor *
+foreign import ccall "THCTensor.h THCudaFloatTensor_newWithStorage1d"
+  c_newWithStorage1d :: Ptr C'THCState -> Ptr C'THCFloatStorage -> CPtrdiff -> CLLong -> CLLong -> IO (Ptr C'THCudaFloatTensor)
+
+-- | c_newWithStorage2d :  state storage_ storageOffset_ size0_ stride0_ size1_ stride1_ -> THCTensor *
+foreign import ccall "THCTensor.h THCudaFloatTensor_newWithStorage2d"
+  c_newWithStorage2d :: Ptr C'THCState -> Ptr C'THCFloatStorage -> CPtrdiff -> CLLong -> CLLong -> CLLong -> CLLong -> IO (Ptr C'THCudaFloatTensor)
+
+-- | c_newWithStorage3d :  state storage_ storageOffset_ size0_ stride0_ size1_ stride1_ size2_ stride2_ -> THCTensor *
+foreign import ccall "THCTensor.h THCudaFloatTensor_newWithStorage3d"
+  c_newWithStorage3d :: Ptr C'THCState -> Ptr C'THCFloatStorage -> CPtrdiff -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> IO (Ptr C'THCudaFloatTensor)
+
+-- | c_newWithStorage4d :  state storage_ storageOffset_ size0_ stride0_ size1_ stride1_ size2_ stride2_ size3_ stride3_ -> THCTensor *
+foreign import ccall "THCTensor.h THCudaFloatTensor_newWithStorage4d"
+  c_newWithStorage4d :: Ptr C'THCState -> Ptr C'THCFloatStorage -> CPtrdiff -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> IO (Ptr C'THCudaFloatTensor)
+
+-- | c_newWithSize :  state size_ stride_ -> THCTensor *
+foreign import ccall "THCTensor.h THCudaFloatTensor_newWithSize"
+  c_newWithSize :: Ptr C'THCState -> Ptr C'THLongStorage -> Ptr C'THLongStorage -> IO (Ptr C'THCudaFloatTensor)
+
+-- | c_newWithSize1d :  state size0_ -> THCTensor *
+foreign import ccall "THCTensor.h THCudaFloatTensor_newWithSize1d"
+  c_newWithSize1d :: Ptr C'THCState -> CLLong -> IO (Ptr C'THCudaFloatTensor)
+
+-- | c_newWithSize2d :  state size0_ size1_ -> THCTensor *
+foreign import ccall "THCTensor.h THCudaFloatTensor_newWithSize2d"
+  c_newWithSize2d :: Ptr C'THCState -> CLLong -> CLLong -> IO (Ptr C'THCudaFloatTensor)
+
+-- | c_newWithSize3d :  state size0_ size1_ size2_ -> THCTensor *
+foreign import ccall "THCTensor.h THCudaFloatTensor_newWithSize3d"
+  c_newWithSize3d :: Ptr C'THCState -> CLLong -> CLLong -> CLLong -> IO (Ptr C'THCudaFloatTensor)
+
+-- | c_newWithSize4d :  state size0_ size1_ size2_ size3_ -> THCTensor *
+foreign import ccall "THCTensor.h THCudaFloatTensor_newWithSize4d"
+  c_newWithSize4d :: Ptr C'THCState -> CLLong -> CLLong -> CLLong -> CLLong -> IO (Ptr C'THCudaFloatTensor)
+
+-- | c_newClone :  state self -> THCTensor *
+foreign import ccall "THCTensor.h THCudaFloatTensor_newClone"
+  c_newClone :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> IO (Ptr C'THCudaFloatTensor)
+
+-- | c_newContiguous :  state tensor -> THCTensor *
+foreign import ccall "THCTensor.h THCudaFloatTensor_newContiguous"
+  c_newContiguous :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> IO (Ptr C'THCudaFloatTensor)
+
+-- | c_newSelect :  state tensor dimension_ sliceIndex_ -> THCTensor *
+foreign import ccall "THCTensor.h THCudaFloatTensor_newSelect"
+  c_newSelect :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> CInt -> CLLong -> IO (Ptr C'THCudaFloatTensor)
+
+-- | c_newNarrow :  state tensor dimension_ firstIndex_ size_ -> THCTensor *
+foreign import ccall "THCTensor.h THCudaFloatTensor_newNarrow"
+  c_newNarrow :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> CInt -> CLLong -> CLLong -> IO (Ptr C'THCudaFloatTensor)
+
+-- | c_newTranspose :  state tensor dimension1_ dimension2_ -> THCTensor *
+foreign import ccall "THCTensor.h THCudaFloatTensor_newTranspose"
+  c_newTranspose :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> CInt -> CInt -> IO (Ptr C'THCudaFloatTensor)
+
+-- | c_newUnfold :  state tensor dimension_ size_ step_ -> THCTensor *
+foreign import ccall "THCTensor.h THCudaFloatTensor_newUnfold"
+  c_newUnfold :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> CInt -> CLLong -> CLLong -> IO (Ptr C'THCudaFloatTensor)
+
+-- | c_newView :  state tensor size -> THCTensor *
+foreign import ccall "THCTensor.h THCudaFloatTensor_newView"
+  c_newView :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THLongStorage -> IO (Ptr C'THCudaFloatTensor)
+
+-- | c_newFoldBatchDim :  state input -> THCTensor *
+foreign import ccall "THCTensor.h THCudaFloatTensor_newFoldBatchDim"
+  c_newFoldBatchDim :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> IO (Ptr C'THCudaFloatTensor)
+
+-- | c_newExpand :  state tensor size -> THCTensor *
+foreign import ccall "THCTensor.h THCudaFloatTensor_newExpand"
+  c_newExpand :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THLongStorage -> IO (Ptr C'THCudaFloatTensor)
+
+-- | c_expand :  state r tensor sizes -> void
+foreign import ccall "THCTensor.h THCudaFloatTensor_expand"
+  c_expand :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> Ptr C'THLongStorage -> IO ()
+
+-- | c_expandNd :  state rets ops count -> void
+foreign import ccall "THCTensor.h THCudaFloatTensor_expandNd"
+  c_expandNd :: Ptr C'THCState -> Ptr (Ptr C'THCudaFloatTensor) -> Ptr (Ptr C'THCudaFloatTensor) -> CInt -> IO ()
+
+-- | c_resize :  state tensor size stride -> void
+foreign import ccall "THCTensor.h THCudaFloatTensor_resize"
+  c_resize :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THLongStorage -> Ptr C'THLongStorage -> IO ()
+
+-- | c_resizeAs :  state tensor src -> void
+foreign import ccall "THCTensor.h THCudaFloatTensor_resizeAs"
+  c_resizeAs :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ()
+
+-- | c_resize1d :  state tensor size0_ -> void
+foreign import ccall "THCTensor.h THCudaFloatTensor_resize1d"
+  c_resize1d :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> CLLong -> IO ()
+
+-- | c_resize2d :  state tensor size0_ size1_ -> void
+foreign import ccall "THCTensor.h THCudaFloatTensor_resize2d"
+  c_resize2d :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> CLLong -> CLLong -> IO ()
+
+-- | c_resize3d :  state tensor size0_ size1_ size2_ -> void
+foreign import ccall "THCTensor.h THCudaFloatTensor_resize3d"
+  c_resize3d :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> CLLong -> CLLong -> CLLong -> IO ()
+
+-- | c_resize4d :  state tensor size0_ size1_ size2_ size3_ -> void
+foreign import ccall "THCTensor.h THCudaFloatTensor_resize4d"
+  c_resize4d :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> CLLong -> CLLong -> CLLong -> CLLong -> IO ()
+
+-- | c_resize5d :  state tensor size0_ size1_ size2_ size3_ size4_ -> void
+foreign import ccall "THCTensor.h THCudaFloatTensor_resize5d"
+  c_resize5d :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> IO ()
+
+-- | c_resizeNd :  state tensor nDimension size stride -> void
+foreign import ccall "THCTensor.h THCudaFloatTensor_resizeNd"
+  c_resizeNd :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> CInt -> Ptr CLLong -> Ptr CLLong -> IO ()
+
+-- | c_set :  state self src -> void
+foreign import ccall "THCTensor.h THCudaFloatTensor_set"
+  c_set :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ()
+
+-- | c_setStorage :  state self storage_ storageOffset_ size_ stride_ -> void
+foreign import ccall "THCTensor.h THCudaFloatTensor_setStorage"
+  c_setStorage :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCFloatStorage -> CPtrdiff -> Ptr C'THLongStorage -> Ptr C'THLongStorage -> IO ()
+
+-- | c_setStorageNd :  state self storage storageOffset nDimension size stride -> void
+foreign import ccall "THCTensor.h THCudaFloatTensor_setStorageNd"
+  c_setStorageNd :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCFloatStorage -> CPtrdiff -> CInt -> Ptr CLLong -> Ptr CLLong -> IO ()
+
+-- | c_setStorage1d :  state self storage_ storageOffset_ size0_ stride0_ -> void
+foreign import ccall "THCTensor.h THCudaFloatTensor_setStorage1d"
+  c_setStorage1d :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCFloatStorage -> CPtrdiff -> CLLong -> CLLong -> IO ()
+
+-- | c_setStorage2d :  state self storage_ storageOffset_ size0_ stride0_ size1_ stride1_ -> void
+foreign import ccall "THCTensor.h THCudaFloatTensor_setStorage2d"
+  c_setStorage2d :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCFloatStorage -> CPtrdiff -> CLLong -> CLLong -> CLLong -> CLLong -> IO ()
+
+-- | c_setStorage3d :  state self storage_ storageOffset_ size0_ stride0_ size1_ stride1_ size2_ stride2_ -> void
+foreign import ccall "THCTensor.h THCudaFloatTensor_setStorage3d"
+  c_setStorage3d :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCFloatStorage -> CPtrdiff -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> IO ()
+
+-- | c_setStorage4d :  state self storage_ storageOffset_ size0_ stride0_ size1_ stride1_ size2_ stride2_ size3_ stride3_ -> void
+foreign import ccall "THCTensor.h THCudaFloatTensor_setStorage4d"
+  c_setStorage4d :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCFloatStorage -> CPtrdiff -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> IO ()
+
+-- | c_narrow :  state self src dimension_ firstIndex_ size_ -> void
+foreign import ccall "THCTensor.h THCudaFloatTensor_narrow"
+  c_narrow :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> CInt -> CLLong -> CLLong -> IO ()
+
+-- | c_select :  state self src dimension_ sliceIndex_ -> void
+foreign import ccall "THCTensor.h THCudaFloatTensor_select"
+  c_select :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> CInt -> CLLong -> IO ()
+
+-- | c_transpose :  state self src dimension1_ dimension2_ -> void
+foreign import ccall "THCTensor.h THCudaFloatTensor_transpose"
+  c_transpose :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> CInt -> CInt -> IO ()
+
+-- | c_unfold :  state self src dimension_ size_ step_ -> void
+foreign import ccall "THCTensor.h THCudaFloatTensor_unfold"
+  c_unfold :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> CInt -> CLLong -> CLLong -> IO ()
+
+-- | c_squeeze :  state self src -> void
+foreign import ccall "THCTensor.h THCudaFloatTensor_squeeze"
+  c_squeeze :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ()
+
+-- | c_squeeze1d :  state self src dimension_ -> void
+foreign import ccall "THCTensor.h THCudaFloatTensor_squeeze1d"
+  c_squeeze1d :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> CInt -> IO ()
+
+-- | c_unsqueeze1d :  state self src dimension_ -> void
+foreign import ccall "THCTensor.h THCudaFloatTensor_unsqueeze1d"
+  c_unsqueeze1d :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> CInt -> IO ()
+
+-- | c_isContiguous :  state self -> int
+foreign import ccall "THCTensor.h THCudaFloatTensor_isContiguous"
+  c_isContiguous :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> IO CInt
+
+-- | c_isSameSizeAs :  state self src -> int
+foreign import ccall "THCTensor.h THCudaFloatTensor_isSameSizeAs"
+  c_isSameSizeAs :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO CInt
+
+-- | c_isSetTo :  state self src -> int
+foreign import ccall "THCTensor.h THCudaFloatTensor_isSetTo"
+  c_isSetTo :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO CInt
+
+-- | c_isSize :  state self dims -> int
+foreign import ccall "THCTensor.h THCudaFloatTensor_isSize"
+  c_isSize :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THLongStorage -> IO CInt
+
+-- | c_nElement :  state self -> ptrdiff_t
+foreign import ccall "THCTensor.h THCudaFloatTensor_nElement"
+  c_nElement :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> IO CPtrdiff
+
+-- | c_retain :  state self -> void
+foreign import ccall "THCTensor.h THCudaFloatTensor_retain"
+  c_retain :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> IO ()
+
+-- | c_free :  state self -> void
+foreign import ccall "THCTensor.h THCudaFloatTensor_free"
+  c_free :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> IO ()
+
+-- | c_freeCopyTo :  state self dst -> void
+foreign import ccall "THCTensor.h THCudaFloatTensor_freeCopyTo"
+  c_freeCopyTo :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ()
+
+-- | c_set1d :  state tensor x0 value -> void
+foreign import ccall "THCTensor.h THCudaFloatTensor_set1d"
+  c_set1d :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> CLLong -> CFloat -> IO ()
+
+-- | c_set2d :  state tensor x0 x1 value -> void
+foreign import ccall "THCTensor.h THCudaFloatTensor_set2d"
+  c_set2d :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> CLLong -> CLLong -> CFloat -> IO ()
+
+-- | c_set3d :  state tensor x0 x1 x2 value -> void
+foreign import ccall "THCTensor.h THCudaFloatTensor_set3d"
+  c_set3d :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> CLLong -> CLLong -> CLLong -> CFloat -> IO ()
+
+-- | c_set4d :  state tensor x0 x1 x2 x3 value -> void
+foreign import ccall "THCTensor.h THCudaFloatTensor_set4d"
+  c_set4d :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> CLLong -> CLLong -> CLLong -> CLLong -> CFloat -> IO ()
+
+-- | c_get1d :  state tensor x0 -> real
+foreign import ccall "THCTensor.h THCudaFloatTensor_get1d"
+  c_get1d :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> CLLong -> IO CFloat
+
+-- | c_get2d :  state tensor x0 x1 -> real
+foreign import ccall "THCTensor.h THCudaFloatTensor_get2d"
+  c_get2d :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> CLLong -> CLLong -> IO CFloat
+
+-- | c_get3d :  state tensor x0 x1 x2 -> real
+foreign import ccall "THCTensor.h THCudaFloatTensor_get3d"
+  c_get3d :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> CLLong -> CLLong -> CLLong -> IO CFloat
+
+-- | c_get4d :  state tensor x0 x1 x2 x3 -> real
+foreign import ccall "THCTensor.h THCudaFloatTensor_get4d"
+  c_get4d :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> CLLong -> CLLong -> CLLong -> CLLong -> IO CFloat
+
+-- | c_getDevice :  state self -> int
+foreign import ccall "THCTensor.h THCudaFloatTensor_getDevice"
+  c_getDevice :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> IO CInt
+
+-- | c_sizeDesc :  state tensor -> THCDescBuff
+foreign import ccall "THCTensor.h THCudaFloatTensor_sizeDesc"
+  c_sizeDesc :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> IO (Ptr C'THCDescBuff)
+
+-- | p_storage : Pointer to function : state self -> THCStorage *
+foreign import ccall "THCTensor.h &THCudaFloatTensor_storage"
+  p_storage :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> IO (Ptr C'THCFloatStorage))
+
+-- | p_storageOffset : Pointer to function : state self -> ptrdiff_t
+foreign import ccall "THCTensor.h &THCudaFloatTensor_storageOffset"
+  p_storageOffset :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> IO CPtrdiff)
+
+-- | p_nDimension : Pointer to function : state self -> int
+foreign import ccall "THCTensor.h &THCudaFloatTensor_nDimension"
+  p_nDimension :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> IO CInt)
+
+-- | p_size : Pointer to function : state self dim -> int64_t
+foreign import ccall "THCTensor.h &THCudaFloatTensor_size"
+  p_size :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> CInt -> IO CLLong)
+
+-- | p_stride : Pointer to function : state self dim -> int64_t
+foreign import ccall "THCTensor.h &THCudaFloatTensor_stride"
+  p_stride :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> CInt -> IO CLLong)
+
+-- | p_newSizeOf : Pointer to function : state self -> THLongStorage *
+foreign import ccall "THCTensor.h &THCudaFloatTensor_newSizeOf"
+  p_newSizeOf :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> IO (Ptr C'THLongStorage))
+
+-- | p_newStrideOf : Pointer to function : state self -> THLongStorage *
+foreign import ccall "THCTensor.h &THCudaFloatTensor_newStrideOf"
+  p_newStrideOf :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> IO (Ptr C'THLongStorage))
+
+-- | p_data : Pointer to function : state self -> real *
+foreign import ccall "THCTensor.h &THCudaFloatTensor_data"
+  p_data :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> IO (Ptr CFloat))
+
+-- | p_setFlag : Pointer to function : state self flag -> void
+foreign import ccall "THCTensor.h &THCudaFloatTensor_setFlag"
+  p_setFlag :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> CChar -> IO ())
+
+-- | p_clearFlag : Pointer to function : state self flag -> void
+foreign import ccall "THCTensor.h &THCudaFloatTensor_clearFlag"
+  p_clearFlag :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> CChar -> IO ())
+
+-- | p_new : Pointer to function : state -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaFloatTensor_new"
+  p_new :: FunPtr (Ptr C'THCState -> IO (Ptr C'THCudaFloatTensor))
+
+-- | p_newWithTensor : Pointer to function : state tensor -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaFloatTensor_newWithTensor"
+  p_newWithTensor :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> IO (Ptr C'THCudaFloatTensor))
+
+-- | p_newWithStorage : Pointer to function : state storage_ storageOffset_ size_ stride_ -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaFloatTensor_newWithStorage"
+  p_newWithStorage :: FunPtr (Ptr C'THCState -> Ptr C'THCFloatStorage -> CPtrdiff -> Ptr C'THLongStorage -> Ptr C'THLongStorage -> IO (Ptr C'THCudaFloatTensor))
+
+-- | p_newWithStorage1d : Pointer to function : state storage_ storageOffset_ size0_ stride0_ -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaFloatTensor_newWithStorage1d"
+  p_newWithStorage1d :: FunPtr (Ptr C'THCState -> Ptr C'THCFloatStorage -> CPtrdiff -> CLLong -> CLLong -> IO (Ptr C'THCudaFloatTensor))
+
+-- | p_newWithStorage2d : Pointer to function : state storage_ storageOffset_ size0_ stride0_ size1_ stride1_ -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaFloatTensor_newWithStorage2d"
+  p_newWithStorage2d :: FunPtr (Ptr C'THCState -> Ptr C'THCFloatStorage -> CPtrdiff -> CLLong -> CLLong -> CLLong -> CLLong -> IO (Ptr C'THCudaFloatTensor))
+
+-- | p_newWithStorage3d : Pointer to function : state storage_ storageOffset_ size0_ stride0_ size1_ stride1_ size2_ stride2_ -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaFloatTensor_newWithStorage3d"
+  p_newWithStorage3d :: FunPtr (Ptr C'THCState -> Ptr C'THCFloatStorage -> CPtrdiff -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> IO (Ptr C'THCudaFloatTensor))
+
+-- | p_newWithStorage4d : Pointer to function : state storage_ storageOffset_ size0_ stride0_ size1_ stride1_ size2_ stride2_ size3_ stride3_ -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaFloatTensor_newWithStorage4d"
+  p_newWithStorage4d :: FunPtr (Ptr C'THCState -> Ptr C'THCFloatStorage -> CPtrdiff -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> IO (Ptr C'THCudaFloatTensor))
+
+-- | p_newWithSize : Pointer to function : state size_ stride_ -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaFloatTensor_newWithSize"
+  p_newWithSize :: FunPtr (Ptr C'THCState -> Ptr C'THLongStorage -> Ptr C'THLongStorage -> IO (Ptr C'THCudaFloatTensor))
+
+-- | p_newWithSize1d : Pointer to function : state size0_ -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaFloatTensor_newWithSize1d"
+  p_newWithSize1d :: FunPtr (Ptr C'THCState -> CLLong -> IO (Ptr C'THCudaFloatTensor))
+
+-- | p_newWithSize2d : Pointer to function : state size0_ size1_ -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaFloatTensor_newWithSize2d"
+  p_newWithSize2d :: FunPtr (Ptr C'THCState -> CLLong -> CLLong -> IO (Ptr C'THCudaFloatTensor))
+
+-- | p_newWithSize3d : Pointer to function : state size0_ size1_ size2_ -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaFloatTensor_newWithSize3d"
+  p_newWithSize3d :: FunPtr (Ptr C'THCState -> CLLong -> CLLong -> CLLong -> IO (Ptr C'THCudaFloatTensor))
+
+-- | p_newWithSize4d : Pointer to function : state size0_ size1_ size2_ size3_ -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaFloatTensor_newWithSize4d"
+  p_newWithSize4d :: FunPtr (Ptr C'THCState -> CLLong -> CLLong -> CLLong -> CLLong -> IO (Ptr C'THCudaFloatTensor))
+
+-- | p_newClone : Pointer to function : state self -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaFloatTensor_newClone"
+  p_newClone :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> IO (Ptr C'THCudaFloatTensor))
+
+-- | p_newContiguous : Pointer to function : state tensor -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaFloatTensor_newContiguous"
+  p_newContiguous :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> IO (Ptr C'THCudaFloatTensor))
+
+-- | p_newSelect : Pointer to function : state tensor dimension_ sliceIndex_ -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaFloatTensor_newSelect"
+  p_newSelect :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> CInt -> CLLong -> IO (Ptr C'THCudaFloatTensor))
+
+-- | p_newNarrow : Pointer to function : state tensor dimension_ firstIndex_ size_ -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaFloatTensor_newNarrow"
+  p_newNarrow :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> CInt -> CLLong -> CLLong -> IO (Ptr C'THCudaFloatTensor))
+
+-- | p_newTranspose : Pointer to function : state tensor dimension1_ dimension2_ -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaFloatTensor_newTranspose"
+  p_newTranspose :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> CInt -> CInt -> IO (Ptr C'THCudaFloatTensor))
+
+-- | p_newUnfold : Pointer to function : state tensor dimension_ size_ step_ -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaFloatTensor_newUnfold"
+  p_newUnfold :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> CInt -> CLLong -> CLLong -> IO (Ptr C'THCudaFloatTensor))
+
+-- | p_newView : Pointer to function : state tensor size -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaFloatTensor_newView"
+  p_newView :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THLongStorage -> IO (Ptr C'THCudaFloatTensor))
+
+-- | p_newFoldBatchDim : Pointer to function : state input -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaFloatTensor_newFoldBatchDim"
+  p_newFoldBatchDim :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> IO (Ptr C'THCudaFloatTensor))
+
+-- | p_newExpand : Pointer to function : state tensor size -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaFloatTensor_newExpand"
+  p_newExpand :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THLongStorage -> IO (Ptr C'THCudaFloatTensor))
+
+-- | p_expand : Pointer to function : state r tensor sizes -> void
+foreign import ccall "THCTensor.h &THCudaFloatTensor_expand"
+  p_expand :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> Ptr C'THLongStorage -> IO ())
+
+-- | p_expandNd : Pointer to function : state rets ops count -> void
+foreign import ccall "THCTensor.h &THCudaFloatTensor_expandNd"
+  p_expandNd :: FunPtr (Ptr C'THCState -> Ptr (Ptr C'THCudaFloatTensor) -> Ptr (Ptr C'THCudaFloatTensor) -> CInt -> IO ())
+
+-- | p_resize : Pointer to function : state tensor size stride -> void
+foreign import ccall "THCTensor.h &THCudaFloatTensor_resize"
+  p_resize :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THLongStorage -> Ptr C'THLongStorage -> IO ())
+
+-- | p_resizeAs : Pointer to function : state tensor src -> void
+foreign import ccall "THCTensor.h &THCudaFloatTensor_resizeAs"
+  p_resizeAs :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ())
+
+-- | p_resize1d : Pointer to function : state tensor size0_ -> void
+foreign import ccall "THCTensor.h &THCudaFloatTensor_resize1d"
+  p_resize1d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> CLLong -> IO ())
+
+-- | p_resize2d : Pointer to function : state tensor size0_ size1_ -> void
+foreign import ccall "THCTensor.h &THCudaFloatTensor_resize2d"
+  p_resize2d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> CLLong -> CLLong -> IO ())
+
+-- | p_resize3d : Pointer to function : state tensor size0_ size1_ size2_ -> void
+foreign import ccall "THCTensor.h &THCudaFloatTensor_resize3d"
+  p_resize3d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> CLLong -> CLLong -> CLLong -> IO ())
+
+-- | p_resize4d : Pointer to function : state tensor size0_ size1_ size2_ size3_ -> void
+foreign import ccall "THCTensor.h &THCudaFloatTensor_resize4d"
+  p_resize4d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> CLLong -> CLLong -> CLLong -> CLLong -> IO ())
+
+-- | p_resize5d : Pointer to function : state tensor size0_ size1_ size2_ size3_ size4_ -> void
+foreign import ccall "THCTensor.h &THCudaFloatTensor_resize5d"
+  p_resize5d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> IO ())
+
+-- | p_resizeNd : Pointer to function : state tensor nDimension size stride -> void
+foreign import ccall "THCTensor.h &THCudaFloatTensor_resizeNd"
+  p_resizeNd :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> CInt -> Ptr CLLong -> Ptr CLLong -> IO ())
+
+-- | p_set : Pointer to function : state self src -> void
+foreign import ccall "THCTensor.h &THCudaFloatTensor_set"
+  p_set :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ())
+
+-- | p_setStorage : Pointer to function : state self storage_ storageOffset_ size_ stride_ -> void
+foreign import ccall "THCTensor.h &THCudaFloatTensor_setStorage"
+  p_setStorage :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCFloatStorage -> CPtrdiff -> Ptr C'THLongStorage -> Ptr C'THLongStorage -> IO ())
+
+-- | p_setStorageNd : Pointer to function : state self storage storageOffset nDimension size stride -> void
+foreign import ccall "THCTensor.h &THCudaFloatTensor_setStorageNd"
+  p_setStorageNd :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCFloatStorage -> CPtrdiff -> CInt -> Ptr CLLong -> Ptr CLLong -> IO ())
+
+-- | p_setStorage1d : Pointer to function : state self storage_ storageOffset_ size0_ stride0_ -> void
+foreign import ccall "THCTensor.h &THCudaFloatTensor_setStorage1d"
+  p_setStorage1d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCFloatStorage -> CPtrdiff -> CLLong -> CLLong -> IO ())
+
+-- | p_setStorage2d : Pointer to function : state self storage_ storageOffset_ size0_ stride0_ size1_ stride1_ -> void
+foreign import ccall "THCTensor.h &THCudaFloatTensor_setStorage2d"
+  p_setStorage2d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCFloatStorage -> CPtrdiff -> CLLong -> CLLong -> CLLong -> CLLong -> IO ())
+
+-- | p_setStorage3d : Pointer to function : state self storage_ storageOffset_ size0_ stride0_ size1_ stride1_ size2_ stride2_ -> void
+foreign import ccall "THCTensor.h &THCudaFloatTensor_setStorage3d"
+  p_setStorage3d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCFloatStorage -> CPtrdiff -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> IO ())
+
+-- | p_setStorage4d : Pointer to function : state self storage_ storageOffset_ size0_ stride0_ size1_ stride1_ size2_ stride2_ size3_ stride3_ -> void
+foreign import ccall "THCTensor.h &THCudaFloatTensor_setStorage4d"
+  p_setStorage4d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCFloatStorage -> CPtrdiff -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> IO ())
+
+-- | p_narrow : Pointer to function : state self src dimension_ firstIndex_ size_ -> void
+foreign import ccall "THCTensor.h &THCudaFloatTensor_narrow"
+  p_narrow :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> CInt -> CLLong -> CLLong -> IO ())
+
+-- | p_select : Pointer to function : state self src dimension_ sliceIndex_ -> void
+foreign import ccall "THCTensor.h &THCudaFloatTensor_select"
+  p_select :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> CInt -> CLLong -> IO ())
+
+-- | p_transpose : Pointer to function : state self src dimension1_ dimension2_ -> void
+foreign import ccall "THCTensor.h &THCudaFloatTensor_transpose"
+  p_transpose :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> CInt -> CInt -> IO ())
+
+-- | p_unfold : Pointer to function : state self src dimension_ size_ step_ -> void
+foreign import ccall "THCTensor.h &THCudaFloatTensor_unfold"
+  p_unfold :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> CInt -> CLLong -> CLLong -> IO ())
+
+-- | p_squeeze : Pointer to function : state self src -> void
+foreign import ccall "THCTensor.h &THCudaFloatTensor_squeeze"
+  p_squeeze :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ())
+
+-- | p_squeeze1d : Pointer to function : state self src dimension_ -> void
+foreign import ccall "THCTensor.h &THCudaFloatTensor_squeeze1d"
+  p_squeeze1d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> CInt -> IO ())
+
+-- | p_unsqueeze1d : Pointer to function : state self src dimension_ -> void
+foreign import ccall "THCTensor.h &THCudaFloatTensor_unsqueeze1d"
+  p_unsqueeze1d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> CInt -> IO ())
+
+-- | p_isContiguous : Pointer to function : state self -> int
+foreign import ccall "THCTensor.h &THCudaFloatTensor_isContiguous"
+  p_isContiguous :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> IO CInt)
+
+-- | p_isSameSizeAs : Pointer to function : state self src -> int
+foreign import ccall "THCTensor.h &THCudaFloatTensor_isSameSizeAs"
+  p_isSameSizeAs :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO CInt)
+
+-- | p_isSetTo : Pointer to function : state self src -> int
+foreign import ccall "THCTensor.h &THCudaFloatTensor_isSetTo"
+  p_isSetTo :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO CInt)
+
+-- | p_isSize : Pointer to function : state self dims -> int
+foreign import ccall "THCTensor.h &THCudaFloatTensor_isSize"
+  p_isSize :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THLongStorage -> IO CInt)
+
+-- | p_nElement : Pointer to function : state self -> ptrdiff_t
+foreign import ccall "THCTensor.h &THCudaFloatTensor_nElement"
+  p_nElement :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> IO CPtrdiff)
+
+-- | p_retain : Pointer to function : state self -> void
+foreign import ccall "THCTensor.h &THCudaFloatTensor_retain"
+  p_retain :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> IO ())
+
+-- | p_free : Pointer to function : state self -> void
+foreign import ccall "THCTensor.h &THCudaFloatTensor_free"
+  p_free :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> IO ())
+
+-- | p_freeCopyTo : Pointer to function : state self dst -> void
+foreign import ccall "THCTensor.h &THCudaFloatTensor_freeCopyTo"
+  p_freeCopyTo :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ())
+
+-- | p_set1d : Pointer to function : state tensor x0 value -> void
+foreign import ccall "THCTensor.h &THCudaFloatTensor_set1d"
+  p_set1d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> CLLong -> CFloat -> IO ())
+
+-- | p_set2d : Pointer to function : state tensor x0 x1 value -> void
+foreign import ccall "THCTensor.h &THCudaFloatTensor_set2d"
+  p_set2d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> CLLong -> CLLong -> CFloat -> IO ())
+
+-- | p_set3d : Pointer to function : state tensor x0 x1 x2 value -> void
+foreign import ccall "THCTensor.h &THCudaFloatTensor_set3d"
+  p_set3d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> CLLong -> CLLong -> CLLong -> CFloat -> IO ())
+
+-- | p_set4d : Pointer to function : state tensor x0 x1 x2 x3 value -> void
+foreign import ccall "THCTensor.h &THCudaFloatTensor_set4d"
+  p_set4d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> CLLong -> CLLong -> CLLong -> CLLong -> CFloat -> IO ())
+
+-- | p_get1d : Pointer to function : state tensor x0 -> real
+foreign import ccall "THCTensor.h &THCudaFloatTensor_get1d"
+  p_get1d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> CLLong -> IO CFloat)
+
+-- | p_get2d : Pointer to function : state tensor x0 x1 -> real
+foreign import ccall "THCTensor.h &THCudaFloatTensor_get2d"
+  p_get2d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> CLLong -> CLLong -> IO CFloat)
+
+-- | p_get3d : Pointer to function : state tensor x0 x1 x2 -> real
+foreign import ccall "THCTensor.h &THCudaFloatTensor_get3d"
+  p_get3d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> CLLong -> CLLong -> CLLong -> IO CFloat)
+
+-- | p_get4d : Pointer to function : state tensor x0 x1 x2 x3 -> real
+foreign import ccall "THCTensor.h &THCudaFloatTensor_get4d"
+  p_get4d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> CLLong -> CLLong -> CLLong -> CLLong -> IO CFloat)
+
+-- | p_getDevice : Pointer to function : state self -> int
+foreign import ccall "THCTensor.h &THCudaFloatTensor_getDevice"
+  p_getDevice :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> IO CInt)
+
+-- | p_sizeDesc : Pointer to function : state tensor -> THCDescBuff
+foreign import ccall "THCTensor.h &THCudaFloatTensor_sizeDesc"
+  p_sizeDesc :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> IO (Ptr C'THCDescBuff))
diff --git a/src/Torch/FFI/THC/Float/TensorCopy.hs b/src/Torch/FFI/THC/Float/TensorCopy.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Float/TensorCopy.hs
@@ -0,0 +1,177 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Float.TensorCopy where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_copy :  state self src -> void
+foreign import ccall "THCTensorCopy.h THCudaFloatTensor_copy"
+  c_copy :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ()
+
+-- | c_copyIgnoringOverlaps :  state self src -> void
+foreign import ccall "THCTensorCopy.h THCudaFloatTensor_copyIgnoringOverlaps"
+  c_copyIgnoringOverlaps :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ()
+
+-- | c_copyByte :  state self src -> void
+foreign import ccall "THCTensorCopy.h THCudaFloatTensor_copyByte"
+  c_copyByte :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THByteTensor -> IO ()
+
+-- | c_copyChar :  state self src -> void
+foreign import ccall "THCTensorCopy.h THCudaFloatTensor_copyChar"
+  c_copyChar :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCharTensor -> IO ()
+
+-- | c_copyShort :  state self src -> void
+foreign import ccall "THCTensorCopy.h THCudaFloatTensor_copyShort"
+  c_copyShort :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THShortTensor -> IO ()
+
+-- | c_copyInt :  state self src -> void
+foreign import ccall "THCTensorCopy.h THCudaFloatTensor_copyInt"
+  c_copyInt :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THIntTensor -> IO ()
+
+-- | c_copyLong :  state self src -> void
+foreign import ccall "THCTensorCopy.h THCudaFloatTensor_copyLong"
+  c_copyLong :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THLongTensor -> IO ()
+
+-- | c_copyFloat :  state self src -> void
+foreign import ccall "THCTensorCopy.h THCudaFloatTensor_copyFloat"
+  c_copyFloat :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THFloatTensor -> IO ()
+
+-- | c_copyDouble :  state self src -> void
+foreign import ccall "THCTensorCopy.h THCudaFloatTensor_copyDouble"
+  c_copyDouble :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THDoubleTensor -> IO ()
+
+-- | c_copyHalf :  state self src -> void
+foreign import ccall "THCTensorCopy.h THCudaFloatTensor_copyHalf"
+  c_copyHalf :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THHalfTensor -> IO ()
+
+-- | c_copyCudaByte :  state dst src -> void
+foreign import ccall "THCTensorCopy.h THCudaFloatTensor_copyCudaByte"
+  c_copyCudaByte :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaByteTensor -> IO ()
+
+-- | c_copyCudaChar :  state dst src -> void
+foreign import ccall "THCTensorCopy.h THCudaFloatTensor_copyCudaChar"
+  c_copyCudaChar :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaCharTensor -> IO ()
+
+-- | c_copyCudaShort :  state dst src -> void
+foreign import ccall "THCTensorCopy.h THCudaFloatTensor_copyCudaShort"
+  c_copyCudaShort :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaShortTensor -> IO ()
+
+-- | c_copyCudaInt :  state dst src -> void
+foreign import ccall "THCTensorCopy.h THCudaFloatTensor_copyCudaInt"
+  c_copyCudaInt :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaIntTensor -> IO ()
+
+-- | c_copyCudaLong :  state dst src -> void
+foreign import ccall "THCTensorCopy.h THCudaFloatTensor_copyCudaLong"
+  c_copyCudaLong :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaLongTensor -> IO ()
+
+-- | c_copyCudaDouble :  state dst src -> void
+foreign import ccall "THCTensorCopy.h THCudaFloatTensor_copyCudaDouble"
+  c_copyCudaDouble :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_copyCuda :  state self src -> void
+foreign import ccall "THCTensorCopy.h THCudaFloatTensor_copyCuda"
+  c_copyCuda :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ()
+
+-- | c_thCopyCuda :  state self src -> void
+foreign import ccall "THCTensorCopy.h THFloatTensor_copyCuda"
+  c_thCopyCuda :: Ptr C'THCState -> Ptr C'THFloatTensor -> Ptr C'THCudaFloatTensor -> IO ()
+
+-- | c_copyCPU :  state self src -> void
+foreign import ccall "THCTensorCopy.h THCudaFloatTensor_copyCPU"
+  c_copyCPU :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THFloatTensor -> IO ()
+
+-- | c_copyAsyncCPU :  state self src -> void
+foreign import ccall "THCTensorCopy.h THCudaFloatTensor_copyAsyncCPU"
+  c_copyAsyncCPU :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THFloatTensor -> IO ()
+
+-- | c_thCopyAsyncCuda :  state self src -> void
+foreign import ccall "THCTensorCopy.h THFloatTensor_copyAsyncCuda"
+  c_thCopyAsyncCuda :: Ptr C'THCState -> Ptr C'THFloatTensor -> Ptr C'THCudaFloatTensor -> IO ()
+
+-- | p_copy : Pointer to function : state self src -> void
+foreign import ccall "THCTensorCopy.h &THCudaFloatTensor_copy"
+  p_copy :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ())
+
+-- | p_copyIgnoringOverlaps : Pointer to function : state self src -> void
+foreign import ccall "THCTensorCopy.h &THCudaFloatTensor_copyIgnoringOverlaps"
+  p_copyIgnoringOverlaps :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ())
+
+-- | p_copyByte : Pointer to function : state self src -> void
+foreign import ccall "THCTensorCopy.h &THCudaFloatTensor_copyByte"
+  p_copyByte :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THByteTensor -> IO ())
+
+-- | p_copyChar : Pointer to function : state self src -> void
+foreign import ccall "THCTensorCopy.h &THCudaFloatTensor_copyChar"
+  p_copyChar :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCharTensor -> IO ())
+
+-- | p_copyShort : Pointer to function : state self src -> void
+foreign import ccall "THCTensorCopy.h &THCudaFloatTensor_copyShort"
+  p_copyShort :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THShortTensor -> IO ())
+
+-- | p_copyInt : Pointer to function : state self src -> void
+foreign import ccall "THCTensorCopy.h &THCudaFloatTensor_copyInt"
+  p_copyInt :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THIntTensor -> IO ())
+
+-- | p_copyLong : Pointer to function : state self src -> void
+foreign import ccall "THCTensorCopy.h &THCudaFloatTensor_copyLong"
+  p_copyLong :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THLongTensor -> IO ())
+
+-- | p_copyFloat : Pointer to function : state self src -> void
+foreign import ccall "THCTensorCopy.h &THCudaFloatTensor_copyFloat"
+  p_copyFloat :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THFloatTensor -> IO ())
+
+-- | p_copyDouble : Pointer to function : state self src -> void
+foreign import ccall "THCTensorCopy.h &THCudaFloatTensor_copyDouble"
+  p_copyDouble :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THDoubleTensor -> IO ())
+
+-- | p_copyHalf : Pointer to function : state self src -> void
+foreign import ccall "THCTensorCopy.h &THCudaFloatTensor_copyHalf"
+  p_copyHalf :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THHalfTensor -> IO ())
+
+-- | p_copyCudaByte : Pointer to function : state dst src -> void
+foreign import ccall "THCTensorCopy.h &THCudaFloatTensor_copyCudaByte"
+  p_copyCudaByte :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaByteTensor -> IO ())
+
+-- | p_copyCudaChar : Pointer to function : state dst src -> void
+foreign import ccall "THCTensorCopy.h &THCudaFloatTensor_copyCudaChar"
+  p_copyCudaChar :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaCharTensor -> IO ())
+
+-- | p_copyCudaShort : Pointer to function : state dst src -> void
+foreign import ccall "THCTensorCopy.h &THCudaFloatTensor_copyCudaShort"
+  p_copyCudaShort :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaShortTensor -> IO ())
+
+-- | p_copyCudaInt : Pointer to function : state dst src -> void
+foreign import ccall "THCTensorCopy.h &THCudaFloatTensor_copyCudaInt"
+  p_copyCudaInt :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaIntTensor -> IO ())
+
+-- | p_copyCudaLong : Pointer to function : state dst src -> void
+foreign import ccall "THCTensorCopy.h &THCudaFloatTensor_copyCudaLong"
+  p_copyCudaLong :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaLongTensor -> IO ())
+
+-- | p_copyCudaDouble : Pointer to function : state dst src -> void
+foreign import ccall "THCTensorCopy.h &THCudaFloatTensor_copyCudaDouble"
+  p_copyCudaDouble :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_copyCuda : Pointer to function : state self src -> void
+foreign import ccall "THCTensorCopy.h &THCudaFloatTensor_copyCuda"
+  p_copyCuda :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ())
+
+-- | p_thCopyCuda : Pointer to function : state self src -> void
+foreign import ccall "THCTensorCopy.h &THFloatTensor_copyCuda"
+  p_thCopyCuda :: FunPtr (Ptr C'THCState -> Ptr C'THFloatTensor -> Ptr C'THCudaFloatTensor -> IO ())
+
+-- | p_copyCPU : Pointer to function : state self src -> void
+foreign import ccall "THCTensorCopy.h &THCudaFloatTensor_copyCPU"
+  p_copyCPU :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THFloatTensor -> IO ())
+
+-- | p_copyAsyncCPU : Pointer to function : state self src -> void
+foreign import ccall "THCTensorCopy.h &THCudaFloatTensor_copyAsyncCPU"
+  p_copyAsyncCPU :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THFloatTensor -> IO ())
+
+-- | p_thCopyAsyncCuda : Pointer to function : state self src -> void
+foreign import ccall "THCTensorCopy.h &THFloatTensor_copyAsyncCuda"
+  p_thCopyAsyncCuda :: FunPtr (Ptr C'THCState -> Ptr C'THFloatTensor -> Ptr C'THCudaFloatTensor -> IO ())
diff --git a/src/Torch/FFI/THC/Float/TensorIndex.hs b/src/Torch/FFI/THC/Float/TensorIndex.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Float/TensorIndex.hs
@@ -0,0 +1,97 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Float.TensorIndex where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_indexCopy :  state res_ dim indices src -> void
+foreign import ccall "THCTensorIndex.h THCudaFloatTensor_indexCopy"
+  c_indexCopy :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> CInt -> Ptr C'THCudaLongTensor -> Ptr C'THCudaFloatTensor -> IO ()
+
+-- | c_indexAdd :  state res_ dim indices src -> void
+foreign import ccall "THCTensorIndex.h THCudaFloatTensor_indexAdd"
+  c_indexAdd :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> CInt -> Ptr C'THCudaLongTensor -> Ptr C'THCudaFloatTensor -> IO ()
+
+-- | c_indexFill :  state tensor dim index val -> void
+foreign import ccall "THCTensorIndex.h THCudaFloatTensor_indexFill"
+  c_indexFill :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> CInt -> Ptr C'THCudaLongTensor -> CFloat -> IO ()
+
+-- | c_indexSelect :  state tensor src dim index -> void
+foreign import ccall "THCTensorIndex.h THCudaFloatTensor_indexSelect"
+  c_indexSelect :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> CInt -> Ptr C'THCudaLongTensor -> IO ()
+
+-- | c_take :  state res_ src index -> void
+foreign import ccall "THCTensorIndex.h THCudaFloatTensor_take"
+  c_take :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaLongTensor -> IO ()
+
+-- | c_put :  state res_ indices src accumulate -> void
+foreign import ccall "THCTensorIndex.h THCudaFloatTensor_put"
+  c_put :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaFloatTensor -> CInt -> IO ()
+
+-- | c_indexCopy_long :  state res_ dim indices src -> void
+foreign import ccall "THCTensorIndex.h THCudaFloatTensor_indexCopy_long"
+  c_indexCopy_long :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> CInt -> Ptr C'THLongTensor -> Ptr C'THCudaFloatTensor -> IO ()
+
+-- | c_indexAdd_long :  state res_ dim indices src -> void
+foreign import ccall "THCTensorIndex.h THCudaFloatTensor_indexAdd_long"
+  c_indexAdd_long :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> CInt -> Ptr C'THLongTensor -> Ptr C'THCudaFloatTensor -> IO ()
+
+-- | c_indexFill_long :  state tensor dim index val -> void
+foreign import ccall "THCTensorIndex.h THCudaFloatTensor_indexFill_long"
+  c_indexFill_long :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> CInt -> Ptr C'THLongTensor -> CFloat -> IO ()
+
+-- | c_indexSelect_long :  state tensor src dim index -> void
+foreign import ccall "THCTensorIndex.h THCudaFloatTensor_indexSelect_long"
+  c_indexSelect_long :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> CInt -> Ptr C'THLongTensor -> IO ()
+
+-- | c_calculateAdvancedIndexingOffsets :  state output indexed baseOffset indexers -> void
+foreign import ccall "THCTensorIndex.h THCudaFloatTensor_calculateAdvancedIndexingOffsets"
+  c_calculateAdvancedIndexingOffsets :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaFloatTensor -> CPtrdiff -> Ptr (Ptr C'THCudaLongTensor) -> IO ()
+
+-- | p_indexCopy : Pointer to function : state res_ dim indices src -> void
+foreign import ccall "THCTensorIndex.h &THCudaFloatTensor_indexCopy"
+  p_indexCopy :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> CInt -> Ptr C'THCudaLongTensor -> Ptr C'THCudaFloatTensor -> IO ())
+
+-- | p_indexAdd : Pointer to function : state res_ dim indices src -> void
+foreign import ccall "THCTensorIndex.h &THCudaFloatTensor_indexAdd"
+  p_indexAdd :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> CInt -> Ptr C'THCudaLongTensor -> Ptr C'THCudaFloatTensor -> IO ())
+
+-- | p_indexFill : Pointer to function : state tensor dim index val -> void
+foreign import ccall "THCTensorIndex.h &THCudaFloatTensor_indexFill"
+  p_indexFill :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> CInt -> Ptr C'THCudaLongTensor -> CFloat -> IO ())
+
+-- | p_indexSelect : Pointer to function : state tensor src dim index -> void
+foreign import ccall "THCTensorIndex.h &THCudaFloatTensor_indexSelect"
+  p_indexSelect :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> CInt -> Ptr C'THCudaLongTensor -> IO ())
+
+-- | p_take : Pointer to function : state res_ src index -> void
+foreign import ccall "THCTensorIndex.h &THCudaFloatTensor_take"
+  p_take :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaLongTensor -> IO ())
+
+-- | p_put : Pointer to function : state res_ indices src accumulate -> void
+foreign import ccall "THCTensorIndex.h &THCudaFloatTensor_put"
+  p_put :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaFloatTensor -> CInt -> IO ())
+
+-- | p_indexCopy_long : Pointer to function : state res_ dim indices src -> void
+foreign import ccall "THCTensorIndex.h &THCudaFloatTensor_indexCopy_long"
+  p_indexCopy_long :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> CInt -> Ptr C'THLongTensor -> Ptr C'THCudaFloatTensor -> IO ())
+
+-- | p_indexAdd_long : Pointer to function : state res_ dim indices src -> void
+foreign import ccall "THCTensorIndex.h &THCudaFloatTensor_indexAdd_long"
+  p_indexAdd_long :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> CInt -> Ptr C'THLongTensor -> Ptr C'THCudaFloatTensor -> IO ())
+
+-- | p_indexFill_long : Pointer to function : state tensor dim index val -> void
+foreign import ccall "THCTensorIndex.h &THCudaFloatTensor_indexFill_long"
+  p_indexFill_long :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> CInt -> Ptr C'THLongTensor -> CFloat -> IO ())
+
+-- | p_indexSelect_long : Pointer to function : state tensor src dim index -> void
+foreign import ccall "THCTensorIndex.h &THCudaFloatTensor_indexSelect_long"
+  p_indexSelect_long :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> CInt -> Ptr C'THLongTensor -> IO ())
+
+-- | p_calculateAdvancedIndexingOffsets : Pointer to function : state output indexed baseOffset indexers -> void
+foreign import ccall "THCTensorIndex.h &THCudaFloatTensor_calculateAdvancedIndexingOffsets"
+  p_calculateAdvancedIndexingOffsets :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaFloatTensor -> CPtrdiff -> Ptr (Ptr C'THCudaLongTensor) -> IO ())
diff --git a/src/Torch/FFI/THC/Float/TensorMasked.hs b/src/Torch/FFI/THC/Float/TensorMasked.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Float/TensorMasked.hs
@@ -0,0 +1,57 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Float.TensorMasked where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_maskedFill :  state tensor mask value -> void
+foreign import ccall "THCTensorMasked.h THCudaFloatTensor_maskedFill"
+  c_maskedFill :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaByteTensor -> CFloat -> IO ()
+
+-- | c_maskedFillByte :  state tensor mask value -> void
+foreign import ccall "THCTensorMasked.h THCudaFloatTensor_maskedFillByte"
+  c_maskedFillByte :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THByteTensor -> CFloat -> IO ()
+
+-- | c_maskedCopy :  state tensor mask src -> void
+foreign import ccall "THCTensorMasked.h THCudaFloatTensor_maskedCopy"
+  c_maskedCopy :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaByteTensor -> Ptr C'THCudaFloatTensor -> IO ()
+
+-- | c_maskedCopyByte :  state tensor mask src -> void
+foreign import ccall "THCTensorMasked.h THCudaFloatTensor_maskedCopyByte"
+  c_maskedCopyByte :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THByteTensor -> Ptr C'THCudaFloatTensor -> IO ()
+
+-- | c_maskedSelect :  state tensor src mask -> void
+foreign import ccall "THCTensorMasked.h THCudaFloatTensor_maskedSelect"
+  c_maskedSelect :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaByteTensor -> IO ()
+
+-- | c_maskedSelectByte :  state tensor src mask -> void
+foreign import ccall "THCTensorMasked.h THCudaFloatTensor_maskedSelectByte"
+  c_maskedSelectByte :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> Ptr C'THByteTensor -> IO ()
+
+-- | p_maskedFill : Pointer to function : state tensor mask value -> void
+foreign import ccall "THCTensorMasked.h &THCudaFloatTensor_maskedFill"
+  p_maskedFill :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaByteTensor -> CFloat -> IO ())
+
+-- | p_maskedFillByte : Pointer to function : state tensor mask value -> void
+foreign import ccall "THCTensorMasked.h &THCudaFloatTensor_maskedFillByte"
+  p_maskedFillByte :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THByteTensor -> CFloat -> IO ())
+
+-- | p_maskedCopy : Pointer to function : state tensor mask src -> void
+foreign import ccall "THCTensorMasked.h &THCudaFloatTensor_maskedCopy"
+  p_maskedCopy :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaByteTensor -> Ptr C'THCudaFloatTensor -> IO ())
+
+-- | p_maskedCopyByte : Pointer to function : state tensor mask src -> void
+foreign import ccall "THCTensorMasked.h &THCudaFloatTensor_maskedCopyByte"
+  p_maskedCopyByte :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THByteTensor -> Ptr C'THCudaFloatTensor -> IO ())
+
+-- | p_maskedSelect : Pointer to function : state tensor src mask -> void
+foreign import ccall "THCTensorMasked.h &THCudaFloatTensor_maskedSelect"
+  p_maskedSelect :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaByteTensor -> IO ())
+
+-- | p_maskedSelectByte : Pointer to function : state tensor src mask -> void
+foreign import ccall "THCTensorMasked.h &THCudaFloatTensor_maskedSelectByte"
+  p_maskedSelectByte :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> Ptr C'THByteTensor -> IO ())
diff --git a/src/Torch/FFI/THC/Float/TensorMath.hs b/src/Torch/FFI/THC/Float/TensorMath.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Float/TensorMath.hs
@@ -0,0 +1,169 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Float.TensorMath where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_fill :  state self value -> void
+foreign import ccall "THCTensorMath.h THCudaFloatTensor_fill"
+  c_fill :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> CFloat -> IO ()
+
+-- | c_zero :  state self -> void
+foreign import ccall "THCTensorMath.h THCudaFloatTensor_zero"
+  c_zero :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> IO ()
+
+-- | c_zeros :  state r_ size -> void
+foreign import ccall "THCTensorMath.h THCudaFloatTensor_zeros"
+  c_zeros :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THLongStorage -> IO ()
+
+-- | c_zerosLike :  state r_ input -> void
+foreign import ccall "THCTensorMath.h THCudaFloatTensor_zerosLike"
+  c_zerosLike :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ()
+
+-- | c_ones :  state r_ size -> void
+foreign import ccall "THCTensorMath.h THCudaFloatTensor_ones"
+  c_ones :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THLongStorage -> IO ()
+
+-- | c_onesLike :  state r_ input -> void
+foreign import ccall "THCTensorMath.h THCudaFloatTensor_onesLike"
+  c_onesLike :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ()
+
+-- | c_reshape :  state r_ t size -> void
+foreign import ccall "THCTensorMath.h THCudaFloatTensor_reshape"
+  c_reshape :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> Ptr C'THLongStorage -> IO ()
+
+-- | c_numel :  state t -> ptrdiff_t
+foreign import ccall "THCTensorMath.h THCudaFloatTensor_numel"
+  c_numel :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> IO CPtrdiff
+
+-- | c_cat :  state result ta tb dimension -> void
+foreign import ccall "THCTensorMath.h THCudaFloatTensor_cat"
+  c_cat :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> CInt -> IO ()
+
+-- | c_catArray :  state result inputs numInputs dimension -> void
+foreign import ccall "THCTensorMath.h THCudaFloatTensor_catArray"
+  c_catArray :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr (Ptr C'THCudaFloatTensor) -> CInt -> CInt -> IO ()
+
+-- | c_nonzero :  state tensor self -> void
+foreign import ccall "THCTensorMath.h THCudaFloatTensor_nonzero"
+  c_nonzero :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaFloatTensor -> IO ()
+
+-- | c_tril :  state self src k -> void
+foreign import ccall "THCTensorMath.h THCudaFloatTensor_tril"
+  c_tril :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> CLLong -> IO ()
+
+-- | c_triu :  state self src k -> void
+foreign import ccall "THCTensorMath.h THCudaFloatTensor_triu"
+  c_triu :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> CLLong -> IO ()
+
+-- | c_diag :  state self src k -> void
+foreign import ccall "THCTensorMath.h THCudaFloatTensor_diag"
+  c_diag :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> CLLong -> IO ()
+
+-- | c_eye :  state self n k -> void
+foreign import ccall "THCTensorMath.h THCudaFloatTensor_eye"
+  c_eye :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> CLLong -> CLLong -> IO ()
+
+-- | c_trace :  state self -> accreal
+foreign import ccall "THCTensorMath.h THCudaFloatTensor_trace"
+  c_trace :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> IO CDouble
+
+-- | c_linspace :  state r_ a b n -> void
+foreign import ccall "THCTensorMath.h THCudaFloatTensor_linspace"
+  c_linspace :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> CFloat -> CFloat -> CLLong -> IO ()
+
+-- | c_logspace :  state r_ a b n -> void
+foreign import ccall "THCTensorMath.h THCudaFloatTensor_logspace"
+  c_logspace :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> CFloat -> CFloat -> CLLong -> IO ()
+
+-- | c_range :  state r_ xmin xmax step -> void
+foreign import ccall "THCTensorMath.h THCudaFloatTensor_range"
+  c_range :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> CDouble -> CDouble -> CDouble -> IO ()
+
+-- | c_arange :  state r_ xmin xmax step -> void
+foreign import ccall "THCTensorMath.h THCudaFloatTensor_arange"
+  c_arange :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> CDouble -> CDouble -> CDouble -> IO ()
+
+-- | p_fill : Pointer to function : state self value -> void
+foreign import ccall "THCTensorMath.h &THCudaFloatTensor_fill"
+  p_fill :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> CFloat -> IO ())
+
+-- | p_zero : Pointer to function : state self -> void
+foreign import ccall "THCTensorMath.h &THCudaFloatTensor_zero"
+  p_zero :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> IO ())
+
+-- | p_zeros : Pointer to function : state r_ size -> void
+foreign import ccall "THCTensorMath.h &THCudaFloatTensor_zeros"
+  p_zeros :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THLongStorage -> IO ())
+
+-- | p_zerosLike : Pointer to function : state r_ input -> void
+foreign import ccall "THCTensorMath.h &THCudaFloatTensor_zerosLike"
+  p_zerosLike :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ())
+
+-- | p_ones : Pointer to function : state r_ size -> void
+foreign import ccall "THCTensorMath.h &THCudaFloatTensor_ones"
+  p_ones :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THLongStorage -> IO ())
+
+-- | p_onesLike : Pointer to function : state r_ input -> void
+foreign import ccall "THCTensorMath.h &THCudaFloatTensor_onesLike"
+  p_onesLike :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ())
+
+-- | p_reshape : Pointer to function : state r_ t size -> void
+foreign import ccall "THCTensorMath.h &THCudaFloatTensor_reshape"
+  p_reshape :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> Ptr C'THLongStorage -> IO ())
+
+-- | p_numel : Pointer to function : state t -> ptrdiff_t
+foreign import ccall "THCTensorMath.h &THCudaFloatTensor_numel"
+  p_numel :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> IO CPtrdiff)
+
+-- | p_cat : Pointer to function : state result ta tb dimension -> void
+foreign import ccall "THCTensorMath.h &THCudaFloatTensor_cat"
+  p_cat :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> CInt -> IO ())
+
+-- | p_catArray : Pointer to function : state result inputs numInputs dimension -> void
+foreign import ccall "THCTensorMath.h &THCudaFloatTensor_catArray"
+  p_catArray :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr (Ptr C'THCudaFloatTensor) -> CInt -> CInt -> IO ())
+
+-- | p_nonzero : Pointer to function : state tensor self -> void
+foreign import ccall "THCTensorMath.h &THCudaFloatTensor_nonzero"
+  p_nonzero :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaFloatTensor -> IO ())
+
+-- | p_tril : Pointer to function : state self src k -> void
+foreign import ccall "THCTensorMath.h &THCudaFloatTensor_tril"
+  p_tril :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> CLLong -> IO ())
+
+-- | p_triu : Pointer to function : state self src k -> void
+foreign import ccall "THCTensorMath.h &THCudaFloatTensor_triu"
+  p_triu :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> CLLong -> IO ())
+
+-- | p_diag : Pointer to function : state self src k -> void
+foreign import ccall "THCTensorMath.h &THCudaFloatTensor_diag"
+  p_diag :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> CLLong -> IO ())
+
+-- | p_eye : Pointer to function : state self n k -> void
+foreign import ccall "THCTensorMath.h &THCudaFloatTensor_eye"
+  p_eye :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> CLLong -> CLLong -> IO ())
+
+-- | p_trace : Pointer to function : state self -> accreal
+foreign import ccall "THCTensorMath.h &THCudaFloatTensor_trace"
+  p_trace :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> IO CDouble)
+
+-- | p_linspace : Pointer to function : state r_ a b n -> void
+foreign import ccall "THCTensorMath.h &THCudaFloatTensor_linspace"
+  p_linspace :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> CFloat -> CFloat -> CLLong -> IO ())
+
+-- | p_logspace : Pointer to function : state r_ a b n -> void
+foreign import ccall "THCTensorMath.h &THCudaFloatTensor_logspace"
+  p_logspace :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> CFloat -> CFloat -> CLLong -> IO ())
+
+-- | p_range : Pointer to function : state r_ xmin xmax step -> void
+foreign import ccall "THCTensorMath.h &THCudaFloatTensor_range"
+  p_range :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> CDouble -> CDouble -> CDouble -> IO ())
+
+-- | p_arange : Pointer to function : state r_ xmin xmax step -> void
+foreign import ccall "THCTensorMath.h &THCudaFloatTensor_arange"
+  p_arange :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> CDouble -> CDouble -> CDouble -> IO ())
diff --git a/src/Torch/FFI/THC/Float/TensorMathBlas.hs b/src/Torch/FFI/THC/Float/TensorMathBlas.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Float/TensorMathBlas.hs
@@ -0,0 +1,73 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Float.TensorMathBlas where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_dot :  state self src -> accreal
+foreign import ccall "THCTensorMathBlas.h THCudaFloatTensor_dot"
+  c_dot :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO CDouble
+
+-- | c_addmv :  state self beta t alpha mat vec -> void
+foreign import ccall "THCTensorMathBlas.h THCudaFloatTensor_addmv"
+  c_addmv :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> CFloat -> Ptr C'THCudaFloatTensor -> CFloat -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ()
+
+-- | c_addmm :  state self beta t alpha mat1 mat2 -> void
+foreign import ccall "THCTensorMathBlas.h THCudaFloatTensor_addmm"
+  c_addmm :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> CFloat -> Ptr C'THCudaFloatTensor -> CFloat -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ()
+
+-- | c_addr :  state self beta t alpha vec1 vec2 -> void
+foreign import ccall "THCTensorMathBlas.h THCudaFloatTensor_addr"
+  c_addr :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> CFloat -> Ptr C'THCudaFloatTensor -> CFloat -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ()
+
+-- | c_addbmm :  state result beta t alpha batch1 batch2 -> void
+foreign import ccall "THCTensorMathBlas.h THCudaFloatTensor_addbmm"
+  c_addbmm :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> CFloat -> Ptr C'THCudaFloatTensor -> CFloat -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ()
+
+-- | c_baddbmm :  state result beta t alpha batch1 batch2 -> void
+foreign import ccall "THCTensorMathBlas.h THCudaFloatTensor_baddbmm"
+  c_baddbmm :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> CFloat -> Ptr C'THCudaFloatTensor -> CFloat -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ()
+
+-- | c_btrifact :  state ra_ rpivots_ rinfo_ pivot a -> void
+foreign import ccall "THCTensorMathBlas.h THCudaFloatTensor_btrifact"
+  c_btrifact :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> CInt -> Ptr C'THCudaFloatTensor -> IO ()
+
+-- | c_btrisolve :  state rb_ b atf pivots -> void
+foreign import ccall "THCTensorMathBlas.h THCudaFloatTensor_btrisolve"
+  c_btrisolve :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaIntTensor -> IO ()
+
+-- | p_dot : Pointer to function : state self src -> accreal
+foreign import ccall "THCTensorMathBlas.h &THCudaFloatTensor_dot"
+  p_dot :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO CDouble)
+
+-- | p_addmv : Pointer to function : state self beta t alpha mat vec -> void
+foreign import ccall "THCTensorMathBlas.h &THCudaFloatTensor_addmv"
+  p_addmv :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> CFloat -> Ptr C'THCudaFloatTensor -> CFloat -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ())
+
+-- | p_addmm : Pointer to function : state self beta t alpha mat1 mat2 -> void
+foreign import ccall "THCTensorMathBlas.h &THCudaFloatTensor_addmm"
+  p_addmm :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> CFloat -> Ptr C'THCudaFloatTensor -> CFloat -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ())
+
+-- | p_addr : Pointer to function : state self beta t alpha vec1 vec2 -> void
+foreign import ccall "THCTensorMathBlas.h &THCudaFloatTensor_addr"
+  p_addr :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> CFloat -> Ptr C'THCudaFloatTensor -> CFloat -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ())
+
+-- | p_addbmm : Pointer to function : state result beta t alpha batch1 batch2 -> void
+foreign import ccall "THCTensorMathBlas.h &THCudaFloatTensor_addbmm"
+  p_addbmm :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> CFloat -> Ptr C'THCudaFloatTensor -> CFloat -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ())
+
+-- | p_baddbmm : Pointer to function : state result beta t alpha batch1 batch2 -> void
+foreign import ccall "THCTensorMathBlas.h &THCudaFloatTensor_baddbmm"
+  p_baddbmm :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> CFloat -> Ptr C'THCudaFloatTensor -> CFloat -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ())
+
+-- | p_btrifact : Pointer to function : state ra_ rpivots_ rinfo_ pivot a -> void
+foreign import ccall "THCTensorMathBlas.h &THCudaFloatTensor_btrifact"
+  p_btrifact :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> CInt -> Ptr C'THCudaFloatTensor -> IO ())
+
+-- | p_btrisolve : Pointer to function : state rb_ b atf pivots -> void
+foreign import ccall "THCTensorMathBlas.h &THCudaFloatTensor_btrisolve"
+  p_btrisolve :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaIntTensor -> IO ())
diff --git a/src/Torch/FFI/THC/Float/TensorMathCompare.hs b/src/Torch/FFI/THC/Float/TensorMathCompare.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Float/TensorMathCompare.hs
@@ -0,0 +1,105 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Float.TensorMathCompare where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_ltValue :  state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h THCudaFloatTensor_ltValue"
+  c_ltValue :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaFloatTensor -> CFloat -> IO ()
+
+-- | c_gtValue :  state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h THCudaFloatTensor_gtValue"
+  c_gtValue :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaFloatTensor -> CFloat -> IO ()
+
+-- | c_leValue :  state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h THCudaFloatTensor_leValue"
+  c_leValue :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaFloatTensor -> CFloat -> IO ()
+
+-- | c_geValue :  state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h THCudaFloatTensor_geValue"
+  c_geValue :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaFloatTensor -> CFloat -> IO ()
+
+-- | c_eqValue :  state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h THCudaFloatTensor_eqValue"
+  c_eqValue :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaFloatTensor -> CFloat -> IO ()
+
+-- | c_neValue :  state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h THCudaFloatTensor_neValue"
+  c_neValue :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaFloatTensor -> CFloat -> IO ()
+
+-- | c_ltValueT :  state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h THCudaFloatTensor_ltValueT"
+  c_ltValueT :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> CFloat -> IO ()
+
+-- | c_gtValueT :  state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h THCudaFloatTensor_gtValueT"
+  c_gtValueT :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> CFloat -> IO ()
+
+-- | c_leValueT :  state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h THCudaFloatTensor_leValueT"
+  c_leValueT :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> CFloat -> IO ()
+
+-- | c_geValueT :  state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h THCudaFloatTensor_geValueT"
+  c_geValueT :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> CFloat -> IO ()
+
+-- | c_eqValueT :  state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h THCudaFloatTensor_eqValueT"
+  c_eqValueT :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> CFloat -> IO ()
+
+-- | c_neValueT :  state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h THCudaFloatTensor_neValueT"
+  c_neValueT :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> CFloat -> IO ()
+
+-- | p_ltValue : Pointer to function : state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h &THCudaFloatTensor_ltValue"
+  p_ltValue :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaFloatTensor -> CFloat -> IO ())
+
+-- | p_gtValue : Pointer to function : state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h &THCudaFloatTensor_gtValue"
+  p_gtValue :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaFloatTensor -> CFloat -> IO ())
+
+-- | p_leValue : Pointer to function : state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h &THCudaFloatTensor_leValue"
+  p_leValue :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaFloatTensor -> CFloat -> IO ())
+
+-- | p_geValue : Pointer to function : state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h &THCudaFloatTensor_geValue"
+  p_geValue :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaFloatTensor -> CFloat -> IO ())
+
+-- | p_eqValue : Pointer to function : state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h &THCudaFloatTensor_eqValue"
+  p_eqValue :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaFloatTensor -> CFloat -> IO ())
+
+-- | p_neValue : Pointer to function : state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h &THCudaFloatTensor_neValue"
+  p_neValue :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaFloatTensor -> CFloat -> IO ())
+
+-- | p_ltValueT : Pointer to function : state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h &THCudaFloatTensor_ltValueT"
+  p_ltValueT :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> CFloat -> IO ())
+
+-- | p_gtValueT : Pointer to function : state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h &THCudaFloatTensor_gtValueT"
+  p_gtValueT :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> CFloat -> IO ())
+
+-- | p_leValueT : Pointer to function : state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h &THCudaFloatTensor_leValueT"
+  p_leValueT :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> CFloat -> IO ())
+
+-- | p_geValueT : Pointer to function : state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h &THCudaFloatTensor_geValueT"
+  p_geValueT :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> CFloat -> IO ())
+
+-- | p_eqValueT : Pointer to function : state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h &THCudaFloatTensor_eqValueT"
+  p_eqValueT :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> CFloat -> IO ())
+
+-- | p_neValueT : Pointer to function : state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h &THCudaFloatTensor_neValueT"
+  p_neValueT :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> CFloat -> IO ())
diff --git a/src/Torch/FFI/THC/Float/TensorMathCompareT.hs b/src/Torch/FFI/THC/Float/TensorMathCompareT.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Float/TensorMathCompareT.hs
@@ -0,0 +1,105 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Float.TensorMathCompareT where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_ltTensor :  state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h THCudaFloatTensor_ltTensor"
+  c_ltTensor :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ()
+
+-- | c_gtTensor :  state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h THCudaFloatTensor_gtTensor"
+  c_gtTensor :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ()
+
+-- | c_leTensor :  state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h THCudaFloatTensor_leTensor"
+  c_leTensor :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ()
+
+-- | c_geTensor :  state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h THCudaFloatTensor_geTensor"
+  c_geTensor :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ()
+
+-- | c_eqTensor :  state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h THCudaFloatTensor_eqTensor"
+  c_eqTensor :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ()
+
+-- | c_neTensor :  state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h THCudaFloatTensor_neTensor"
+  c_neTensor :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ()
+
+-- | c_ltTensorT :  state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h THCudaFloatTensor_ltTensorT"
+  c_ltTensorT :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ()
+
+-- | c_gtTensorT :  state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h THCudaFloatTensor_gtTensorT"
+  c_gtTensorT :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ()
+
+-- | c_leTensorT :  state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h THCudaFloatTensor_leTensorT"
+  c_leTensorT :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ()
+
+-- | c_geTensorT :  state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h THCudaFloatTensor_geTensorT"
+  c_geTensorT :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ()
+
+-- | c_eqTensorT :  state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h THCudaFloatTensor_eqTensorT"
+  c_eqTensorT :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ()
+
+-- | c_neTensorT :  state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h THCudaFloatTensor_neTensorT"
+  c_neTensorT :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ()
+
+-- | p_ltTensor : Pointer to function : state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h &THCudaFloatTensor_ltTensor"
+  p_ltTensor :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ())
+
+-- | p_gtTensor : Pointer to function : state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h &THCudaFloatTensor_gtTensor"
+  p_gtTensor :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ())
+
+-- | p_leTensor : Pointer to function : state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h &THCudaFloatTensor_leTensor"
+  p_leTensor :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ())
+
+-- | p_geTensor : Pointer to function : state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h &THCudaFloatTensor_geTensor"
+  p_geTensor :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ())
+
+-- | p_eqTensor : Pointer to function : state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h &THCudaFloatTensor_eqTensor"
+  p_eqTensor :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ())
+
+-- | p_neTensor : Pointer to function : state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h &THCudaFloatTensor_neTensor"
+  p_neTensor :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ())
+
+-- | p_ltTensorT : Pointer to function : state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h &THCudaFloatTensor_ltTensorT"
+  p_ltTensorT :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ())
+
+-- | p_gtTensorT : Pointer to function : state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h &THCudaFloatTensor_gtTensorT"
+  p_gtTensorT :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ())
+
+-- | p_leTensorT : Pointer to function : state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h &THCudaFloatTensor_leTensorT"
+  p_leTensorT :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ())
+
+-- | p_geTensorT : Pointer to function : state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h &THCudaFloatTensor_geTensorT"
+  p_geTensorT :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ())
+
+-- | p_eqTensorT : Pointer to function : state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h &THCudaFloatTensor_eqTensorT"
+  p_eqTensorT :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ())
+
+-- | p_neTensorT : Pointer to function : state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h &THCudaFloatTensor_neTensorT"
+  p_neTensorT :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ())
diff --git a/src/Torch/FFI/THC/Float/TensorMathMagma.hs b/src/Torch/FFI/THC/Float/TensorMathMagma.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Float/TensorMathMagma.hs
@@ -0,0 +1,105 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Float.TensorMathMagma where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_gesv :  state rb_ ra_ b_ a_ -> void
+foreign import ccall "THCTensorMathMagma.h THCudaFloatTensor_gesv"
+  c_gesv :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ()
+
+-- | c_gels :  state rb_ ra_ b_ a_ -> void
+foreign import ccall "THCTensorMathMagma.h THCudaFloatTensor_gels"
+  c_gels :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ()
+
+-- | c_syev :  state re_ rv_ a_ jobz uplo -> void
+foreign import ccall "THCTensorMathMagma.h THCudaFloatTensor_syev"
+  c_syev :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> Ptr CChar -> Ptr CChar -> IO ()
+
+-- | c_geev :  state re_ rv_ a_ jobvr -> void
+foreign import ccall "THCTensorMathMagma.h THCudaFloatTensor_geev"
+  c_geev :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> Ptr CChar -> IO ()
+
+-- | c_gesvd :  state ru_ rs_ rv_ a jobu -> void
+foreign import ccall "THCTensorMathMagma.h THCudaFloatTensor_gesvd"
+  c_gesvd :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> Ptr CChar -> IO ()
+
+-- | c_gesvd2 :  state ru_ rs_ rv_ ra_ a jobu -> void
+foreign import ccall "THCTensorMathMagma.h THCudaFloatTensor_gesvd2"
+  c_gesvd2 :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> Ptr CChar -> IO ()
+
+-- | c_getri :  state ra_ a -> void
+foreign import ccall "THCTensorMathMagma.h THCudaFloatTensor_getri"
+  c_getri :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ()
+
+-- | c_potri :  state ra_ a uplo -> void
+foreign import ccall "THCTensorMathMagma.h THCudaFloatTensor_potri"
+  c_potri :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> Ptr CChar -> IO ()
+
+-- | c_potrf :  state ra_ a uplo -> void
+foreign import ccall "THCTensorMathMagma.h THCudaFloatTensor_potrf"
+  c_potrf :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> Ptr CChar -> IO ()
+
+-- | c_potrs :  state rb_ a b uplo -> void
+foreign import ccall "THCTensorMathMagma.h THCudaFloatTensor_potrs"
+  c_potrs :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> Ptr CChar -> IO ()
+
+-- | c_geqrf :  state ra_ rtau_ a_ -> void
+foreign import ccall "THCTensorMathMagma.h THCudaFloatTensor_geqrf"
+  c_geqrf :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ()
+
+-- | c_qr :  state rq_ rr_ a -> void
+foreign import ccall "THCTensorMathMagma.h THCudaFloatTensor_qr"
+  c_qr :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ()
+
+-- | p_gesv : Pointer to function : state rb_ ra_ b_ a_ -> void
+foreign import ccall "THCTensorMathMagma.h &THCudaFloatTensor_gesv"
+  p_gesv :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ())
+
+-- | p_gels : Pointer to function : state rb_ ra_ b_ a_ -> void
+foreign import ccall "THCTensorMathMagma.h &THCudaFloatTensor_gels"
+  p_gels :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ())
+
+-- | p_syev : Pointer to function : state re_ rv_ a_ jobz uplo -> void
+foreign import ccall "THCTensorMathMagma.h &THCudaFloatTensor_syev"
+  p_syev :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> Ptr CChar -> Ptr CChar -> IO ())
+
+-- | p_geev : Pointer to function : state re_ rv_ a_ jobvr -> void
+foreign import ccall "THCTensorMathMagma.h &THCudaFloatTensor_geev"
+  p_geev :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> Ptr CChar -> IO ())
+
+-- | p_gesvd : Pointer to function : state ru_ rs_ rv_ a jobu -> void
+foreign import ccall "THCTensorMathMagma.h &THCudaFloatTensor_gesvd"
+  p_gesvd :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> Ptr CChar -> IO ())
+
+-- | p_gesvd2 : Pointer to function : state ru_ rs_ rv_ ra_ a jobu -> void
+foreign import ccall "THCTensorMathMagma.h &THCudaFloatTensor_gesvd2"
+  p_gesvd2 :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> Ptr CChar -> IO ())
+
+-- | p_getri : Pointer to function : state ra_ a -> void
+foreign import ccall "THCTensorMathMagma.h &THCudaFloatTensor_getri"
+  p_getri :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ())
+
+-- | p_potri : Pointer to function : state ra_ a uplo -> void
+foreign import ccall "THCTensorMathMagma.h &THCudaFloatTensor_potri"
+  p_potri :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> Ptr CChar -> IO ())
+
+-- | p_potrf : Pointer to function : state ra_ a uplo -> void
+foreign import ccall "THCTensorMathMagma.h &THCudaFloatTensor_potrf"
+  p_potrf :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> Ptr CChar -> IO ())
+
+-- | p_potrs : Pointer to function : state rb_ a b uplo -> void
+foreign import ccall "THCTensorMathMagma.h &THCudaFloatTensor_potrs"
+  p_potrs :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> Ptr CChar -> IO ())
+
+-- | p_geqrf : Pointer to function : state ra_ rtau_ a_ -> void
+foreign import ccall "THCTensorMathMagma.h &THCudaFloatTensor_geqrf"
+  p_geqrf :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ())
+
+-- | p_qr : Pointer to function : state rq_ rr_ a -> void
+foreign import ccall "THCTensorMathMagma.h &THCudaFloatTensor_qr"
+  p_qr :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ())
diff --git a/src/Torch/FFI/THC/Float/TensorMathPairwise.hs b/src/Torch/FFI/THC/Float/TensorMathPairwise.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Float/TensorMathPairwise.hs
@@ -0,0 +1,121 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Float.TensorMathPairwise where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_add :  state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h THCudaFloatTensor_add"
+  c_add :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> CFloat -> IO ()
+
+-- | c_sub :  state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h THCudaFloatTensor_sub"
+  c_sub :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> CFloat -> IO ()
+
+-- | c_add_scaled :  state self src value alpha -> void
+foreign import ccall "THCTensorMathPairwise.h THCudaFloatTensor_add_scaled"
+  c_add_scaled :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> CFloat -> CFloat -> IO ()
+
+-- | c_sub_scaled :  state self src value alpha -> void
+foreign import ccall "THCTensorMathPairwise.h THCudaFloatTensor_sub_scaled"
+  c_sub_scaled :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> CFloat -> CFloat -> IO ()
+
+-- | c_mul :  state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h THCudaFloatTensor_mul"
+  c_mul :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> CFloat -> IO ()
+
+-- | c_div :  state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h THCudaFloatTensor_div"
+  c_div :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> CFloat -> IO ()
+
+-- | c_lshift :  state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h THCudaFloatTensor_lshift"
+  c_lshift :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> CFloat -> IO ()
+
+-- | c_rshift :  state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h THCudaFloatTensor_rshift"
+  c_rshift :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> CFloat -> IO ()
+
+-- | c_fmod :  state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h THCudaFloatTensor_fmod"
+  c_fmod :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> CFloat -> IO ()
+
+-- | c_remainder :  state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h THCudaFloatTensor_remainder"
+  c_remainder :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> CFloat -> IO ()
+
+-- | c_bitand :  state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h THCudaFloatTensor_bitand"
+  c_bitand :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> CFloat -> IO ()
+
+-- | c_bitor :  state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h THCudaFloatTensor_bitor"
+  c_bitor :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> CFloat -> IO ()
+
+-- | c_bitxor :  state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h THCudaFloatTensor_bitxor"
+  c_bitxor :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> CFloat -> IO ()
+
+-- | c_equal :  state self src -> int
+foreign import ccall "THCTensorMathPairwise.h THCudaFloatTensor_equal"
+  c_equal :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO CInt
+
+-- | p_add : Pointer to function : state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h &THCudaFloatTensor_add"
+  p_add :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> CFloat -> IO ())
+
+-- | p_sub : Pointer to function : state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h &THCudaFloatTensor_sub"
+  p_sub :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> CFloat -> IO ())
+
+-- | p_add_scaled : Pointer to function : state self src value alpha -> void
+foreign import ccall "THCTensorMathPairwise.h &THCudaFloatTensor_add_scaled"
+  p_add_scaled :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> CFloat -> CFloat -> IO ())
+
+-- | p_sub_scaled : Pointer to function : state self src value alpha -> void
+foreign import ccall "THCTensorMathPairwise.h &THCudaFloatTensor_sub_scaled"
+  p_sub_scaled :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> CFloat -> CFloat -> IO ())
+
+-- | p_mul : Pointer to function : state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h &THCudaFloatTensor_mul"
+  p_mul :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> CFloat -> IO ())
+
+-- | p_div : Pointer to function : state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h &THCudaFloatTensor_div"
+  p_div :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> CFloat -> IO ())
+
+-- | p_lshift : Pointer to function : state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h &THCudaFloatTensor_lshift"
+  p_lshift :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> CFloat -> IO ())
+
+-- | p_rshift : Pointer to function : state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h &THCudaFloatTensor_rshift"
+  p_rshift :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> CFloat -> IO ())
+
+-- | p_fmod : Pointer to function : state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h &THCudaFloatTensor_fmod"
+  p_fmod :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> CFloat -> IO ())
+
+-- | p_remainder : Pointer to function : state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h &THCudaFloatTensor_remainder"
+  p_remainder :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> CFloat -> IO ())
+
+-- | p_bitand : Pointer to function : state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h &THCudaFloatTensor_bitand"
+  p_bitand :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> CFloat -> IO ())
+
+-- | p_bitor : Pointer to function : state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h &THCudaFloatTensor_bitor"
+  p_bitor :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> CFloat -> IO ())
+
+-- | p_bitxor : Pointer to function : state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h &THCudaFloatTensor_bitxor"
+  p_bitxor :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> CFloat -> IO ())
+
+-- | p_equal : Pointer to function : state self src -> int
+foreign import ccall "THCTensorMathPairwise.h &THCudaFloatTensor_equal"
+  p_equal :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO CInt)
diff --git a/src/Torch/FFI/THC/Float/TensorMathPointwise.hs b/src/Torch/FFI/THC/Float/TensorMathPointwise.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Float/TensorMathPointwise.hs
@@ -0,0 +1,441 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Float.TensorMathPointwise where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_sigmoid :  state self src -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaFloatTensor_sigmoid"
+  c_sigmoid :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ()
+
+-- | c_log :  state self src -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaFloatTensor_log"
+  c_log :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ()
+
+-- | c_lgamma :  state self src -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaFloatTensor_lgamma"
+  c_lgamma :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ()
+
+-- | c_digamma :  state self src -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaFloatTensor_digamma"
+  c_digamma :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ()
+
+-- | c_polygamma :  state self n src -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaFloatTensor_polygamma"
+  c_polygamma :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> CLLong -> Ptr C'THCudaFloatTensor -> IO ()
+
+-- | c_log1p :  state self src -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaFloatTensor_log1p"
+  c_log1p :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ()
+
+-- | c_exp :  state self src -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaFloatTensor_exp"
+  c_exp :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ()
+
+-- | c_expm1 :  state self src -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaFloatTensor_expm1"
+  c_expm1 :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ()
+
+-- | c_cos :  state self src -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaFloatTensor_cos"
+  c_cos :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ()
+
+-- | c_acos :  state self src -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaFloatTensor_acos"
+  c_acos :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ()
+
+-- | c_cosh :  state self src -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaFloatTensor_cosh"
+  c_cosh :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ()
+
+-- | c_sin :  state self src -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaFloatTensor_sin"
+  c_sin :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ()
+
+-- | c_asin :  state self src -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaFloatTensor_asin"
+  c_asin :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ()
+
+-- | c_sinh :  state self src -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaFloatTensor_sinh"
+  c_sinh :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ()
+
+-- | c_tan :  state self src -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaFloatTensor_tan"
+  c_tan :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ()
+
+-- | c_atan :  state self src -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaFloatTensor_atan"
+  c_atan :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ()
+
+-- | c_atan2 :  state r_ tx ty -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaFloatTensor_atan2"
+  c_atan2 :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ()
+
+-- | c_tanh :  state self src -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaFloatTensor_tanh"
+  c_tanh :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ()
+
+-- | c_erf :  state self src -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaFloatTensor_erf"
+  c_erf :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ()
+
+-- | c_erfinv :  state self src -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaFloatTensor_erfinv"
+  c_erfinv :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ()
+
+-- | c_pow :  state self src value -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaFloatTensor_pow"
+  c_pow :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> CFloat -> IO ()
+
+-- | c_tpow :  state self value src -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaFloatTensor_tpow"
+  c_tpow :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> CFloat -> Ptr C'THCudaFloatTensor -> IO ()
+
+-- | c_sqrt :  state self src -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaFloatTensor_sqrt"
+  c_sqrt :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ()
+
+-- | c_rsqrt :  state self src -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaFloatTensor_rsqrt"
+  c_rsqrt :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ()
+
+-- | c_ceil :  state self src -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaFloatTensor_ceil"
+  c_ceil :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ()
+
+-- | c_floor :  state self src -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaFloatTensor_floor"
+  c_floor :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ()
+
+-- | c_round :  state self src -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaFloatTensor_round"
+  c_round :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ()
+
+-- | c_trunc :  state self src -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaFloatTensor_trunc"
+  c_trunc :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ()
+
+-- | c_frac :  state self src -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaFloatTensor_frac"
+  c_frac :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ()
+
+-- | c_lerp :  state result a b w -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaFloatTensor_lerp"
+  c_lerp :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> CFloat -> IO ()
+
+-- | c_cinv :  state self src -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaFloatTensor_cinv"
+  c_cinv :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ()
+
+-- | c_neg :  state self src -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaFloatTensor_neg"
+  c_neg :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ()
+
+-- | c_abs :  state self src -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaFloatTensor_abs"
+  c_abs :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ()
+
+-- | c_sign :  state self src -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaFloatTensor_sign"
+  c_sign :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ()
+
+-- | c_clamp :  state self src min_value max_value -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaFloatTensor_clamp"
+  c_clamp :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> CFloat -> CFloat -> IO ()
+
+-- | c_cross :  state self src1 src2 dimension -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaFloatTensor_cross"
+  c_cross :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> CInt -> IO ()
+
+-- | c_cadd :  state self src1 value src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaFloatTensor_cadd"
+  c_cadd :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> CFloat -> Ptr C'THCudaFloatTensor -> IO ()
+
+-- | c_csub :  state self src1 value src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaFloatTensor_csub"
+  c_csub :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> CFloat -> Ptr C'THCudaFloatTensor -> IO ()
+
+-- | c_cmul :  state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaFloatTensor_cmul"
+  c_cmul :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ()
+
+-- | c_cpow :  state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaFloatTensor_cpow"
+  c_cpow :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ()
+
+-- | c_cdiv :  state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaFloatTensor_cdiv"
+  c_cdiv :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ()
+
+-- | c_clshift :  state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaFloatTensor_clshift"
+  c_clshift :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ()
+
+-- | c_crshift :  state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaFloatTensor_crshift"
+  c_crshift :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ()
+
+-- | c_cmax :  state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaFloatTensor_cmax"
+  c_cmax :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ()
+
+-- | c_cmin :  state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaFloatTensor_cmin"
+  c_cmin :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ()
+
+-- | c_cfmod :  state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaFloatTensor_cfmod"
+  c_cfmod :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ()
+
+-- | c_cremainder :  state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaFloatTensor_cremainder"
+  c_cremainder :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ()
+
+-- | c_cmaxValue :  state self src value -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaFloatTensor_cmaxValue"
+  c_cmaxValue :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> CFloat -> IO ()
+
+-- | c_cminValue :  state self src value -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaFloatTensor_cminValue"
+  c_cminValue :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> CFloat -> IO ()
+
+-- | c_cbitand :  state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaFloatTensor_cbitand"
+  c_cbitand :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ()
+
+-- | c_cbitor :  state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaFloatTensor_cbitor"
+  c_cbitor :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ()
+
+-- | c_cbitxor :  state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaFloatTensor_cbitxor"
+  c_cbitxor :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ()
+
+-- | c_addcmul :  state self t value src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaFloatTensor_addcmul"
+  c_addcmul :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> CFloat -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ()
+
+-- | c_addcdiv :  state self t value src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaFloatTensor_addcdiv"
+  c_addcdiv :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> CFloat -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ()
+
+-- | p_sigmoid : Pointer to function : state self src -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaFloatTensor_sigmoid"
+  p_sigmoid :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ())
+
+-- | p_log : Pointer to function : state self src -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaFloatTensor_log"
+  p_log :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ())
+
+-- | p_lgamma : Pointer to function : state self src -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaFloatTensor_lgamma"
+  p_lgamma :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ())
+
+-- | p_digamma : Pointer to function : state self src -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaFloatTensor_digamma"
+  p_digamma :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ())
+
+-- | p_polygamma : Pointer to function : state self n src -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaFloatTensor_polygamma"
+  p_polygamma :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> CLLong -> Ptr C'THCudaFloatTensor -> IO ())
+
+-- | p_log1p : Pointer to function : state self src -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaFloatTensor_log1p"
+  p_log1p :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ())
+
+-- | p_exp : Pointer to function : state self src -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaFloatTensor_exp"
+  p_exp :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ())
+
+-- | p_expm1 : Pointer to function : state self src -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaFloatTensor_expm1"
+  p_expm1 :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ())
+
+-- | p_cos : Pointer to function : state self src -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaFloatTensor_cos"
+  p_cos :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ())
+
+-- | p_acos : Pointer to function : state self src -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaFloatTensor_acos"
+  p_acos :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ())
+
+-- | p_cosh : Pointer to function : state self src -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaFloatTensor_cosh"
+  p_cosh :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ())
+
+-- | p_sin : Pointer to function : state self src -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaFloatTensor_sin"
+  p_sin :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ())
+
+-- | p_asin : Pointer to function : state self src -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaFloatTensor_asin"
+  p_asin :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ())
+
+-- | p_sinh : Pointer to function : state self src -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaFloatTensor_sinh"
+  p_sinh :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ())
+
+-- | p_tan : Pointer to function : state self src -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaFloatTensor_tan"
+  p_tan :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ())
+
+-- | p_atan : Pointer to function : state self src -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaFloatTensor_atan"
+  p_atan :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ())
+
+-- | p_atan2 : Pointer to function : state r_ tx ty -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaFloatTensor_atan2"
+  p_atan2 :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ())
+
+-- | p_tanh : Pointer to function : state self src -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaFloatTensor_tanh"
+  p_tanh :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ())
+
+-- | p_erf : Pointer to function : state self src -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaFloatTensor_erf"
+  p_erf :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ())
+
+-- | p_erfinv : Pointer to function : state self src -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaFloatTensor_erfinv"
+  p_erfinv :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ())
+
+-- | p_pow : Pointer to function : state self src value -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaFloatTensor_pow"
+  p_pow :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> CFloat -> IO ())
+
+-- | p_tpow : Pointer to function : state self value src -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaFloatTensor_tpow"
+  p_tpow :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> CFloat -> Ptr C'THCudaFloatTensor -> IO ())
+
+-- | p_sqrt : Pointer to function : state self src -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaFloatTensor_sqrt"
+  p_sqrt :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ())
+
+-- | p_rsqrt : Pointer to function : state self src -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaFloatTensor_rsqrt"
+  p_rsqrt :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ())
+
+-- | p_ceil : Pointer to function : state self src -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaFloatTensor_ceil"
+  p_ceil :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ())
+
+-- | p_floor : Pointer to function : state self src -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaFloatTensor_floor"
+  p_floor :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ())
+
+-- | p_round : Pointer to function : state self src -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaFloatTensor_round"
+  p_round :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ())
+
+-- | p_trunc : Pointer to function : state self src -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaFloatTensor_trunc"
+  p_trunc :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ())
+
+-- | p_frac : Pointer to function : state self src -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaFloatTensor_frac"
+  p_frac :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ())
+
+-- | p_lerp : Pointer to function : state result a b w -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaFloatTensor_lerp"
+  p_lerp :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> CFloat -> IO ())
+
+-- | p_cinv : Pointer to function : state self src -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaFloatTensor_cinv"
+  p_cinv :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ())
+
+-- | p_neg : Pointer to function : state self src -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaFloatTensor_neg"
+  p_neg :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ())
+
+-- | p_abs : Pointer to function : state self src -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaFloatTensor_abs"
+  p_abs :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ())
+
+-- | p_sign : Pointer to function : state self src -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaFloatTensor_sign"
+  p_sign :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ())
+
+-- | p_clamp : Pointer to function : state self src min_value max_value -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaFloatTensor_clamp"
+  p_clamp :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> CFloat -> CFloat -> IO ())
+
+-- | p_cross : Pointer to function : state self src1 src2 dimension -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaFloatTensor_cross"
+  p_cross :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> CInt -> IO ())
+
+-- | p_cadd : Pointer to function : state self src1 value src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaFloatTensor_cadd"
+  p_cadd :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> CFloat -> Ptr C'THCudaFloatTensor -> IO ())
+
+-- | p_csub : Pointer to function : state self src1 value src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaFloatTensor_csub"
+  p_csub :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> CFloat -> Ptr C'THCudaFloatTensor -> IO ())
+
+-- | p_cmul : Pointer to function : state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaFloatTensor_cmul"
+  p_cmul :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ())
+
+-- | p_cpow : Pointer to function : state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaFloatTensor_cpow"
+  p_cpow :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ())
+
+-- | p_cdiv : Pointer to function : state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaFloatTensor_cdiv"
+  p_cdiv :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ())
+
+-- | p_clshift : Pointer to function : state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaFloatTensor_clshift"
+  p_clshift :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ())
+
+-- | p_crshift : Pointer to function : state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaFloatTensor_crshift"
+  p_crshift :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ())
+
+-- | p_cmax : Pointer to function : state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaFloatTensor_cmax"
+  p_cmax :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ())
+
+-- | p_cmin : Pointer to function : state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaFloatTensor_cmin"
+  p_cmin :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ())
+
+-- | p_cfmod : Pointer to function : state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaFloatTensor_cfmod"
+  p_cfmod :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ())
+
+-- | p_cremainder : Pointer to function : state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaFloatTensor_cremainder"
+  p_cremainder :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ())
+
+-- | p_cmaxValue : Pointer to function : state self src value -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaFloatTensor_cmaxValue"
+  p_cmaxValue :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> CFloat -> IO ())
+
+-- | p_cminValue : Pointer to function : state self src value -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaFloatTensor_cminValue"
+  p_cminValue :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> CFloat -> IO ())
+
+-- | p_cbitand : Pointer to function : state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaFloatTensor_cbitand"
+  p_cbitand :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ())
+
+-- | p_cbitor : Pointer to function : state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaFloatTensor_cbitor"
+  p_cbitor :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ())
+
+-- | p_cbitxor : Pointer to function : state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaFloatTensor_cbitxor"
+  p_cbitxor :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ())
+
+-- | p_addcmul : Pointer to function : state self t value src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaFloatTensor_addcmul"
+  p_addcmul :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> CFloat -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ())
+
+-- | p_addcdiv : Pointer to function : state self t value src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaFloatTensor_addcdiv"
+  p_addcdiv :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> CFloat -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ())
diff --git a/src/Torch/FFI/THC/Float/TensorMathReduce.hs b/src/Torch/FFI/THC/Float/TensorMathReduce.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Float/TensorMathReduce.hs
@@ -0,0 +1,169 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Float.TensorMathReduce where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_renorm :  state self src value dimension max_norm -> void
+foreign import ccall "THCTensorMathReduce.h THCudaFloatTensor_renorm"
+  c_renorm :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> CFloat -> CInt -> CFloat -> IO ()
+
+-- | c_std :  state self src dim biased keepdim -> void
+foreign import ccall "THCTensorMathReduce.h THCudaFloatTensor_std"
+  c_std :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> CInt -> CInt -> CInt -> IO ()
+
+-- | c_norm :  state self src value dimension keepdim -> void
+foreign import ccall "THCTensorMathReduce.h THCudaFloatTensor_norm"
+  c_norm :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> CFloat -> CInt -> CInt -> IO ()
+
+-- | c_var :  state self src dim biased keepdim -> void
+foreign import ccall "THCTensorMathReduce.h THCudaFloatTensor_var"
+  c_var :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> CInt -> CInt -> CInt -> IO ()
+
+-- | c_stdall :  state self biased -> accreal
+foreign import ccall "THCTensorMathReduce.h THCudaFloatTensor_stdall"
+  c_stdall :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> CInt -> IO CDouble
+
+-- | c_normall :  state self value -> accreal
+foreign import ccall "THCTensorMathReduce.h THCudaFloatTensor_normall"
+  c_normall :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> CFloat -> IO CDouble
+
+-- | c_varall :  state self biased -> accreal
+foreign import ccall "THCTensorMathReduce.h THCudaFloatTensor_varall"
+  c_varall :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> CInt -> IO CDouble
+
+-- | c_sum :  state self src dim keepdim -> void
+foreign import ccall "THCTensorMathReduce.h THCudaFloatTensor_sum"
+  c_sum :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> CInt -> CInt -> IO ()
+
+-- | c_prod :  state self src dim keepdim -> void
+foreign import ccall "THCTensorMathReduce.h THCudaFloatTensor_prod"
+  c_prod :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> CInt -> CInt -> IO ()
+
+-- | c_mean :  state self src dim keepdim -> void
+foreign import ccall "THCTensorMathReduce.h THCudaFloatTensor_mean"
+  c_mean :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> CInt -> CInt -> IO ()
+
+-- | c_sumall :  state self -> accreal
+foreign import ccall "THCTensorMathReduce.h THCudaFloatTensor_sumall"
+  c_sumall :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> IO CDouble
+
+-- | c_prodall :  state self -> accreal
+foreign import ccall "THCTensorMathReduce.h THCudaFloatTensor_prodall"
+  c_prodall :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> IO CDouble
+
+-- | c_meanall :  state self -> accreal
+foreign import ccall "THCTensorMathReduce.h THCudaFloatTensor_meanall"
+  c_meanall :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> IO CDouble
+
+-- | c_min :  state values indices src dim keepdim -> void
+foreign import ccall "THCTensorMathReduce.h THCudaFloatTensor_min"
+  c_min :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaFloatTensor -> CInt -> CInt -> IO ()
+
+-- | c_max :  state values indices src dim keepdim -> void
+foreign import ccall "THCTensorMathReduce.h THCudaFloatTensor_max"
+  c_max :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaFloatTensor -> CInt -> CInt -> IO ()
+
+-- | c_minall :  state self -> real
+foreign import ccall "THCTensorMathReduce.h THCudaFloatTensor_minall"
+  c_minall :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> IO CFloat
+
+-- | c_maxall :  state self -> real
+foreign import ccall "THCTensorMathReduce.h THCudaFloatTensor_maxall"
+  c_maxall :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> IO CFloat
+
+-- | c_medianall :  state self -> real
+foreign import ccall "THCTensorMathReduce.h THCudaFloatTensor_medianall"
+  c_medianall :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> IO CFloat
+
+-- | c_median :  state values indices src dim keepdim -> void
+foreign import ccall "THCTensorMathReduce.h THCudaFloatTensor_median"
+  c_median :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaFloatTensor -> CInt -> CInt -> IO ()
+
+-- | c_dist :  state self src value -> accreal
+foreign import ccall "THCTensorMathReduce.h THCudaFloatTensor_dist"
+  c_dist :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> CFloat -> IO CDouble
+
+-- | p_renorm : Pointer to function : state self src value dimension max_norm -> void
+foreign import ccall "THCTensorMathReduce.h &THCudaFloatTensor_renorm"
+  p_renorm :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> CFloat -> CInt -> CFloat -> IO ())
+
+-- | p_std : Pointer to function : state self src dim biased keepdim -> void
+foreign import ccall "THCTensorMathReduce.h &THCudaFloatTensor_std"
+  p_std :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> CInt -> CInt -> CInt -> IO ())
+
+-- | p_norm : Pointer to function : state self src value dimension keepdim -> void
+foreign import ccall "THCTensorMathReduce.h &THCudaFloatTensor_norm"
+  p_norm :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> CFloat -> CInt -> CInt -> IO ())
+
+-- | p_var : Pointer to function : state self src dim biased keepdim -> void
+foreign import ccall "THCTensorMathReduce.h &THCudaFloatTensor_var"
+  p_var :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> CInt -> CInt -> CInt -> IO ())
+
+-- | p_stdall : Pointer to function : state self biased -> accreal
+foreign import ccall "THCTensorMathReduce.h &THCudaFloatTensor_stdall"
+  p_stdall :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> CInt -> IO CDouble)
+
+-- | p_normall : Pointer to function : state self value -> accreal
+foreign import ccall "THCTensorMathReduce.h &THCudaFloatTensor_normall"
+  p_normall :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> CFloat -> IO CDouble)
+
+-- | p_varall : Pointer to function : state self biased -> accreal
+foreign import ccall "THCTensorMathReduce.h &THCudaFloatTensor_varall"
+  p_varall :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> CInt -> IO CDouble)
+
+-- | p_sum : Pointer to function : state self src dim keepdim -> void
+foreign import ccall "THCTensorMathReduce.h &THCudaFloatTensor_sum"
+  p_sum :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> CInt -> CInt -> IO ())
+
+-- | p_prod : Pointer to function : state self src dim keepdim -> void
+foreign import ccall "THCTensorMathReduce.h &THCudaFloatTensor_prod"
+  p_prod :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> CInt -> CInt -> IO ())
+
+-- | p_mean : Pointer to function : state self src dim keepdim -> void
+foreign import ccall "THCTensorMathReduce.h &THCudaFloatTensor_mean"
+  p_mean :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> CInt -> CInt -> IO ())
+
+-- | p_sumall : Pointer to function : state self -> accreal
+foreign import ccall "THCTensorMathReduce.h &THCudaFloatTensor_sumall"
+  p_sumall :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> IO CDouble)
+
+-- | p_prodall : Pointer to function : state self -> accreal
+foreign import ccall "THCTensorMathReduce.h &THCudaFloatTensor_prodall"
+  p_prodall :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> IO CDouble)
+
+-- | p_meanall : Pointer to function : state self -> accreal
+foreign import ccall "THCTensorMathReduce.h &THCudaFloatTensor_meanall"
+  p_meanall :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> IO CDouble)
+
+-- | p_min : Pointer to function : state values indices src dim keepdim -> void
+foreign import ccall "THCTensorMathReduce.h &THCudaFloatTensor_min"
+  p_min :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaFloatTensor -> CInt -> CInt -> IO ())
+
+-- | p_max : Pointer to function : state values indices src dim keepdim -> void
+foreign import ccall "THCTensorMathReduce.h &THCudaFloatTensor_max"
+  p_max :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaFloatTensor -> CInt -> CInt -> IO ())
+
+-- | p_minall : Pointer to function : state self -> real
+foreign import ccall "THCTensorMathReduce.h &THCudaFloatTensor_minall"
+  p_minall :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> IO CFloat)
+
+-- | p_maxall : Pointer to function : state self -> real
+foreign import ccall "THCTensorMathReduce.h &THCudaFloatTensor_maxall"
+  p_maxall :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> IO CFloat)
+
+-- | p_medianall : Pointer to function : state self -> real
+foreign import ccall "THCTensorMathReduce.h &THCudaFloatTensor_medianall"
+  p_medianall :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> IO CFloat)
+
+-- | p_median : Pointer to function : state values indices src dim keepdim -> void
+foreign import ccall "THCTensorMathReduce.h &THCudaFloatTensor_median"
+  p_median :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaFloatTensor -> CInt -> CInt -> IO ())
+
+-- | p_dist : Pointer to function : state self src value -> accreal
+foreign import ccall "THCTensorMathReduce.h &THCudaFloatTensor_dist"
+  p_dist :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> CFloat -> IO CDouble)
diff --git a/src/Torch/FFI/THC/Float/TensorMathScan.hs b/src/Torch/FFI/THC/Float/TensorMathScan.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Float/TensorMathScan.hs
@@ -0,0 +1,25 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Float.TensorMathScan where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_cumsum :  state self src dim -> void
+foreign import ccall "THCTensorMathScan.h THCudaFloatTensor_cumsum"
+  c_cumsum :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> CInt -> IO ()
+
+-- | c_cumprod :  state self src dim -> void
+foreign import ccall "THCTensorMathScan.h THCudaFloatTensor_cumprod"
+  c_cumprod :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> CInt -> IO ()
+
+-- | p_cumsum : Pointer to function : state self src dim -> void
+foreign import ccall "THCTensorMathScan.h &THCudaFloatTensor_cumsum"
+  p_cumsum :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> CInt -> IO ())
+
+-- | p_cumprod : Pointer to function : state self src dim -> void
+foreign import ccall "THCTensorMathScan.h &THCudaFloatTensor_cumprod"
+  p_cumprod :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> CInt -> IO ())
diff --git a/src/Torch/FFI/THC/Float/TensorMode.hs b/src/Torch/FFI/THC/Float/TensorMode.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Float/TensorMode.hs
@@ -0,0 +1,17 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Float.TensorMode where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_mode :  state values indices input dimension keepdim -> void
+foreign import ccall "THCTensorMode.h THCudaFloatTensor_mode"
+  c_mode :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaFloatTensor -> CInt -> CInt -> IO ()
+
+-- | p_mode : Pointer to function : state values indices input dimension keepdim -> void
+foreign import ccall "THCTensorMode.h &THCudaFloatTensor_mode"
+  p_mode :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaFloatTensor -> CInt -> CInt -> IO ())
diff --git a/src/Torch/FFI/THC/Float/TensorRandom.hs b/src/Torch/FFI/THC/Float/TensorRandom.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Float/TensorRandom.hs
@@ -0,0 +1,161 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Float.TensorRandom where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_uniform :  state self a b -> void
+foreign import ccall "THCTensorRandom.h THCudaFloatTensor_uniform"
+  c_uniform :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> CDouble -> CDouble -> IO ()
+
+-- | c_rand :  state r_ size -> void
+foreign import ccall "THCTensorRandom.h THCudaFloatTensor_rand"
+  c_rand :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THLongStorage -> IO ()
+
+-- | c_randn :  state r_ size -> void
+foreign import ccall "THCTensorRandom.h THCudaFloatTensor_randn"
+  c_randn :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THLongStorage -> IO ()
+
+-- | c_normal :  state self mean stdv -> void
+foreign import ccall "THCTensorRandom.h THCudaFloatTensor_normal"
+  c_normal :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> CDouble -> CDouble -> IO ()
+
+-- | c_normal_means :  state self means stddev -> void
+foreign import ccall "THCTensorRandom.h THCudaFloatTensor_normal_means"
+  c_normal_means :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> CDouble -> IO ()
+
+-- | c_normal_stddevs :  state self mean stddevs -> void
+foreign import ccall "THCTensorRandom.h THCudaFloatTensor_normal_stddevs"
+  c_normal_stddevs :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> CDouble -> Ptr C'THCudaFloatTensor -> IO ()
+
+-- | c_normal_means_stddevs :  state self means stddevs -> void
+foreign import ccall "THCTensorRandom.h THCudaFloatTensor_normal_means_stddevs"
+  c_normal_means_stddevs :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ()
+
+-- | c_logNormal :  state self mean stdv -> void
+foreign import ccall "THCTensorRandom.h THCudaFloatTensor_logNormal"
+  c_logNormal :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> CDouble -> CDouble -> IO ()
+
+-- | c_exponential :  state self lambda -> void
+foreign import ccall "THCTensorRandom.h THCudaFloatTensor_exponential"
+  c_exponential :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> CDouble -> IO ()
+
+-- | c_cauchy :  state self median sigma -> void
+foreign import ccall "THCTensorRandom.h THCudaFloatTensor_cauchy"
+  c_cauchy :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> CDouble -> CDouble -> IO ()
+
+-- | c_multinomial :  state self prob_dist n_sample with_replacement -> void
+foreign import ccall "THCTensorRandom.h THCudaFloatTensor_multinomial"
+  c_multinomial :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaFloatTensor -> CInt -> CInt -> IO ()
+
+-- | c_multinomialAliasSetup :  state probs J q -> void
+foreign import ccall "THCTensorRandom.h THCudaFloatTensor_multinomialAliasSetup"
+  c_multinomialAliasSetup :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaFloatTensor -> IO ()
+
+-- | c_multinomialAliasDraw :  state self _J _q -> void
+foreign import ccall "THCTensorRandom.h THCudaFloatTensor_multinomialAliasDraw"
+  c_multinomialAliasDraw :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaFloatTensor -> IO ()
+
+-- | c_random :  state self -> void
+foreign import ccall "THCTensorRandom.h THCudaFloatTensor_random"
+  c_random :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> IO ()
+
+-- | c_clampedRandom :  state self min max -> void
+foreign import ccall "THCTensorRandom.h THCudaFloatTensor_clampedRandom"
+  c_clampedRandom :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> CLLong -> CLLong -> IO ()
+
+-- | c_cappedRandom :  state self max -> void
+foreign import ccall "THCTensorRandom.h THCudaFloatTensor_cappedRandom"
+  c_cappedRandom :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> CLLong -> IO ()
+
+-- | c_bernoulli :  state self p -> void
+foreign import ccall "THCTensorRandom.h THCudaFloatTensor_bernoulli"
+  c_bernoulli :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> CDouble -> IO ()
+
+-- | c_bernoulli_DoubleTensor :  state self p -> void
+foreign import ccall "THCTensorRandom.h THCudaFloatTensor_bernoulli_DoubleTensor"
+  c_bernoulli_DoubleTensor :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_geometric :  state self p -> void
+foreign import ccall "THCTensorRandom.h THCudaFloatTensor_geometric"
+  c_geometric :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> CDouble -> IO ()
+
+-- | p_uniform : Pointer to function : state self a b -> void
+foreign import ccall "THCTensorRandom.h &THCudaFloatTensor_uniform"
+  p_uniform :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> CDouble -> CDouble -> IO ())
+
+-- | p_rand : Pointer to function : state r_ size -> void
+foreign import ccall "THCTensorRandom.h &THCudaFloatTensor_rand"
+  p_rand :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THLongStorage -> IO ())
+
+-- | p_randn : Pointer to function : state r_ size -> void
+foreign import ccall "THCTensorRandom.h &THCudaFloatTensor_randn"
+  p_randn :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THLongStorage -> IO ())
+
+-- | p_normal : Pointer to function : state self mean stdv -> void
+foreign import ccall "THCTensorRandom.h &THCudaFloatTensor_normal"
+  p_normal :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> CDouble -> CDouble -> IO ())
+
+-- | p_normal_means : Pointer to function : state self means stddev -> void
+foreign import ccall "THCTensorRandom.h &THCudaFloatTensor_normal_means"
+  p_normal_means :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> CDouble -> IO ())
+
+-- | p_normal_stddevs : Pointer to function : state self mean stddevs -> void
+foreign import ccall "THCTensorRandom.h &THCudaFloatTensor_normal_stddevs"
+  p_normal_stddevs :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> CDouble -> Ptr C'THCudaFloatTensor -> IO ())
+
+-- | p_normal_means_stddevs : Pointer to function : state self means stddevs -> void
+foreign import ccall "THCTensorRandom.h &THCudaFloatTensor_normal_means_stddevs"
+  p_normal_means_stddevs :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> IO ())
+
+-- | p_logNormal : Pointer to function : state self mean stdv -> void
+foreign import ccall "THCTensorRandom.h &THCudaFloatTensor_logNormal"
+  p_logNormal :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> CDouble -> CDouble -> IO ())
+
+-- | p_exponential : Pointer to function : state self lambda -> void
+foreign import ccall "THCTensorRandom.h &THCudaFloatTensor_exponential"
+  p_exponential :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> CDouble -> IO ())
+
+-- | p_cauchy : Pointer to function : state self median sigma -> void
+foreign import ccall "THCTensorRandom.h &THCudaFloatTensor_cauchy"
+  p_cauchy :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> CDouble -> CDouble -> IO ())
+
+-- | p_multinomial : Pointer to function : state self prob_dist n_sample with_replacement -> void
+foreign import ccall "THCTensorRandom.h &THCudaFloatTensor_multinomial"
+  p_multinomial :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaFloatTensor -> CInt -> CInt -> IO ())
+
+-- | p_multinomialAliasSetup : Pointer to function : state probs J q -> void
+foreign import ccall "THCTensorRandom.h &THCudaFloatTensor_multinomialAliasSetup"
+  p_multinomialAliasSetup :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaFloatTensor -> IO ())
+
+-- | p_multinomialAliasDraw : Pointer to function : state self _J _q -> void
+foreign import ccall "THCTensorRandom.h &THCudaFloatTensor_multinomialAliasDraw"
+  p_multinomialAliasDraw :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaFloatTensor -> IO ())
+
+-- | p_random : Pointer to function : state self -> void
+foreign import ccall "THCTensorRandom.h &THCudaFloatTensor_random"
+  p_random :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> IO ())
+
+-- | p_clampedRandom : Pointer to function : state self min max -> void
+foreign import ccall "THCTensorRandom.h &THCudaFloatTensor_clampedRandom"
+  p_clampedRandom :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> CLLong -> CLLong -> IO ())
+
+-- | p_cappedRandom : Pointer to function : state self max -> void
+foreign import ccall "THCTensorRandom.h &THCudaFloatTensor_cappedRandom"
+  p_cappedRandom :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> CLLong -> IO ())
+
+-- | p_bernoulli : Pointer to function : state self p -> void
+foreign import ccall "THCTensorRandom.h &THCudaFloatTensor_bernoulli"
+  p_bernoulli :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> CDouble -> IO ())
+
+-- | p_bernoulli_DoubleTensor : Pointer to function : state self p -> void
+foreign import ccall "THCTensorRandom.h &THCudaFloatTensor_bernoulli_DoubleTensor"
+  p_bernoulli_DoubleTensor :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_geometric : Pointer to function : state self p -> void
+foreign import ccall "THCTensorRandom.h &THCudaFloatTensor_geometric"
+  p_geometric :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> CDouble -> IO ())
diff --git a/src/Torch/FFI/THC/Float/TensorScatterGather.hs b/src/Torch/FFI/THC/Float/TensorScatterGather.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Float/TensorScatterGather.hs
@@ -0,0 +1,41 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Float.TensorScatterGather where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_gather :  state tensor src dim index -> void
+foreign import ccall "THCTensorScatterGather.h THCudaFloatTensor_gather"
+  c_gather :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> CInt -> Ptr C'THCudaLongTensor -> IO ()
+
+-- | c_scatter :  state tensor dim index src -> void
+foreign import ccall "THCTensorScatterGather.h THCudaFloatTensor_scatter"
+  c_scatter :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> CInt -> Ptr C'THCudaLongTensor -> Ptr C'THCudaFloatTensor -> IO ()
+
+-- | c_scatterAdd :  state tensor dim index src -> void
+foreign import ccall "THCTensorScatterGather.h THCudaFloatTensor_scatterAdd"
+  c_scatterAdd :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> CInt -> Ptr C'THCudaLongTensor -> Ptr C'THCudaFloatTensor -> IO ()
+
+-- | c_scatterFill :  state tensor dim index value -> void
+foreign import ccall "THCTensorScatterGather.h THCudaFloatTensor_scatterFill"
+  c_scatterFill :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> CInt -> Ptr C'THCudaLongTensor -> CFloat -> IO ()
+
+-- | p_gather : Pointer to function : state tensor src dim index -> void
+foreign import ccall "THCTensorScatterGather.h &THCudaFloatTensor_gather"
+  p_gather :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaFloatTensor -> CInt -> Ptr C'THCudaLongTensor -> IO ())
+
+-- | p_scatter : Pointer to function : state tensor dim index src -> void
+foreign import ccall "THCTensorScatterGather.h &THCudaFloatTensor_scatter"
+  p_scatter :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> CInt -> Ptr C'THCudaLongTensor -> Ptr C'THCudaFloatTensor -> IO ())
+
+-- | p_scatterAdd : Pointer to function : state tensor dim index src -> void
+foreign import ccall "THCTensorScatterGather.h &THCudaFloatTensor_scatterAdd"
+  p_scatterAdd :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> CInt -> Ptr C'THCudaLongTensor -> Ptr C'THCudaFloatTensor -> IO ())
+
+-- | p_scatterFill : Pointer to function : state tensor dim index value -> void
+foreign import ccall "THCTensorScatterGather.h &THCudaFloatTensor_scatterFill"
+  p_scatterFill :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> CInt -> Ptr C'THCudaLongTensor -> CFloat -> IO ())
diff --git a/src/Torch/FFI/THC/Float/TensorSort.hs b/src/Torch/FFI/THC/Float/TensorSort.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Float/TensorSort.hs
@@ -0,0 +1,25 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Float.TensorSort where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_sortKeyValueInplace :  state keys values dim order -> void
+foreign import ccall "THCTensorSort.h THCudaFloatTensor_sortKeyValueInplace"
+  c_sortKeyValueInplace :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaLongTensor -> CInt -> CInt -> IO ()
+
+-- | c_sort :  state sorted indices input dim order -> void
+foreign import ccall "THCTensorSort.h THCudaFloatTensor_sort"
+  c_sort :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaFloatTensor -> CInt -> CInt -> IO ()
+
+-- | p_sortKeyValueInplace : Pointer to function : state keys values dim order -> void
+foreign import ccall "THCTensorSort.h &THCudaFloatTensor_sortKeyValueInplace"
+  p_sortKeyValueInplace :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaLongTensor -> CInt -> CInt -> IO ())
+
+-- | p_sort : Pointer to function : state sorted indices input dim order -> void
+foreign import ccall "THCTensorSort.h &THCudaFloatTensor_sort"
+  p_sort :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaFloatTensor -> CInt -> CInt -> IO ())
diff --git a/src/Torch/FFI/THC/Float/TensorTopK.hs b/src/Torch/FFI/THC/Float/TensorTopK.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Float/TensorTopK.hs
@@ -0,0 +1,17 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Float.TensorTopK where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_topk :  state topK indices input k dim dir sorted -> void
+foreign import ccall "THCTensorTopK.h THCudaFloatTensor_topk"
+  c_topk :: Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaFloatTensor -> CLLong -> CInt -> CInt -> CInt -> IO ()
+
+-- | p_topk : Pointer to function : state topK indices input k dim dir sorted -> void
+foreign import ccall "THCTensorTopK.h &THCudaFloatTensor_topk"
+  p_topk :: FunPtr (Ptr C'THCState -> Ptr C'THCudaFloatTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaFloatTensor -> CLLong -> CInt -> CInt -> CInt -> IO ())
diff --git a/src/Torch/FFI/THC/General.hs b/src/Torch/FFI/THC/General.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/General.hs
@@ -0,0 +1,281 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.General where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_THCState_alloc :   -> THCState *
+foreign import ccall "THCGeneral.h THCState_alloc"
+  c_THCState_alloc :: IO (Ptr C'THCState)
+
+-- | c_THCState_free :  state -> void
+foreign import ccall "THCGeneral.h THCState_free"
+  c_THCState_free :: Ptr C'THCState -> IO ()
+
+-- | c_THCudaInit :  state -> void
+foreign import ccall "THCGeneral.h THCudaInit"
+  c_THCudaInit :: Ptr C'THCState -> IO ()
+
+-- | c_THCudaShutdown :  state -> void
+foreign import ccall "THCGeneral.h THCudaShutdown"
+  c_THCudaShutdown :: Ptr C'THCState -> IO ()
+
+-- | c_THCState_getPeerToPeerAccess :  state dev devToAccess -> int
+foreign import ccall "THCGeneral.h THCState_getPeerToPeerAccess"
+  c_THCState_getPeerToPeerAccess :: Ptr C'THCState -> CInt -> CInt -> IO CInt
+
+-- | c_THCState_setPeerToPeerAccess :  state dev devToAccess enable -> void
+foreign import ccall "THCGeneral.h THCState_setPeerToPeerAccess"
+  c_THCState_setPeerToPeerAccess :: Ptr C'THCState -> CInt -> CInt -> CInt -> IO ()
+
+-- | c_THCState_getKernelPeerToPeerAccessEnabled :  state -> int
+foreign import ccall "THCGeneral.h THCState_getKernelPeerToPeerAccessEnabled"
+  c_THCState_getKernelPeerToPeerAccessEnabled :: Ptr C'THCState -> IO CInt
+
+-- | c_THCState_setKernelPeerToPeerAccessEnabled :  state val -> void
+foreign import ccall "THCGeneral.h THCState_setKernelPeerToPeerAccessEnabled"
+  c_THCState_setKernelPeerToPeerAccessEnabled :: Ptr C'THCState -> CInt -> IO ()
+
+-- | c_THCState_getCudaHostAllocator :  state -> THAllocator *
+foreign import ccall "THCGeneral.h THCState_getCudaHostAllocator"
+  c_THCState_getCudaHostAllocator :: Ptr C'THCState -> IO (Ptr C'THAllocator)
+
+-- | c_THCState_getCudaUVAAllocator :  state -> THAllocator *
+foreign import ccall "THCGeneral.h THCState_getCudaUVAAllocator"
+  c_THCState_getCudaUVAAllocator :: Ptr C'THCState -> IO (Ptr C'THAllocator)
+
+-- | c_THCState_isCachingAllocatorEnabled :  state -> int
+foreign import ccall "THCGeneral.h THCState_isCachingAllocatorEnabled"
+  c_THCState_isCachingAllocatorEnabled :: Ptr C'THCState -> IO CInt
+
+-- | c_THCMagma_init :  state -> void
+foreign import ccall "THCGeneral.h THCMagma_init"
+  c_THCMagma_init :: Ptr C'THCState -> IO ()
+
+-- | c_THCState_getNumDevices :  state -> int
+foreign import ccall "THCGeneral.h THCState_getNumDevices"
+  c_THCState_getNumDevices :: Ptr C'THCState -> IO CInt
+
+-- | c_THCState_reserveStreams :  state numStreams nonBlocking -> void
+foreign import ccall "THCGeneral.h THCState_reserveStreams"
+  c_THCState_reserveStreams :: Ptr C'THCState -> CInt -> CInt -> IO ()
+
+-- | c_THCState_getNumStreams :  state -> int
+foreign import ccall "THCGeneral.h THCState_getNumStreams"
+  c_THCState_getNumStreams :: Ptr C'THCState -> IO CInt
+
+-- | c_THCState_getStream :  state -> THCStream *
+foreign import ccall "THCGeneral.h THCState_getStream"
+  c_THCState_getStream :: Ptr C'THCState -> IO (Ptr C'THCStream)
+
+-- | c_THCState_setStream :  state stream -> void
+foreign import ccall "THCGeneral.h THCState_setStream"
+  c_THCState_setStream :: Ptr C'THCState -> Ptr C'THCStream -> IO ()
+
+-- | c_THCState_getCurrentStreamIndex :  state -> int
+foreign import ccall "THCGeneral.h THCState_getCurrentStreamIndex"
+  c_THCState_getCurrentStreamIndex :: Ptr C'THCState -> IO CInt
+
+-- | c_THCState_setCurrentStreamIndex :  state stream -> void
+foreign import ccall "THCGeneral.h THCState_setCurrentStreamIndex"
+  c_THCState_setCurrentStreamIndex :: Ptr C'THCState -> CInt -> IO ()
+
+-- | c_THCState_reserveBlasHandles :  state numHandles -> void
+foreign import ccall "THCGeneral.h THCState_reserveBlasHandles"
+  c_THCState_reserveBlasHandles :: Ptr C'THCState -> CInt -> IO ()
+
+-- | c_THCState_getNumBlasHandles :  state -> int
+foreign import ccall "THCGeneral.h THCState_getNumBlasHandles"
+  c_THCState_getNumBlasHandles :: Ptr C'THCState -> IO CInt
+
+-- | c_THCState_reserveSparseHandles :  state numHandles -> void
+foreign import ccall "THCGeneral.h THCState_reserveSparseHandles"
+  c_THCState_reserveSparseHandles :: Ptr C'THCState -> CInt -> IO ()
+
+-- | c_THCState_getNumSparseHandles :  state -> int
+foreign import ccall "THCGeneral.h THCState_getNumSparseHandles"
+  c_THCState_getNumSparseHandles :: Ptr C'THCState -> IO CInt
+
+-- | c_THCState_getCurrentBlasHandleIndex :  state -> int
+foreign import ccall "THCGeneral.h THCState_getCurrentBlasHandleIndex"
+  c_THCState_getCurrentBlasHandleIndex :: Ptr C'THCState -> IO CInt
+
+-- | c_THCState_setCurrentBlasHandleIndex :  state handle -> void
+foreign import ccall "THCGeneral.h THCState_setCurrentBlasHandleIndex"
+  c_THCState_setCurrentBlasHandleIndex :: Ptr C'THCState -> CInt -> IO ()
+
+-- | c_THCState_getCurrentSparseHandleIndex :  state -> int
+foreign import ccall "THCGeneral.h THCState_getCurrentSparseHandleIndex"
+  c_THCState_getCurrentSparseHandleIndex :: Ptr C'THCState -> IO CInt
+
+-- | c_THCState_setCurrentSparseHandleIndex :  state handle -> void
+foreign import ccall "THCGeneral.h THCState_setCurrentSparseHandleIndex"
+  c_THCState_setCurrentSparseHandleIndex :: Ptr C'THCState -> CInt -> IO ()
+
+-- | c_THCState_getCurrentDeviceScratchSpace :  state -> void *
+foreign import ccall "THCGeneral.h THCState_getCurrentDeviceScratchSpace"
+  c_THCState_getCurrentDeviceScratchSpace :: Ptr C'THCState -> IO (Ptr ())
+
+-- | c_THCState_getDeviceScratchSpace :  state device stream -> void *
+foreign import ccall "THCGeneral.h THCState_getDeviceScratchSpace"
+  c_THCState_getDeviceScratchSpace :: Ptr C'THCState -> CInt -> CInt -> IO (Ptr ())
+
+-- | c_THCState_getCurrentDeviceScratchSpaceSize :  state -> size_t
+foreign import ccall "THCGeneral.h THCState_getCurrentDeviceScratchSpaceSize"
+  c_THCState_getCurrentDeviceScratchSpaceSize :: Ptr C'THCState -> IO CSize
+
+-- | c_THCState_getDeviceScratchSpaceSize :  state device -> size_t
+foreign import ccall "THCGeneral.h THCState_getDeviceScratchSpaceSize"
+  c_THCState_getDeviceScratchSpaceSize :: Ptr C'THCState -> CInt -> IO CSize
+
+-- | c_THCudaHostAlloc :  state size -> void *
+foreign import ccall "THCGeneral.h THCudaHostAlloc"
+  c_THCudaHostAlloc :: Ptr C'THCState -> CSize -> IO (Ptr ())
+
+-- | c_THCudaHostFree :  state ptr -> void
+foreign import ccall "THCGeneral.h THCudaHostFree"
+  c_THCudaHostFree :: Ptr C'THCState -> Ptr () -> IO ()
+
+-- | c_THCudaHostRecord :  state ptr -> void
+foreign import ccall "THCGeneral.h THCudaHostRecord"
+  c_THCudaHostRecord :: Ptr C'THCState -> Ptr () -> IO ()
+
+-- | p_THCState_alloc : Pointer to function :  -> THCState *
+foreign import ccall "THCGeneral.h &THCState_alloc"
+  p_THCState_alloc :: FunPtr (IO (Ptr C'THCState))
+
+-- | p_THCState_free : Pointer to function : state -> void
+foreign import ccall "THCGeneral.h &THCState_free"
+  p_THCState_free :: FunPtr (Ptr C'THCState -> IO ())
+
+-- | p_THCudaInit : Pointer to function : state -> void
+foreign import ccall "THCGeneral.h &THCudaInit"
+  p_THCudaInit :: FunPtr (Ptr C'THCState -> IO ())
+
+-- | p_THCudaShutdown : Pointer to function : state -> void
+foreign import ccall "THCGeneral.h &THCudaShutdown"
+  p_THCudaShutdown :: FunPtr (Ptr C'THCState -> IO ())
+
+-- | p_THCState_getPeerToPeerAccess : Pointer to function : state dev devToAccess -> int
+foreign import ccall "THCGeneral.h &THCState_getPeerToPeerAccess"
+  p_THCState_getPeerToPeerAccess :: FunPtr (Ptr C'THCState -> CInt -> CInt -> IO CInt)
+
+-- | p_THCState_setPeerToPeerAccess : Pointer to function : state dev devToAccess enable -> void
+foreign import ccall "THCGeneral.h &THCState_setPeerToPeerAccess"
+  p_THCState_setPeerToPeerAccess :: FunPtr (Ptr C'THCState -> CInt -> CInt -> CInt -> IO ())
+
+-- | p_THCState_getKernelPeerToPeerAccessEnabled : Pointer to function : state -> int
+foreign import ccall "THCGeneral.h &THCState_getKernelPeerToPeerAccessEnabled"
+  p_THCState_getKernelPeerToPeerAccessEnabled :: FunPtr (Ptr C'THCState -> IO CInt)
+
+-- | p_THCState_setKernelPeerToPeerAccessEnabled : Pointer to function : state val -> void
+foreign import ccall "THCGeneral.h &THCState_setKernelPeerToPeerAccessEnabled"
+  p_THCState_setKernelPeerToPeerAccessEnabled :: FunPtr (Ptr C'THCState -> CInt -> IO ())
+
+-- | p_THCState_getCudaHostAllocator : Pointer to function : state -> THAllocator *
+foreign import ccall "THCGeneral.h &THCState_getCudaHostAllocator"
+  p_THCState_getCudaHostAllocator :: FunPtr (Ptr C'THCState -> IO (Ptr C'THAllocator))
+
+-- | p_THCState_getCudaUVAAllocator : Pointer to function : state -> THAllocator *
+foreign import ccall "THCGeneral.h &THCState_getCudaUVAAllocator"
+  p_THCState_getCudaUVAAllocator :: FunPtr (Ptr C'THCState -> IO (Ptr C'THAllocator))
+
+-- | p_THCState_isCachingAllocatorEnabled : Pointer to function : state -> int
+foreign import ccall "THCGeneral.h &THCState_isCachingAllocatorEnabled"
+  p_THCState_isCachingAllocatorEnabled :: FunPtr (Ptr C'THCState -> IO CInt)
+
+-- | p_THCMagma_init : Pointer to function : state -> void
+foreign import ccall "THCGeneral.h &THCMagma_init"
+  p_THCMagma_init :: FunPtr (Ptr C'THCState -> IO ())
+
+-- | p_THCState_getNumDevices : Pointer to function : state -> int
+foreign import ccall "THCGeneral.h &THCState_getNumDevices"
+  p_THCState_getNumDevices :: FunPtr (Ptr C'THCState -> IO CInt)
+
+-- | p_THCState_reserveStreams : Pointer to function : state numStreams nonBlocking -> void
+foreign import ccall "THCGeneral.h &THCState_reserveStreams"
+  p_THCState_reserveStreams :: FunPtr (Ptr C'THCState -> CInt -> CInt -> IO ())
+
+-- | p_THCState_getNumStreams : Pointer to function : state -> int
+foreign import ccall "THCGeneral.h &THCState_getNumStreams"
+  p_THCState_getNumStreams :: FunPtr (Ptr C'THCState -> IO CInt)
+
+-- | p_THCState_getStream : Pointer to function : state -> THCStream *
+foreign import ccall "THCGeneral.h &THCState_getStream"
+  p_THCState_getStream :: FunPtr (Ptr C'THCState -> IO (Ptr C'THCStream))
+
+-- | p_THCState_setStream : Pointer to function : state stream -> void
+foreign import ccall "THCGeneral.h &THCState_setStream"
+  p_THCState_setStream :: FunPtr (Ptr C'THCState -> Ptr C'THCStream -> IO ())
+
+-- | p_THCState_getCurrentStreamIndex : Pointer to function : state -> int
+foreign import ccall "THCGeneral.h &THCState_getCurrentStreamIndex"
+  p_THCState_getCurrentStreamIndex :: FunPtr (Ptr C'THCState -> IO CInt)
+
+-- | p_THCState_setCurrentStreamIndex : Pointer to function : state stream -> void
+foreign import ccall "THCGeneral.h &THCState_setCurrentStreamIndex"
+  p_THCState_setCurrentStreamIndex :: FunPtr (Ptr C'THCState -> CInt -> IO ())
+
+-- | p_THCState_reserveBlasHandles : Pointer to function : state numHandles -> void
+foreign import ccall "THCGeneral.h &THCState_reserveBlasHandles"
+  p_THCState_reserveBlasHandles :: FunPtr (Ptr C'THCState -> CInt -> IO ())
+
+-- | p_THCState_getNumBlasHandles : Pointer to function : state -> int
+foreign import ccall "THCGeneral.h &THCState_getNumBlasHandles"
+  p_THCState_getNumBlasHandles :: FunPtr (Ptr C'THCState -> IO CInt)
+
+-- | p_THCState_reserveSparseHandles : Pointer to function : state numHandles -> void
+foreign import ccall "THCGeneral.h &THCState_reserveSparseHandles"
+  p_THCState_reserveSparseHandles :: FunPtr (Ptr C'THCState -> CInt -> IO ())
+
+-- | p_THCState_getNumSparseHandles : Pointer to function : state -> int
+foreign import ccall "THCGeneral.h &THCState_getNumSparseHandles"
+  p_THCState_getNumSparseHandles :: FunPtr (Ptr C'THCState -> IO CInt)
+
+-- | p_THCState_getCurrentBlasHandleIndex : Pointer to function : state -> int
+foreign import ccall "THCGeneral.h &THCState_getCurrentBlasHandleIndex"
+  p_THCState_getCurrentBlasHandleIndex :: FunPtr (Ptr C'THCState -> IO CInt)
+
+-- | p_THCState_setCurrentBlasHandleIndex : Pointer to function : state handle -> void
+foreign import ccall "THCGeneral.h &THCState_setCurrentBlasHandleIndex"
+  p_THCState_setCurrentBlasHandleIndex :: FunPtr (Ptr C'THCState -> CInt -> IO ())
+
+-- | p_THCState_getCurrentSparseHandleIndex : Pointer to function : state -> int
+foreign import ccall "THCGeneral.h &THCState_getCurrentSparseHandleIndex"
+  p_THCState_getCurrentSparseHandleIndex :: FunPtr (Ptr C'THCState -> IO CInt)
+
+-- | p_THCState_setCurrentSparseHandleIndex : Pointer to function : state handle -> void
+foreign import ccall "THCGeneral.h &THCState_setCurrentSparseHandleIndex"
+  p_THCState_setCurrentSparseHandleIndex :: FunPtr (Ptr C'THCState -> CInt -> IO ())
+
+-- | p_THCState_getCurrentDeviceScratchSpace : Pointer to function : state -> void *
+foreign import ccall "THCGeneral.h &THCState_getCurrentDeviceScratchSpace"
+  p_THCState_getCurrentDeviceScratchSpace :: FunPtr (Ptr C'THCState -> IO (Ptr ()))
+
+-- | p_THCState_getDeviceScratchSpace : Pointer to function : state device stream -> void *
+foreign import ccall "THCGeneral.h &THCState_getDeviceScratchSpace"
+  p_THCState_getDeviceScratchSpace :: FunPtr (Ptr C'THCState -> CInt -> CInt -> IO (Ptr ()))
+
+-- | p_THCState_getCurrentDeviceScratchSpaceSize : Pointer to function : state -> size_t
+foreign import ccall "THCGeneral.h &THCState_getCurrentDeviceScratchSpaceSize"
+  p_THCState_getCurrentDeviceScratchSpaceSize :: FunPtr (Ptr C'THCState -> IO CSize)
+
+-- | p_THCState_getDeviceScratchSpaceSize : Pointer to function : state device -> size_t
+foreign import ccall "THCGeneral.h &THCState_getDeviceScratchSpaceSize"
+  p_THCState_getDeviceScratchSpaceSize :: FunPtr (Ptr C'THCState -> CInt -> IO CSize)
+
+-- | p_THCudaHostAlloc : Pointer to function : state size -> void *
+foreign import ccall "THCGeneral.h &THCudaHostAlloc"
+  p_THCudaHostAlloc :: FunPtr (Ptr C'THCState -> CSize -> IO (Ptr ()))
+
+-- | p_THCudaHostFree : Pointer to function : state ptr -> void
+foreign import ccall "THCGeneral.h &THCudaHostFree"
+  p_THCudaHostFree :: FunPtr (Ptr C'THCState -> Ptr () -> IO ())
+
+-- | p_THCudaHostRecord : Pointer to function : state ptr -> void
+foreign import ccall "THCGeneral.h &THCudaHostRecord"
+  p_THCudaHostRecord :: FunPtr (Ptr C'THCState -> Ptr () -> IO ())
diff --git a/src/Torch/FFI/THC/Half.hs b/src/Torch/FFI/THC/Half.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Half.hs
@@ -0,0 +1,25 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Half where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_THC_nativeHalfInstructions :  state -> int
+foreign import ccall "THCHalf.h THC_nativeHalfInstructions"
+  c_THC_nativeHalfInstructions :: Ptr C'THCState -> IO CInt
+
+-- | c_THC_fastHalfInstructions :  state -> int
+foreign import ccall "THCHalf.h THC_fastHalfInstructions"
+  c_THC_fastHalfInstructions :: Ptr C'THCState -> IO CInt
+
+-- | p_THC_nativeHalfInstructions : Pointer to function : state -> int
+foreign import ccall "THCHalf.h &THC_nativeHalfInstructions"
+  p_THC_nativeHalfInstructions :: FunPtr (Ptr C'THCState -> IO CInt)
+
+-- | p_THC_fastHalfInstructions : Pointer to function : state -> int
+foreign import ccall "THCHalf.h &THC_fastHalfInstructions"
+  p_THC_fastHalfInstructions :: FunPtr (Ptr C'THCState -> IO CInt)
diff --git a/src/Torch/FFI/THC/Half/Storage.hs b/src/Torch/FFI/THC/Half/Storage.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Half/Storage.hs
@@ -0,0 +1,161 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Half.Storage where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_data :  state  -> real *
+foreign import ccall "THCStorage.h THCudaHalfStorage_data"
+  c_data :: Ptr C'THCState -> Ptr C'THCHalfStorage -> IO (Ptr CTHHalf)
+
+-- | c_size :  state  -> ptrdiff_t
+foreign import ccall "THCStorage.h THCudaHalfStorage_size"
+  c_size :: Ptr C'THCState -> Ptr C'THCHalfStorage -> IO CPtrdiff
+
+-- | c_set :  state    -> void
+foreign import ccall "THCStorage.h THCudaHalfStorage_set"
+  c_set :: Ptr C'THCState -> Ptr C'THCHalfStorage -> CPtrdiff -> CTHHalf -> IO ()
+
+-- | c_get :  state   -> real
+foreign import ccall "THCStorage.h THCudaHalfStorage_get"
+  c_get :: Ptr C'THCState -> Ptr C'THCHalfStorage -> CPtrdiff -> IO CTHHalf
+
+-- | c_new :  state -> THCStorage *
+foreign import ccall "THCStorage.h THCudaHalfStorage_new"
+  c_new :: Ptr C'THCState -> IO (Ptr C'THCHalfStorage)
+
+-- | c_newWithSize :  state size -> THCStorage *
+foreign import ccall "THCStorage.h THCudaHalfStorage_newWithSize"
+  c_newWithSize :: Ptr C'THCState -> CPtrdiff -> IO (Ptr C'THCHalfStorage)
+
+-- | c_newWithSize1 :  state  -> THCStorage *
+foreign import ccall "THCStorage.h THCudaHalfStorage_newWithSize1"
+  c_newWithSize1 :: Ptr C'THCState -> CTHHalf -> IO (Ptr C'THCHalfStorage)
+
+-- | c_newWithSize2 :  state   -> THCStorage *
+foreign import ccall "THCStorage.h THCudaHalfStorage_newWithSize2"
+  c_newWithSize2 :: Ptr C'THCState -> CTHHalf -> CTHHalf -> IO (Ptr C'THCHalfStorage)
+
+-- | c_newWithSize3 :  state    -> THCStorage *
+foreign import ccall "THCStorage.h THCudaHalfStorage_newWithSize3"
+  c_newWithSize3 :: Ptr C'THCState -> CTHHalf -> CTHHalf -> CTHHalf -> IO (Ptr C'THCHalfStorage)
+
+-- | c_newWithSize4 :  state     -> THCStorage *
+foreign import ccall "THCStorage.h THCudaHalfStorage_newWithSize4"
+  c_newWithSize4 :: Ptr C'THCState -> CTHHalf -> CTHHalf -> CTHHalf -> CTHHalf -> IO (Ptr C'THCHalfStorage)
+
+-- | c_newWithMapping :  state filename size shared -> THCStorage *
+foreign import ccall "THCStorage.h THCudaHalfStorage_newWithMapping"
+  c_newWithMapping :: Ptr C'THCState -> Ptr CChar -> CPtrdiff -> CInt -> IO (Ptr C'THCHalfStorage)
+
+-- | c_newWithData :  state data size -> THCStorage *
+foreign import ccall "THCStorage.h THCudaHalfStorage_newWithData"
+  c_newWithData :: Ptr C'THCState -> Ptr CTHHalf -> CPtrdiff -> IO (Ptr C'THCHalfStorage)
+
+-- | c_setFlag :  state storage flag -> void
+foreign import ccall "THCStorage.h THCudaHalfStorage_setFlag"
+  c_setFlag :: Ptr C'THCState -> Ptr C'THCHalfStorage -> CChar -> IO ()
+
+-- | c_clearFlag :  state storage flag -> void
+foreign import ccall "THCStorage.h THCudaHalfStorage_clearFlag"
+  c_clearFlag :: Ptr C'THCState -> Ptr C'THCHalfStorage -> CChar -> IO ()
+
+-- | c_retain :  state storage -> void
+foreign import ccall "THCStorage.h THCudaHalfStorage_retain"
+  c_retain :: Ptr C'THCState -> Ptr C'THCHalfStorage -> IO ()
+
+-- | c_free :  state storage -> void
+foreign import ccall "THCStorage.h THCudaHalfStorage_free"
+  c_free :: Ptr C'THCState -> Ptr C'THCHalfStorage -> IO ()
+
+-- | c_resize :  state storage size -> void
+foreign import ccall "THCStorage.h THCudaHalfStorage_resize"
+  c_resize :: Ptr C'THCState -> Ptr C'THCHalfStorage -> CPtrdiff -> IO ()
+
+-- | c_fill :  state storage value -> void
+foreign import ccall "THCStorage.h THCudaHalfStorage_fill"
+  c_fill :: Ptr C'THCState -> Ptr C'THCHalfStorage -> CTHHalf -> IO ()
+
+-- | c_getDevice :  state storage -> int
+foreign import ccall "THCStorage.h THCudaHalfStorage_getDevice"
+  c_getDevice :: Ptr C'THCState -> Ptr C'THCHalfStorage -> IO CInt
+
+-- | p_data : Pointer to function : state  -> real *
+foreign import ccall "THCStorage.h &THCudaHalfStorage_data"
+  p_data :: FunPtr (Ptr C'THCState -> Ptr C'THCHalfStorage -> IO (Ptr CTHHalf))
+
+-- | p_size : Pointer to function : state  -> ptrdiff_t
+foreign import ccall "THCStorage.h &THCudaHalfStorage_size"
+  p_size :: FunPtr (Ptr C'THCState -> Ptr C'THCHalfStorage -> IO CPtrdiff)
+
+-- | p_set : Pointer to function : state    -> void
+foreign import ccall "THCStorage.h &THCudaHalfStorage_set"
+  p_set :: FunPtr (Ptr C'THCState -> Ptr C'THCHalfStorage -> CPtrdiff -> CTHHalf -> IO ())
+
+-- | p_get : Pointer to function : state   -> real
+foreign import ccall "THCStorage.h &THCudaHalfStorage_get"
+  p_get :: FunPtr (Ptr C'THCState -> Ptr C'THCHalfStorage -> CPtrdiff -> IO CTHHalf)
+
+-- | p_new : Pointer to function : state -> THCStorage *
+foreign import ccall "THCStorage.h &THCudaHalfStorage_new"
+  p_new :: FunPtr (Ptr C'THCState -> IO (Ptr C'THCHalfStorage))
+
+-- | p_newWithSize : Pointer to function : state size -> THCStorage *
+foreign import ccall "THCStorage.h &THCudaHalfStorage_newWithSize"
+  p_newWithSize :: FunPtr (Ptr C'THCState -> CPtrdiff -> IO (Ptr C'THCHalfStorage))
+
+-- | p_newWithSize1 : Pointer to function : state  -> THCStorage *
+foreign import ccall "THCStorage.h &THCudaHalfStorage_newWithSize1"
+  p_newWithSize1 :: FunPtr (Ptr C'THCState -> CTHHalf -> IO (Ptr C'THCHalfStorage))
+
+-- | p_newWithSize2 : Pointer to function : state   -> THCStorage *
+foreign import ccall "THCStorage.h &THCudaHalfStorage_newWithSize2"
+  p_newWithSize2 :: FunPtr (Ptr C'THCState -> CTHHalf -> CTHHalf -> IO (Ptr C'THCHalfStorage))
+
+-- | p_newWithSize3 : Pointer to function : state    -> THCStorage *
+foreign import ccall "THCStorage.h &THCudaHalfStorage_newWithSize3"
+  p_newWithSize3 :: FunPtr (Ptr C'THCState -> CTHHalf -> CTHHalf -> CTHHalf -> IO (Ptr C'THCHalfStorage))
+
+-- | p_newWithSize4 : Pointer to function : state     -> THCStorage *
+foreign import ccall "THCStorage.h &THCudaHalfStorage_newWithSize4"
+  p_newWithSize4 :: FunPtr (Ptr C'THCState -> CTHHalf -> CTHHalf -> CTHHalf -> CTHHalf -> IO (Ptr C'THCHalfStorage))
+
+-- | p_newWithMapping : Pointer to function : state filename size shared -> THCStorage *
+foreign import ccall "THCStorage.h &THCudaHalfStorage_newWithMapping"
+  p_newWithMapping :: FunPtr (Ptr C'THCState -> Ptr CChar -> CPtrdiff -> CInt -> IO (Ptr C'THCHalfStorage))
+
+-- | p_newWithData : Pointer to function : state data size -> THCStorage *
+foreign import ccall "THCStorage.h &THCudaHalfStorage_newWithData"
+  p_newWithData :: FunPtr (Ptr C'THCState -> Ptr CTHHalf -> CPtrdiff -> IO (Ptr C'THCHalfStorage))
+
+-- | p_setFlag : Pointer to function : state storage flag -> void
+foreign import ccall "THCStorage.h &THCudaHalfStorage_setFlag"
+  p_setFlag :: FunPtr (Ptr C'THCState -> Ptr C'THCHalfStorage -> CChar -> IO ())
+
+-- | p_clearFlag : Pointer to function : state storage flag -> void
+foreign import ccall "THCStorage.h &THCudaHalfStorage_clearFlag"
+  p_clearFlag :: FunPtr (Ptr C'THCState -> Ptr C'THCHalfStorage -> CChar -> IO ())
+
+-- | p_retain : Pointer to function : state storage -> void
+foreign import ccall "THCStorage.h &THCudaHalfStorage_retain"
+  p_retain :: FunPtr (Ptr C'THCState -> Ptr C'THCHalfStorage -> IO ())
+
+-- | p_free : Pointer to function : state storage -> void
+foreign import ccall "THCStorage.h &THCudaHalfStorage_free"
+  p_free :: FunPtr (Ptr C'THCState -> Ptr C'THCHalfStorage -> IO ())
+
+-- | p_resize : Pointer to function : state storage size -> void
+foreign import ccall "THCStorage.h &THCudaHalfStorage_resize"
+  p_resize :: FunPtr (Ptr C'THCState -> Ptr C'THCHalfStorage -> CPtrdiff -> IO ())
+
+-- | p_fill : Pointer to function : state storage value -> void
+foreign import ccall "THCStorage.h &THCudaHalfStorage_fill"
+  p_fill :: FunPtr (Ptr C'THCState -> Ptr C'THCHalfStorage -> CTHHalf -> IO ())
+
+-- | p_getDevice : Pointer to function : state storage -> int
+foreign import ccall "THCStorage.h &THCudaHalfStorage_getDevice"
+  p_getDevice :: FunPtr (Ptr C'THCState -> Ptr C'THCHalfStorage -> IO CInt)
diff --git a/src/Torch/FFI/THC/Half/StorageCopy.hs b/src/Torch/FFI/THC/Half/StorageCopy.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Half/StorageCopy.hs
@@ -0,0 +1,113 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Half.StorageCopy where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_rawCopy :  state storage src -> void
+foreign import ccall "THCStorageCopy.h THCudaHalfStorage_rawCopy"
+  c_rawCopy :: Ptr C'THCState -> Ptr C'THCHalfStorage -> Ptr CTHHalf -> IO ()
+
+-- | c_copy :  state storage src -> void
+foreign import ccall "THCStorageCopy.h THCudaHalfStorage_copy"
+  c_copy :: Ptr C'THCState -> Ptr C'THCHalfStorage -> Ptr C'THCHalfStorage -> IO ()
+
+-- | c_copyByte :  state storage src -> void
+foreign import ccall "THCStorageCopy.h THCudaHalfStorage_copyByte"
+  c_copyByte :: Ptr C'THCState -> Ptr C'THCHalfStorage -> Ptr C'THByteStorage -> IO ()
+
+-- | c_copyChar :  state storage src -> void
+foreign import ccall "THCStorageCopy.h THCudaHalfStorage_copyChar"
+  c_copyChar :: Ptr C'THCState -> Ptr C'THCHalfStorage -> Ptr C'THCharStorage -> IO ()
+
+-- | c_copyShort :  state storage src -> void
+foreign import ccall "THCStorageCopy.h THCudaHalfStorage_copyShort"
+  c_copyShort :: Ptr C'THCState -> Ptr C'THCHalfStorage -> Ptr C'THShortStorage -> IO ()
+
+-- | c_copyInt :  state storage src -> void
+foreign import ccall "THCStorageCopy.h THCudaHalfStorage_copyInt"
+  c_copyInt :: Ptr C'THCState -> Ptr C'THCHalfStorage -> Ptr C'THIntStorage -> IO ()
+
+-- | c_copyLong :  state storage src -> void
+foreign import ccall "THCStorageCopy.h THCudaHalfStorage_copyLong"
+  c_copyLong :: Ptr C'THCState -> Ptr C'THCHalfStorage -> Ptr C'THLongStorage -> IO ()
+
+-- | c_copyFloat :  state storage src -> void
+foreign import ccall "THCStorageCopy.h THCudaHalfStorage_copyFloat"
+  c_copyFloat :: Ptr C'THCState -> Ptr C'THCHalfStorage -> Ptr C'THFloatStorage -> IO ()
+
+-- | c_copyDouble :  state storage src -> void
+foreign import ccall "THCStorageCopy.h THCudaHalfStorage_copyDouble"
+  c_copyDouble :: Ptr C'THCState -> Ptr C'THCHalfStorage -> Ptr C'THDoubleStorage -> IO ()
+
+-- | c_copyHalf :  state storage src -> void
+foreign import ccall "THCStorageCopy.h THCudaHalfStorage_copyHalf"
+  c_copyHalf :: Ptr C'THCState -> Ptr C'THCHalfStorage -> Ptr C'THHalfStorage -> IO ()
+
+-- | c_thCopyCuda :  state self src -> void
+foreign import ccall "THCStorageCopy.h THHalfStorage_copyCuda"
+  c_thCopyCuda :: Ptr C'THCState -> Ptr C'THHalfStorage -> Ptr C'THCHalfStorage -> IO ()
+
+-- | c_copyCuda :  state self src -> void
+foreign import ccall "THCStorageCopy.h THCudaHalfStorage_copyCuda"
+  c_copyCuda :: Ptr C'THCState -> Ptr C'THCHalfStorage -> Ptr C'THCHalfStorage -> IO ()
+
+-- | c_copyCPU :  state self src -> void
+foreign import ccall "THCStorageCopy.h THCudaHalfStorage_copyCPU"
+  c_copyCPU :: Ptr C'THCState -> Ptr C'THCHalfStorage -> Ptr C'THHalfStorage -> IO ()
+
+-- | p_rawCopy : Pointer to function : state storage src -> void
+foreign import ccall "THCStorageCopy.h &THCudaHalfStorage_rawCopy"
+  p_rawCopy :: FunPtr (Ptr C'THCState -> Ptr C'THCHalfStorage -> Ptr CTHHalf -> IO ())
+
+-- | p_copy : Pointer to function : state storage src -> void
+foreign import ccall "THCStorageCopy.h &THCudaHalfStorage_copy"
+  p_copy :: FunPtr (Ptr C'THCState -> Ptr C'THCHalfStorage -> Ptr C'THCHalfStorage -> IO ())
+
+-- | p_copyByte : Pointer to function : state storage src -> void
+foreign import ccall "THCStorageCopy.h &THCudaHalfStorage_copyByte"
+  p_copyByte :: FunPtr (Ptr C'THCState -> Ptr C'THCHalfStorage -> Ptr C'THByteStorage -> IO ())
+
+-- | p_copyChar : Pointer to function : state storage src -> void
+foreign import ccall "THCStorageCopy.h &THCudaHalfStorage_copyChar"
+  p_copyChar :: FunPtr (Ptr C'THCState -> Ptr C'THCHalfStorage -> Ptr C'THCharStorage -> IO ())
+
+-- | p_copyShort : Pointer to function : state storage src -> void
+foreign import ccall "THCStorageCopy.h &THCudaHalfStorage_copyShort"
+  p_copyShort :: FunPtr (Ptr C'THCState -> Ptr C'THCHalfStorage -> Ptr C'THShortStorage -> IO ())
+
+-- | p_copyInt : Pointer to function : state storage src -> void
+foreign import ccall "THCStorageCopy.h &THCudaHalfStorage_copyInt"
+  p_copyInt :: FunPtr (Ptr C'THCState -> Ptr C'THCHalfStorage -> Ptr C'THIntStorage -> IO ())
+
+-- | p_copyLong : Pointer to function : state storage src -> void
+foreign import ccall "THCStorageCopy.h &THCudaHalfStorage_copyLong"
+  p_copyLong :: FunPtr (Ptr C'THCState -> Ptr C'THCHalfStorage -> Ptr C'THLongStorage -> IO ())
+
+-- | p_copyFloat : Pointer to function : state storage src -> void
+foreign import ccall "THCStorageCopy.h &THCudaHalfStorage_copyFloat"
+  p_copyFloat :: FunPtr (Ptr C'THCState -> Ptr C'THCHalfStorage -> Ptr C'THFloatStorage -> IO ())
+
+-- | p_copyDouble : Pointer to function : state storage src -> void
+foreign import ccall "THCStorageCopy.h &THCudaHalfStorage_copyDouble"
+  p_copyDouble :: FunPtr (Ptr C'THCState -> Ptr C'THCHalfStorage -> Ptr C'THDoubleStorage -> IO ())
+
+-- | p_copyHalf : Pointer to function : state storage src -> void
+foreign import ccall "THCStorageCopy.h &THCudaHalfStorage_copyHalf"
+  p_copyHalf :: FunPtr (Ptr C'THCState -> Ptr C'THCHalfStorage -> Ptr C'THHalfStorage -> IO ())
+
+-- | p_thCopyCuda : Pointer to function : state self src -> void
+foreign import ccall "THCStorageCopy.h &THHalfStorage_copyCuda"
+  p_thCopyCuda :: FunPtr (Ptr C'THCState -> Ptr C'THHalfStorage -> Ptr C'THCHalfStorage -> IO ())
+
+-- | p_copyCuda : Pointer to function : state self src -> void
+foreign import ccall "THCStorageCopy.h &THCudaHalfStorage_copyCuda"
+  p_copyCuda :: FunPtr (Ptr C'THCState -> Ptr C'THCHalfStorage -> Ptr C'THCHalfStorage -> IO ())
+
+-- | p_copyCPU : Pointer to function : state self src -> void
+foreign import ccall "THCStorageCopy.h &THCudaHalfStorage_copyCPU"
+  p_copyCPU :: FunPtr (Ptr C'THCState -> Ptr C'THCHalfStorage -> Ptr C'THHalfStorage -> IO ())
diff --git a/src/Torch/FFI/THC/Half/Tensor.hs b/src/Torch/FFI/THC/Half/Tensor.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Half/Tensor.hs
@@ -0,0 +1,593 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Half.Tensor where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_storage :  state self -> THCStorage *
+foreign import ccall "THCTensor.h THCudaHalfTensor_storage"
+  c_storage :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> IO (Ptr C'THCHalfStorage)
+
+-- | c_storageOffset :  state self -> ptrdiff_t
+foreign import ccall "THCTensor.h THCudaHalfTensor_storageOffset"
+  c_storageOffset :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> IO CPtrdiff
+
+-- | c_nDimension :  state self -> int
+foreign import ccall "THCTensor.h THCudaHalfTensor_nDimension"
+  c_nDimension :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> IO CInt
+
+-- | c_size :  state self dim -> int64_t
+foreign import ccall "THCTensor.h THCudaHalfTensor_size"
+  c_size :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> CInt -> IO CLLong
+
+-- | c_stride :  state self dim -> int64_t
+foreign import ccall "THCTensor.h THCudaHalfTensor_stride"
+  c_stride :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> CInt -> IO CLLong
+
+-- | c_newSizeOf :  state self -> THLongStorage *
+foreign import ccall "THCTensor.h THCudaHalfTensor_newSizeOf"
+  c_newSizeOf :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> IO (Ptr C'THLongStorage)
+
+-- | c_newStrideOf :  state self -> THLongStorage *
+foreign import ccall "THCTensor.h THCudaHalfTensor_newStrideOf"
+  c_newStrideOf :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> IO (Ptr C'THLongStorage)
+
+-- | c_data :  state self -> real *
+foreign import ccall "THCTensor.h THCudaHalfTensor_data"
+  c_data :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> IO (Ptr CTHHalf)
+
+-- | c_setFlag :  state self flag -> void
+foreign import ccall "THCTensor.h THCudaHalfTensor_setFlag"
+  c_setFlag :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> CChar -> IO ()
+
+-- | c_clearFlag :  state self flag -> void
+foreign import ccall "THCTensor.h THCudaHalfTensor_clearFlag"
+  c_clearFlag :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> CChar -> IO ()
+
+-- | c_new :  state -> THCTensor *
+foreign import ccall "THCTensor.h THCudaHalfTensor_new"
+  c_new :: Ptr C'THCState -> IO (Ptr C'THCudaHalfTensor)
+
+-- | c_newWithTensor :  state tensor -> THCTensor *
+foreign import ccall "THCTensor.h THCudaHalfTensor_newWithTensor"
+  c_newWithTensor :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> IO (Ptr C'THCudaHalfTensor)
+
+-- | c_newWithStorage :  state storage_ storageOffset_ size_ stride_ -> THCTensor *
+foreign import ccall "THCTensor.h THCudaHalfTensor_newWithStorage"
+  c_newWithStorage :: Ptr C'THCState -> Ptr C'THCHalfStorage -> CPtrdiff -> Ptr C'THLongStorage -> Ptr C'THLongStorage -> IO (Ptr C'THCudaHalfTensor)
+
+-- | c_newWithStorage1d :  state storage_ storageOffset_ size0_ stride0_ -> THCTensor *
+foreign import ccall "THCTensor.h THCudaHalfTensor_newWithStorage1d"
+  c_newWithStorage1d :: Ptr C'THCState -> Ptr C'THCHalfStorage -> CPtrdiff -> CLLong -> CLLong -> IO (Ptr C'THCudaHalfTensor)
+
+-- | c_newWithStorage2d :  state storage_ storageOffset_ size0_ stride0_ size1_ stride1_ -> THCTensor *
+foreign import ccall "THCTensor.h THCudaHalfTensor_newWithStorage2d"
+  c_newWithStorage2d :: Ptr C'THCState -> Ptr C'THCHalfStorage -> CPtrdiff -> CLLong -> CLLong -> CLLong -> CLLong -> IO (Ptr C'THCudaHalfTensor)
+
+-- | c_newWithStorage3d :  state storage_ storageOffset_ size0_ stride0_ size1_ stride1_ size2_ stride2_ -> THCTensor *
+foreign import ccall "THCTensor.h THCudaHalfTensor_newWithStorage3d"
+  c_newWithStorage3d :: Ptr C'THCState -> Ptr C'THCHalfStorage -> CPtrdiff -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> IO (Ptr C'THCudaHalfTensor)
+
+-- | c_newWithStorage4d :  state storage_ storageOffset_ size0_ stride0_ size1_ stride1_ size2_ stride2_ size3_ stride3_ -> THCTensor *
+foreign import ccall "THCTensor.h THCudaHalfTensor_newWithStorage4d"
+  c_newWithStorage4d :: Ptr C'THCState -> Ptr C'THCHalfStorage -> CPtrdiff -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> IO (Ptr C'THCudaHalfTensor)
+
+-- | c_newWithSize :  state size_ stride_ -> THCTensor *
+foreign import ccall "THCTensor.h THCudaHalfTensor_newWithSize"
+  c_newWithSize :: Ptr C'THCState -> Ptr C'THLongStorage -> Ptr C'THLongStorage -> IO (Ptr C'THCudaHalfTensor)
+
+-- | c_newWithSize1d :  state size0_ -> THCTensor *
+foreign import ccall "THCTensor.h THCudaHalfTensor_newWithSize1d"
+  c_newWithSize1d :: Ptr C'THCState -> CLLong -> IO (Ptr C'THCudaHalfTensor)
+
+-- | c_newWithSize2d :  state size0_ size1_ -> THCTensor *
+foreign import ccall "THCTensor.h THCudaHalfTensor_newWithSize2d"
+  c_newWithSize2d :: Ptr C'THCState -> CLLong -> CLLong -> IO (Ptr C'THCudaHalfTensor)
+
+-- | c_newWithSize3d :  state size0_ size1_ size2_ -> THCTensor *
+foreign import ccall "THCTensor.h THCudaHalfTensor_newWithSize3d"
+  c_newWithSize3d :: Ptr C'THCState -> CLLong -> CLLong -> CLLong -> IO (Ptr C'THCudaHalfTensor)
+
+-- | c_newWithSize4d :  state size0_ size1_ size2_ size3_ -> THCTensor *
+foreign import ccall "THCTensor.h THCudaHalfTensor_newWithSize4d"
+  c_newWithSize4d :: Ptr C'THCState -> CLLong -> CLLong -> CLLong -> CLLong -> IO (Ptr C'THCudaHalfTensor)
+
+-- | c_newClone :  state self -> THCTensor *
+foreign import ccall "THCTensor.h THCudaHalfTensor_newClone"
+  c_newClone :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> IO (Ptr C'THCudaHalfTensor)
+
+-- | c_newContiguous :  state tensor -> THCTensor *
+foreign import ccall "THCTensor.h THCudaHalfTensor_newContiguous"
+  c_newContiguous :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> IO (Ptr C'THCudaHalfTensor)
+
+-- | c_newSelect :  state tensor dimension_ sliceIndex_ -> THCTensor *
+foreign import ccall "THCTensor.h THCudaHalfTensor_newSelect"
+  c_newSelect :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> CInt -> CLLong -> IO (Ptr C'THCudaHalfTensor)
+
+-- | c_newNarrow :  state tensor dimension_ firstIndex_ size_ -> THCTensor *
+foreign import ccall "THCTensor.h THCudaHalfTensor_newNarrow"
+  c_newNarrow :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> CInt -> CLLong -> CLLong -> IO (Ptr C'THCudaHalfTensor)
+
+-- | c_newTranspose :  state tensor dimension1_ dimension2_ -> THCTensor *
+foreign import ccall "THCTensor.h THCudaHalfTensor_newTranspose"
+  c_newTranspose :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> CInt -> CInt -> IO (Ptr C'THCudaHalfTensor)
+
+-- | c_newUnfold :  state tensor dimension_ size_ step_ -> THCTensor *
+foreign import ccall "THCTensor.h THCudaHalfTensor_newUnfold"
+  c_newUnfold :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> CInt -> CLLong -> CLLong -> IO (Ptr C'THCudaHalfTensor)
+
+-- | c_newView :  state tensor size -> THCTensor *
+foreign import ccall "THCTensor.h THCudaHalfTensor_newView"
+  c_newView :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THLongStorage -> IO (Ptr C'THCudaHalfTensor)
+
+-- | c_newFoldBatchDim :  state input -> THCTensor *
+foreign import ccall "THCTensor.h THCudaHalfTensor_newFoldBatchDim"
+  c_newFoldBatchDim :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> IO (Ptr C'THCudaHalfTensor)
+
+-- | c_newExpand :  state tensor size -> THCTensor *
+foreign import ccall "THCTensor.h THCudaHalfTensor_newExpand"
+  c_newExpand :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THLongStorage -> IO (Ptr C'THCudaHalfTensor)
+
+-- | c_expand :  state r tensor sizes -> void
+foreign import ccall "THCTensor.h THCudaHalfTensor_expand"
+  c_expand :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> Ptr C'THLongStorage -> IO ()
+
+-- | c_expandNd :  state rets ops count -> void
+foreign import ccall "THCTensor.h THCudaHalfTensor_expandNd"
+  c_expandNd :: Ptr C'THCState -> Ptr (Ptr C'THCudaHalfTensor) -> Ptr (Ptr C'THCudaHalfTensor) -> CInt -> IO ()
+
+-- | c_resize :  state tensor size stride -> void
+foreign import ccall "THCTensor.h THCudaHalfTensor_resize"
+  c_resize :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THLongStorage -> Ptr C'THLongStorage -> IO ()
+
+-- | c_resizeAs :  state tensor src -> void
+foreign import ccall "THCTensor.h THCudaHalfTensor_resizeAs"
+  c_resizeAs :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> IO ()
+
+-- | c_resize1d :  state tensor size0_ -> void
+foreign import ccall "THCTensor.h THCudaHalfTensor_resize1d"
+  c_resize1d :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> CLLong -> IO ()
+
+-- | c_resize2d :  state tensor size0_ size1_ -> void
+foreign import ccall "THCTensor.h THCudaHalfTensor_resize2d"
+  c_resize2d :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> CLLong -> CLLong -> IO ()
+
+-- | c_resize3d :  state tensor size0_ size1_ size2_ -> void
+foreign import ccall "THCTensor.h THCudaHalfTensor_resize3d"
+  c_resize3d :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> CLLong -> CLLong -> CLLong -> IO ()
+
+-- | c_resize4d :  state tensor size0_ size1_ size2_ size3_ -> void
+foreign import ccall "THCTensor.h THCudaHalfTensor_resize4d"
+  c_resize4d :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> CLLong -> CLLong -> CLLong -> CLLong -> IO ()
+
+-- | c_resize5d :  state tensor size0_ size1_ size2_ size3_ size4_ -> void
+foreign import ccall "THCTensor.h THCudaHalfTensor_resize5d"
+  c_resize5d :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> IO ()
+
+-- | c_resizeNd :  state tensor nDimension size stride -> void
+foreign import ccall "THCTensor.h THCudaHalfTensor_resizeNd"
+  c_resizeNd :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> CInt -> Ptr CLLong -> Ptr CLLong -> IO ()
+
+-- | c_set :  state self src -> void
+foreign import ccall "THCTensor.h THCudaHalfTensor_set"
+  c_set :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> IO ()
+
+-- | c_setStorage :  state self storage_ storageOffset_ size_ stride_ -> void
+foreign import ccall "THCTensor.h THCudaHalfTensor_setStorage"
+  c_setStorage :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCHalfStorage -> CPtrdiff -> Ptr C'THLongStorage -> Ptr C'THLongStorage -> IO ()
+
+-- | c_setStorageNd :  state self storage storageOffset nDimension size stride -> void
+foreign import ccall "THCTensor.h THCudaHalfTensor_setStorageNd"
+  c_setStorageNd :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCHalfStorage -> CPtrdiff -> CInt -> Ptr CLLong -> Ptr CLLong -> IO ()
+
+-- | c_setStorage1d :  state self storage_ storageOffset_ size0_ stride0_ -> void
+foreign import ccall "THCTensor.h THCudaHalfTensor_setStorage1d"
+  c_setStorage1d :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCHalfStorage -> CPtrdiff -> CLLong -> CLLong -> IO ()
+
+-- | c_setStorage2d :  state self storage_ storageOffset_ size0_ stride0_ size1_ stride1_ -> void
+foreign import ccall "THCTensor.h THCudaHalfTensor_setStorage2d"
+  c_setStorage2d :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCHalfStorage -> CPtrdiff -> CLLong -> CLLong -> CLLong -> CLLong -> IO ()
+
+-- | c_setStorage3d :  state self storage_ storageOffset_ size0_ stride0_ size1_ stride1_ size2_ stride2_ -> void
+foreign import ccall "THCTensor.h THCudaHalfTensor_setStorage3d"
+  c_setStorage3d :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCHalfStorage -> CPtrdiff -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> IO ()
+
+-- | c_setStorage4d :  state self storage_ storageOffset_ size0_ stride0_ size1_ stride1_ size2_ stride2_ size3_ stride3_ -> void
+foreign import ccall "THCTensor.h THCudaHalfTensor_setStorage4d"
+  c_setStorage4d :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCHalfStorage -> CPtrdiff -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> IO ()
+
+-- | c_narrow :  state self src dimension_ firstIndex_ size_ -> void
+foreign import ccall "THCTensor.h THCudaHalfTensor_narrow"
+  c_narrow :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> CInt -> CLLong -> CLLong -> IO ()
+
+-- | c_select :  state self src dimension_ sliceIndex_ -> void
+foreign import ccall "THCTensor.h THCudaHalfTensor_select"
+  c_select :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> CInt -> CLLong -> IO ()
+
+-- | c_transpose :  state self src dimension1_ dimension2_ -> void
+foreign import ccall "THCTensor.h THCudaHalfTensor_transpose"
+  c_transpose :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> CInt -> CInt -> IO ()
+
+-- | c_unfold :  state self src dimension_ size_ step_ -> void
+foreign import ccall "THCTensor.h THCudaHalfTensor_unfold"
+  c_unfold :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> CInt -> CLLong -> CLLong -> IO ()
+
+-- | c_squeeze :  state self src -> void
+foreign import ccall "THCTensor.h THCudaHalfTensor_squeeze"
+  c_squeeze :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> IO ()
+
+-- | c_squeeze1d :  state self src dimension_ -> void
+foreign import ccall "THCTensor.h THCudaHalfTensor_squeeze1d"
+  c_squeeze1d :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> CInt -> IO ()
+
+-- | c_unsqueeze1d :  state self src dimension_ -> void
+foreign import ccall "THCTensor.h THCudaHalfTensor_unsqueeze1d"
+  c_unsqueeze1d :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> CInt -> IO ()
+
+-- | c_isContiguous :  state self -> int
+foreign import ccall "THCTensor.h THCudaHalfTensor_isContiguous"
+  c_isContiguous :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> IO CInt
+
+-- | c_isSameSizeAs :  state self src -> int
+foreign import ccall "THCTensor.h THCudaHalfTensor_isSameSizeAs"
+  c_isSameSizeAs :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> IO CInt
+
+-- | c_isSetTo :  state self src -> int
+foreign import ccall "THCTensor.h THCudaHalfTensor_isSetTo"
+  c_isSetTo :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> IO CInt
+
+-- | c_isSize :  state self dims -> int
+foreign import ccall "THCTensor.h THCudaHalfTensor_isSize"
+  c_isSize :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THLongStorage -> IO CInt
+
+-- | c_nElement :  state self -> ptrdiff_t
+foreign import ccall "THCTensor.h THCudaHalfTensor_nElement"
+  c_nElement :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> IO CPtrdiff
+
+-- | c_retain :  state self -> void
+foreign import ccall "THCTensor.h THCudaHalfTensor_retain"
+  c_retain :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> IO ()
+
+-- | c_free :  state self -> void
+foreign import ccall "THCTensor.h THCudaHalfTensor_free"
+  c_free :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> IO ()
+
+-- | c_freeCopyTo :  state self dst -> void
+foreign import ccall "THCTensor.h THCudaHalfTensor_freeCopyTo"
+  c_freeCopyTo :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> IO ()
+
+-- | c_set1d :  state tensor x0 value -> void
+foreign import ccall "THCTensor.h THCudaHalfTensor_set1d"
+  c_set1d :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> CLLong -> CTHHalf -> IO ()
+
+-- | c_set2d :  state tensor x0 x1 value -> void
+foreign import ccall "THCTensor.h THCudaHalfTensor_set2d"
+  c_set2d :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> CLLong -> CLLong -> CTHHalf -> IO ()
+
+-- | c_set3d :  state tensor x0 x1 x2 value -> void
+foreign import ccall "THCTensor.h THCudaHalfTensor_set3d"
+  c_set3d :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> CLLong -> CLLong -> CLLong -> CTHHalf -> IO ()
+
+-- | c_set4d :  state tensor x0 x1 x2 x3 value -> void
+foreign import ccall "THCTensor.h THCudaHalfTensor_set4d"
+  c_set4d :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> CLLong -> CLLong -> CLLong -> CLLong -> CTHHalf -> IO ()
+
+-- | c_get1d :  state tensor x0 -> real
+foreign import ccall "THCTensor.h THCudaHalfTensor_get1d"
+  c_get1d :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> CLLong -> IO CTHHalf
+
+-- | c_get2d :  state tensor x0 x1 -> real
+foreign import ccall "THCTensor.h THCudaHalfTensor_get2d"
+  c_get2d :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> CLLong -> CLLong -> IO CTHHalf
+
+-- | c_get3d :  state tensor x0 x1 x2 -> real
+foreign import ccall "THCTensor.h THCudaHalfTensor_get3d"
+  c_get3d :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> CLLong -> CLLong -> CLLong -> IO CTHHalf
+
+-- | c_get4d :  state tensor x0 x1 x2 x3 -> real
+foreign import ccall "THCTensor.h THCudaHalfTensor_get4d"
+  c_get4d :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> CLLong -> CLLong -> CLLong -> CLLong -> IO CTHHalf
+
+-- | c_getDevice :  state self -> int
+foreign import ccall "THCTensor.h THCudaHalfTensor_getDevice"
+  c_getDevice :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> IO CInt
+
+-- | c_sizeDesc :  state tensor -> THCDescBuff
+foreign import ccall "THCTensor.h THCudaHalfTensor_sizeDesc"
+  c_sizeDesc :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> IO (Ptr C'THCDescBuff)
+
+-- | p_storage : Pointer to function : state self -> THCStorage *
+foreign import ccall "THCTensor.h &THCudaHalfTensor_storage"
+  p_storage :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> IO (Ptr C'THCHalfStorage))
+
+-- | p_storageOffset : Pointer to function : state self -> ptrdiff_t
+foreign import ccall "THCTensor.h &THCudaHalfTensor_storageOffset"
+  p_storageOffset :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> IO CPtrdiff)
+
+-- | p_nDimension : Pointer to function : state self -> int
+foreign import ccall "THCTensor.h &THCudaHalfTensor_nDimension"
+  p_nDimension :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> IO CInt)
+
+-- | p_size : Pointer to function : state self dim -> int64_t
+foreign import ccall "THCTensor.h &THCudaHalfTensor_size"
+  p_size :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> CInt -> IO CLLong)
+
+-- | p_stride : Pointer to function : state self dim -> int64_t
+foreign import ccall "THCTensor.h &THCudaHalfTensor_stride"
+  p_stride :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> CInt -> IO CLLong)
+
+-- | p_newSizeOf : Pointer to function : state self -> THLongStorage *
+foreign import ccall "THCTensor.h &THCudaHalfTensor_newSizeOf"
+  p_newSizeOf :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> IO (Ptr C'THLongStorage))
+
+-- | p_newStrideOf : Pointer to function : state self -> THLongStorage *
+foreign import ccall "THCTensor.h &THCudaHalfTensor_newStrideOf"
+  p_newStrideOf :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> IO (Ptr C'THLongStorage))
+
+-- | p_data : Pointer to function : state self -> real *
+foreign import ccall "THCTensor.h &THCudaHalfTensor_data"
+  p_data :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> IO (Ptr CTHHalf))
+
+-- | p_setFlag : Pointer to function : state self flag -> void
+foreign import ccall "THCTensor.h &THCudaHalfTensor_setFlag"
+  p_setFlag :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> CChar -> IO ())
+
+-- | p_clearFlag : Pointer to function : state self flag -> void
+foreign import ccall "THCTensor.h &THCudaHalfTensor_clearFlag"
+  p_clearFlag :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> CChar -> IO ())
+
+-- | p_new : Pointer to function : state -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaHalfTensor_new"
+  p_new :: FunPtr (Ptr C'THCState -> IO (Ptr C'THCudaHalfTensor))
+
+-- | p_newWithTensor : Pointer to function : state tensor -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaHalfTensor_newWithTensor"
+  p_newWithTensor :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> IO (Ptr C'THCudaHalfTensor))
+
+-- | p_newWithStorage : Pointer to function : state storage_ storageOffset_ size_ stride_ -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaHalfTensor_newWithStorage"
+  p_newWithStorage :: FunPtr (Ptr C'THCState -> Ptr C'THCHalfStorage -> CPtrdiff -> Ptr C'THLongStorage -> Ptr C'THLongStorage -> IO (Ptr C'THCudaHalfTensor))
+
+-- | p_newWithStorage1d : Pointer to function : state storage_ storageOffset_ size0_ stride0_ -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaHalfTensor_newWithStorage1d"
+  p_newWithStorage1d :: FunPtr (Ptr C'THCState -> Ptr C'THCHalfStorage -> CPtrdiff -> CLLong -> CLLong -> IO (Ptr C'THCudaHalfTensor))
+
+-- | p_newWithStorage2d : Pointer to function : state storage_ storageOffset_ size0_ stride0_ size1_ stride1_ -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaHalfTensor_newWithStorage2d"
+  p_newWithStorage2d :: FunPtr (Ptr C'THCState -> Ptr C'THCHalfStorage -> CPtrdiff -> CLLong -> CLLong -> CLLong -> CLLong -> IO (Ptr C'THCudaHalfTensor))
+
+-- | p_newWithStorage3d : Pointer to function : state storage_ storageOffset_ size0_ stride0_ size1_ stride1_ size2_ stride2_ -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaHalfTensor_newWithStorage3d"
+  p_newWithStorage3d :: FunPtr (Ptr C'THCState -> Ptr C'THCHalfStorage -> CPtrdiff -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> IO (Ptr C'THCudaHalfTensor))
+
+-- | p_newWithStorage4d : Pointer to function : state storage_ storageOffset_ size0_ stride0_ size1_ stride1_ size2_ stride2_ size3_ stride3_ -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaHalfTensor_newWithStorage4d"
+  p_newWithStorage4d :: FunPtr (Ptr C'THCState -> Ptr C'THCHalfStorage -> CPtrdiff -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> IO (Ptr C'THCudaHalfTensor))
+
+-- | p_newWithSize : Pointer to function : state size_ stride_ -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaHalfTensor_newWithSize"
+  p_newWithSize :: FunPtr (Ptr C'THCState -> Ptr C'THLongStorage -> Ptr C'THLongStorage -> IO (Ptr C'THCudaHalfTensor))
+
+-- | p_newWithSize1d : Pointer to function : state size0_ -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaHalfTensor_newWithSize1d"
+  p_newWithSize1d :: FunPtr (Ptr C'THCState -> CLLong -> IO (Ptr C'THCudaHalfTensor))
+
+-- | p_newWithSize2d : Pointer to function : state size0_ size1_ -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaHalfTensor_newWithSize2d"
+  p_newWithSize2d :: FunPtr (Ptr C'THCState -> CLLong -> CLLong -> IO (Ptr C'THCudaHalfTensor))
+
+-- | p_newWithSize3d : Pointer to function : state size0_ size1_ size2_ -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaHalfTensor_newWithSize3d"
+  p_newWithSize3d :: FunPtr (Ptr C'THCState -> CLLong -> CLLong -> CLLong -> IO (Ptr C'THCudaHalfTensor))
+
+-- | p_newWithSize4d : Pointer to function : state size0_ size1_ size2_ size3_ -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaHalfTensor_newWithSize4d"
+  p_newWithSize4d :: FunPtr (Ptr C'THCState -> CLLong -> CLLong -> CLLong -> CLLong -> IO (Ptr C'THCudaHalfTensor))
+
+-- | p_newClone : Pointer to function : state self -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaHalfTensor_newClone"
+  p_newClone :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> IO (Ptr C'THCudaHalfTensor))
+
+-- | p_newContiguous : Pointer to function : state tensor -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaHalfTensor_newContiguous"
+  p_newContiguous :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> IO (Ptr C'THCudaHalfTensor))
+
+-- | p_newSelect : Pointer to function : state tensor dimension_ sliceIndex_ -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaHalfTensor_newSelect"
+  p_newSelect :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> CInt -> CLLong -> IO (Ptr C'THCudaHalfTensor))
+
+-- | p_newNarrow : Pointer to function : state tensor dimension_ firstIndex_ size_ -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaHalfTensor_newNarrow"
+  p_newNarrow :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> CInt -> CLLong -> CLLong -> IO (Ptr C'THCudaHalfTensor))
+
+-- | p_newTranspose : Pointer to function : state tensor dimension1_ dimension2_ -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaHalfTensor_newTranspose"
+  p_newTranspose :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> CInt -> CInt -> IO (Ptr C'THCudaHalfTensor))
+
+-- | p_newUnfold : Pointer to function : state tensor dimension_ size_ step_ -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaHalfTensor_newUnfold"
+  p_newUnfold :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> CInt -> CLLong -> CLLong -> IO (Ptr C'THCudaHalfTensor))
+
+-- | p_newView : Pointer to function : state tensor size -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaHalfTensor_newView"
+  p_newView :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THLongStorage -> IO (Ptr C'THCudaHalfTensor))
+
+-- | p_newFoldBatchDim : Pointer to function : state input -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaHalfTensor_newFoldBatchDim"
+  p_newFoldBatchDim :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> IO (Ptr C'THCudaHalfTensor))
+
+-- | p_newExpand : Pointer to function : state tensor size -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaHalfTensor_newExpand"
+  p_newExpand :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THLongStorage -> IO (Ptr C'THCudaHalfTensor))
+
+-- | p_expand : Pointer to function : state r tensor sizes -> void
+foreign import ccall "THCTensor.h &THCudaHalfTensor_expand"
+  p_expand :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> Ptr C'THLongStorage -> IO ())
+
+-- | p_expandNd : Pointer to function : state rets ops count -> void
+foreign import ccall "THCTensor.h &THCudaHalfTensor_expandNd"
+  p_expandNd :: FunPtr (Ptr C'THCState -> Ptr (Ptr C'THCudaHalfTensor) -> Ptr (Ptr C'THCudaHalfTensor) -> CInt -> IO ())
+
+-- | p_resize : Pointer to function : state tensor size stride -> void
+foreign import ccall "THCTensor.h &THCudaHalfTensor_resize"
+  p_resize :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THLongStorage -> Ptr C'THLongStorage -> IO ())
+
+-- | p_resizeAs : Pointer to function : state tensor src -> void
+foreign import ccall "THCTensor.h &THCudaHalfTensor_resizeAs"
+  p_resizeAs :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> IO ())
+
+-- | p_resize1d : Pointer to function : state tensor size0_ -> void
+foreign import ccall "THCTensor.h &THCudaHalfTensor_resize1d"
+  p_resize1d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> CLLong -> IO ())
+
+-- | p_resize2d : Pointer to function : state tensor size0_ size1_ -> void
+foreign import ccall "THCTensor.h &THCudaHalfTensor_resize2d"
+  p_resize2d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> CLLong -> CLLong -> IO ())
+
+-- | p_resize3d : Pointer to function : state tensor size0_ size1_ size2_ -> void
+foreign import ccall "THCTensor.h &THCudaHalfTensor_resize3d"
+  p_resize3d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> CLLong -> CLLong -> CLLong -> IO ())
+
+-- | p_resize4d : Pointer to function : state tensor size0_ size1_ size2_ size3_ -> void
+foreign import ccall "THCTensor.h &THCudaHalfTensor_resize4d"
+  p_resize4d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> CLLong -> CLLong -> CLLong -> CLLong -> IO ())
+
+-- | p_resize5d : Pointer to function : state tensor size0_ size1_ size2_ size3_ size4_ -> void
+foreign import ccall "THCTensor.h &THCudaHalfTensor_resize5d"
+  p_resize5d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> IO ())
+
+-- | p_resizeNd : Pointer to function : state tensor nDimension size stride -> void
+foreign import ccall "THCTensor.h &THCudaHalfTensor_resizeNd"
+  p_resizeNd :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> CInt -> Ptr CLLong -> Ptr CLLong -> IO ())
+
+-- | p_set : Pointer to function : state self src -> void
+foreign import ccall "THCTensor.h &THCudaHalfTensor_set"
+  p_set :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> IO ())
+
+-- | p_setStorage : Pointer to function : state self storage_ storageOffset_ size_ stride_ -> void
+foreign import ccall "THCTensor.h &THCudaHalfTensor_setStorage"
+  p_setStorage :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCHalfStorage -> CPtrdiff -> Ptr C'THLongStorage -> Ptr C'THLongStorage -> IO ())
+
+-- | p_setStorageNd : Pointer to function : state self storage storageOffset nDimension size stride -> void
+foreign import ccall "THCTensor.h &THCudaHalfTensor_setStorageNd"
+  p_setStorageNd :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCHalfStorage -> CPtrdiff -> CInt -> Ptr CLLong -> Ptr CLLong -> IO ())
+
+-- | p_setStorage1d : Pointer to function : state self storage_ storageOffset_ size0_ stride0_ -> void
+foreign import ccall "THCTensor.h &THCudaHalfTensor_setStorage1d"
+  p_setStorage1d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCHalfStorage -> CPtrdiff -> CLLong -> CLLong -> IO ())
+
+-- | p_setStorage2d : Pointer to function : state self storage_ storageOffset_ size0_ stride0_ size1_ stride1_ -> void
+foreign import ccall "THCTensor.h &THCudaHalfTensor_setStorage2d"
+  p_setStorage2d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCHalfStorage -> CPtrdiff -> CLLong -> CLLong -> CLLong -> CLLong -> IO ())
+
+-- | p_setStorage3d : Pointer to function : state self storage_ storageOffset_ size0_ stride0_ size1_ stride1_ size2_ stride2_ -> void
+foreign import ccall "THCTensor.h &THCudaHalfTensor_setStorage3d"
+  p_setStorage3d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCHalfStorage -> CPtrdiff -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> IO ())
+
+-- | p_setStorage4d : Pointer to function : state self storage_ storageOffset_ size0_ stride0_ size1_ stride1_ size2_ stride2_ size3_ stride3_ -> void
+foreign import ccall "THCTensor.h &THCudaHalfTensor_setStorage4d"
+  p_setStorage4d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCHalfStorage -> CPtrdiff -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> IO ())
+
+-- | p_narrow : Pointer to function : state self src dimension_ firstIndex_ size_ -> void
+foreign import ccall "THCTensor.h &THCudaHalfTensor_narrow"
+  p_narrow :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> CInt -> CLLong -> CLLong -> IO ())
+
+-- | p_select : Pointer to function : state self src dimension_ sliceIndex_ -> void
+foreign import ccall "THCTensor.h &THCudaHalfTensor_select"
+  p_select :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> CInt -> CLLong -> IO ())
+
+-- | p_transpose : Pointer to function : state self src dimension1_ dimension2_ -> void
+foreign import ccall "THCTensor.h &THCudaHalfTensor_transpose"
+  p_transpose :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> CInt -> CInt -> IO ())
+
+-- | p_unfold : Pointer to function : state self src dimension_ size_ step_ -> void
+foreign import ccall "THCTensor.h &THCudaHalfTensor_unfold"
+  p_unfold :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> CInt -> CLLong -> CLLong -> IO ())
+
+-- | p_squeeze : Pointer to function : state self src -> void
+foreign import ccall "THCTensor.h &THCudaHalfTensor_squeeze"
+  p_squeeze :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> IO ())
+
+-- | p_squeeze1d : Pointer to function : state self src dimension_ -> void
+foreign import ccall "THCTensor.h &THCudaHalfTensor_squeeze1d"
+  p_squeeze1d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> CInt -> IO ())
+
+-- | p_unsqueeze1d : Pointer to function : state self src dimension_ -> void
+foreign import ccall "THCTensor.h &THCudaHalfTensor_unsqueeze1d"
+  p_unsqueeze1d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> CInt -> IO ())
+
+-- | p_isContiguous : Pointer to function : state self -> int
+foreign import ccall "THCTensor.h &THCudaHalfTensor_isContiguous"
+  p_isContiguous :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> IO CInt)
+
+-- | p_isSameSizeAs : Pointer to function : state self src -> int
+foreign import ccall "THCTensor.h &THCudaHalfTensor_isSameSizeAs"
+  p_isSameSizeAs :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> IO CInt)
+
+-- | p_isSetTo : Pointer to function : state self src -> int
+foreign import ccall "THCTensor.h &THCudaHalfTensor_isSetTo"
+  p_isSetTo :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> IO CInt)
+
+-- | p_isSize : Pointer to function : state self dims -> int
+foreign import ccall "THCTensor.h &THCudaHalfTensor_isSize"
+  p_isSize :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THLongStorage -> IO CInt)
+
+-- | p_nElement : Pointer to function : state self -> ptrdiff_t
+foreign import ccall "THCTensor.h &THCudaHalfTensor_nElement"
+  p_nElement :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> IO CPtrdiff)
+
+-- | p_retain : Pointer to function : state self -> void
+foreign import ccall "THCTensor.h &THCudaHalfTensor_retain"
+  p_retain :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> IO ())
+
+-- | p_free : Pointer to function : state self -> void
+foreign import ccall "THCTensor.h &THCudaHalfTensor_free"
+  p_free :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> IO ())
+
+-- | p_freeCopyTo : Pointer to function : state self dst -> void
+foreign import ccall "THCTensor.h &THCudaHalfTensor_freeCopyTo"
+  p_freeCopyTo :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> IO ())
+
+-- | p_set1d : Pointer to function : state tensor x0 value -> void
+foreign import ccall "THCTensor.h &THCudaHalfTensor_set1d"
+  p_set1d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> CLLong -> CTHHalf -> IO ())
+
+-- | p_set2d : Pointer to function : state tensor x0 x1 value -> void
+foreign import ccall "THCTensor.h &THCudaHalfTensor_set2d"
+  p_set2d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> CLLong -> CLLong -> CTHHalf -> IO ())
+
+-- | p_set3d : Pointer to function : state tensor x0 x1 x2 value -> void
+foreign import ccall "THCTensor.h &THCudaHalfTensor_set3d"
+  p_set3d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> CLLong -> CLLong -> CLLong -> CTHHalf -> IO ())
+
+-- | p_set4d : Pointer to function : state tensor x0 x1 x2 x3 value -> void
+foreign import ccall "THCTensor.h &THCudaHalfTensor_set4d"
+  p_set4d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> CLLong -> CLLong -> CLLong -> CLLong -> CTHHalf -> IO ())
+
+-- | p_get1d : Pointer to function : state tensor x0 -> real
+foreign import ccall "THCTensor.h &THCudaHalfTensor_get1d"
+  p_get1d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> CLLong -> IO CTHHalf)
+
+-- | p_get2d : Pointer to function : state tensor x0 x1 -> real
+foreign import ccall "THCTensor.h &THCudaHalfTensor_get2d"
+  p_get2d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> CLLong -> CLLong -> IO CTHHalf)
+
+-- | p_get3d : Pointer to function : state tensor x0 x1 x2 -> real
+foreign import ccall "THCTensor.h &THCudaHalfTensor_get3d"
+  p_get3d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> CLLong -> CLLong -> CLLong -> IO CTHHalf)
+
+-- | p_get4d : Pointer to function : state tensor x0 x1 x2 x3 -> real
+foreign import ccall "THCTensor.h &THCudaHalfTensor_get4d"
+  p_get4d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> CLLong -> CLLong -> CLLong -> CLLong -> IO CTHHalf)
+
+-- | p_getDevice : Pointer to function : state self -> int
+foreign import ccall "THCTensor.h &THCudaHalfTensor_getDevice"
+  p_getDevice :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> IO CInt)
+
+-- | p_sizeDesc : Pointer to function : state tensor -> THCDescBuff
+foreign import ccall "THCTensor.h &THCudaHalfTensor_sizeDesc"
+  p_sizeDesc :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> IO (Ptr C'THCDescBuff))
diff --git a/src/Torch/FFI/THC/Half/TensorCopy.hs b/src/Torch/FFI/THC/Half/TensorCopy.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Half/TensorCopy.hs
@@ -0,0 +1,185 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Half.TensorCopy where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_copy :  state self src -> void
+foreign import ccall "THCTensorCopy.h THCudaHalfTensor_copy"
+  c_copy :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> IO ()
+
+-- | c_copyIgnoringOverlaps :  state self src -> void
+foreign import ccall "THCTensorCopy.h THCudaHalfTensor_copyIgnoringOverlaps"
+  c_copyIgnoringOverlaps :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> IO ()
+
+-- | c_copyByte :  state self src -> void
+foreign import ccall "THCTensorCopy.h THCudaHalfTensor_copyByte"
+  c_copyByte :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THByteTensor -> IO ()
+
+-- | c_copyChar :  state self src -> void
+foreign import ccall "THCTensorCopy.h THCudaHalfTensor_copyChar"
+  c_copyChar :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCharTensor -> IO ()
+
+-- | c_copyShort :  state self src -> void
+foreign import ccall "THCTensorCopy.h THCudaHalfTensor_copyShort"
+  c_copyShort :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THShortTensor -> IO ()
+
+-- | c_copyInt :  state self src -> void
+foreign import ccall "THCTensorCopy.h THCudaHalfTensor_copyInt"
+  c_copyInt :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THIntTensor -> IO ()
+
+-- | c_copyLong :  state self src -> void
+foreign import ccall "THCTensorCopy.h THCudaHalfTensor_copyLong"
+  c_copyLong :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THLongTensor -> IO ()
+
+-- | c_copyFloat :  state self src -> void
+foreign import ccall "THCTensorCopy.h THCudaHalfTensor_copyFloat"
+  c_copyFloat :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THFloatTensor -> IO ()
+
+-- | c_copyDouble :  state self src -> void
+foreign import ccall "THCTensorCopy.h THCudaHalfTensor_copyDouble"
+  c_copyDouble :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THDoubleTensor -> IO ()
+
+-- | c_copyHalf :  state self src -> void
+foreign import ccall "THCTensorCopy.h THCudaHalfTensor_copyHalf"
+  c_copyHalf :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THHalfTensor -> IO ()
+
+-- | c_copyCudaByte :  state dst src -> void
+foreign import ccall "THCTensorCopy.h THCudaHalfTensor_copyCudaByte"
+  c_copyCudaByte :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaByteTensor -> IO ()
+
+-- | c_copyCudaChar :  state dst src -> void
+foreign import ccall "THCTensorCopy.h THCudaHalfTensor_copyCudaChar"
+  c_copyCudaChar :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaCharTensor -> IO ()
+
+-- | c_copyCudaShort :  state dst src -> void
+foreign import ccall "THCTensorCopy.h THCudaHalfTensor_copyCudaShort"
+  c_copyCudaShort :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaShortTensor -> IO ()
+
+-- | c_copyCudaInt :  state dst src -> void
+foreign import ccall "THCTensorCopy.h THCudaHalfTensor_copyCudaInt"
+  c_copyCudaInt :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaIntTensor -> IO ()
+
+-- | c_copyCudaLong :  state dst src -> void
+foreign import ccall "THCTensorCopy.h THCudaHalfTensor_copyCudaLong"
+  c_copyCudaLong :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaLongTensor -> IO ()
+
+-- | c_copyCudaDouble :  state dst src -> void
+foreign import ccall "THCTensorCopy.h THCudaHalfTensor_copyCudaDouble"
+  c_copyCudaDouble :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_copyCudaHalf :  state dst src -> void
+foreign import ccall "THCTensorCopy.h THCudaHalfTensor_copyCudaHalf"
+  c_copyCudaHalf :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> IO ()
+
+-- | c_copyCuda :  state self src -> void
+foreign import ccall "THCTensorCopy.h THCudaHalfTensor_copyCuda"
+  c_copyCuda :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> IO ()
+
+-- | c_thCopyCuda :  state self src -> void
+foreign import ccall "THCTensorCopy.h THHalfTensor_copyCuda"
+  c_thCopyCuda :: Ptr C'THCState -> Ptr C'THHalfTensor -> Ptr C'THCudaHalfTensor -> IO ()
+
+-- | c_copyCPU :  state self src -> void
+foreign import ccall "THCTensorCopy.h THCudaHalfTensor_copyCPU"
+  c_copyCPU :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THHalfTensor -> IO ()
+
+-- | c_copyAsyncCPU :  state self src -> void
+foreign import ccall "THCTensorCopy.h THCudaHalfTensor_copyAsyncCPU"
+  c_copyAsyncCPU :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THHalfTensor -> IO ()
+
+-- | c_thCopyAsyncCuda :  state self src -> void
+foreign import ccall "THCTensorCopy.h THHalfTensor_copyAsyncCuda"
+  c_thCopyAsyncCuda :: Ptr C'THCState -> Ptr C'THHalfTensor -> Ptr C'THCudaHalfTensor -> IO ()
+
+-- | p_copy : Pointer to function : state self src -> void
+foreign import ccall "THCTensorCopy.h &THCudaHalfTensor_copy"
+  p_copy :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> IO ())
+
+-- | p_copyIgnoringOverlaps : Pointer to function : state self src -> void
+foreign import ccall "THCTensorCopy.h &THCudaHalfTensor_copyIgnoringOverlaps"
+  p_copyIgnoringOverlaps :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> IO ())
+
+-- | p_copyByte : Pointer to function : state self src -> void
+foreign import ccall "THCTensorCopy.h &THCudaHalfTensor_copyByte"
+  p_copyByte :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THByteTensor -> IO ())
+
+-- | p_copyChar : Pointer to function : state self src -> void
+foreign import ccall "THCTensorCopy.h &THCudaHalfTensor_copyChar"
+  p_copyChar :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCharTensor -> IO ())
+
+-- | p_copyShort : Pointer to function : state self src -> void
+foreign import ccall "THCTensorCopy.h &THCudaHalfTensor_copyShort"
+  p_copyShort :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THShortTensor -> IO ())
+
+-- | p_copyInt : Pointer to function : state self src -> void
+foreign import ccall "THCTensorCopy.h &THCudaHalfTensor_copyInt"
+  p_copyInt :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THIntTensor -> IO ())
+
+-- | p_copyLong : Pointer to function : state self src -> void
+foreign import ccall "THCTensorCopy.h &THCudaHalfTensor_copyLong"
+  p_copyLong :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THLongTensor -> IO ())
+
+-- | p_copyFloat : Pointer to function : state self src -> void
+foreign import ccall "THCTensorCopy.h &THCudaHalfTensor_copyFloat"
+  p_copyFloat :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THFloatTensor -> IO ())
+
+-- | p_copyDouble : Pointer to function : state self src -> void
+foreign import ccall "THCTensorCopy.h &THCudaHalfTensor_copyDouble"
+  p_copyDouble :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THDoubleTensor -> IO ())
+
+-- | p_copyHalf : Pointer to function : state self src -> void
+foreign import ccall "THCTensorCopy.h &THCudaHalfTensor_copyHalf"
+  p_copyHalf :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THHalfTensor -> IO ())
+
+-- | p_copyCudaByte : Pointer to function : state dst src -> void
+foreign import ccall "THCTensorCopy.h &THCudaHalfTensor_copyCudaByte"
+  p_copyCudaByte :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaByteTensor -> IO ())
+
+-- | p_copyCudaChar : Pointer to function : state dst src -> void
+foreign import ccall "THCTensorCopy.h &THCudaHalfTensor_copyCudaChar"
+  p_copyCudaChar :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaCharTensor -> IO ())
+
+-- | p_copyCudaShort : Pointer to function : state dst src -> void
+foreign import ccall "THCTensorCopy.h &THCudaHalfTensor_copyCudaShort"
+  p_copyCudaShort :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaShortTensor -> IO ())
+
+-- | p_copyCudaInt : Pointer to function : state dst src -> void
+foreign import ccall "THCTensorCopy.h &THCudaHalfTensor_copyCudaInt"
+  p_copyCudaInt :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaIntTensor -> IO ())
+
+-- | p_copyCudaLong : Pointer to function : state dst src -> void
+foreign import ccall "THCTensorCopy.h &THCudaHalfTensor_copyCudaLong"
+  p_copyCudaLong :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaLongTensor -> IO ())
+
+-- | p_copyCudaDouble : Pointer to function : state dst src -> void
+foreign import ccall "THCTensorCopy.h &THCudaHalfTensor_copyCudaDouble"
+  p_copyCudaDouble :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_copyCudaHalf : Pointer to function : state dst src -> void
+foreign import ccall "THCTensorCopy.h &THCudaHalfTensor_copyCudaHalf"
+  p_copyCudaHalf :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> IO ())
+
+-- | p_copyCuda : Pointer to function : state self src -> void
+foreign import ccall "THCTensorCopy.h &THCudaHalfTensor_copyCuda"
+  p_copyCuda :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> IO ())
+
+-- | p_thCopyCuda : Pointer to function : state self src -> void
+foreign import ccall "THCTensorCopy.h &THHalfTensor_copyCuda"
+  p_thCopyCuda :: FunPtr (Ptr C'THCState -> Ptr C'THHalfTensor -> Ptr C'THCudaHalfTensor -> IO ())
+
+-- | p_copyCPU : Pointer to function : state self src -> void
+foreign import ccall "THCTensorCopy.h &THCudaHalfTensor_copyCPU"
+  p_copyCPU :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THHalfTensor -> IO ())
+
+-- | p_copyAsyncCPU : Pointer to function : state self src -> void
+foreign import ccall "THCTensorCopy.h &THCudaHalfTensor_copyAsyncCPU"
+  p_copyAsyncCPU :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THHalfTensor -> IO ())
+
+-- | p_thCopyAsyncCuda : Pointer to function : state self src -> void
+foreign import ccall "THCTensorCopy.h &THHalfTensor_copyAsyncCuda"
+  p_thCopyAsyncCuda :: FunPtr (Ptr C'THCState -> Ptr C'THHalfTensor -> Ptr C'THCudaHalfTensor -> IO ())
diff --git a/src/Torch/FFI/THC/Half/TensorIndex.hs b/src/Torch/FFI/THC/Half/TensorIndex.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Half/TensorIndex.hs
@@ -0,0 +1,97 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Half.TensorIndex where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_indexCopy :  state res_ dim indices src -> void
+foreign import ccall "THCTensorIndex.h THCudaHalfTensor_indexCopy"
+  c_indexCopy :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> CInt -> Ptr C'THCudaLongTensor -> Ptr C'THCudaHalfTensor -> IO ()
+
+-- | c_indexAdd :  state res_ dim indices src -> void
+foreign import ccall "THCTensorIndex.h THCudaHalfTensor_indexAdd"
+  c_indexAdd :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> CInt -> Ptr C'THCudaLongTensor -> Ptr C'THCudaHalfTensor -> IO ()
+
+-- | c_indexFill :  state tensor dim index val -> void
+foreign import ccall "THCTensorIndex.h THCudaHalfTensor_indexFill"
+  c_indexFill :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> CInt -> Ptr C'THCudaLongTensor -> CTHHalf -> IO ()
+
+-- | c_indexSelect :  state tensor src dim index -> void
+foreign import ccall "THCTensorIndex.h THCudaHalfTensor_indexSelect"
+  c_indexSelect :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> CInt -> Ptr C'THCudaLongTensor -> IO ()
+
+-- | c_take :  state res_ src index -> void
+foreign import ccall "THCTensorIndex.h THCudaHalfTensor_take"
+  c_take :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaLongTensor -> IO ()
+
+-- | c_put :  state res_ indices src accumulate -> void
+foreign import ccall "THCTensorIndex.h THCudaHalfTensor_put"
+  c_put :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaHalfTensor -> CInt -> IO ()
+
+-- | c_indexCopy_long :  state res_ dim indices src -> void
+foreign import ccall "THCTensorIndex.h THCudaHalfTensor_indexCopy_long"
+  c_indexCopy_long :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> CInt -> Ptr C'THLongTensor -> Ptr C'THCudaHalfTensor -> IO ()
+
+-- | c_indexAdd_long :  state res_ dim indices src -> void
+foreign import ccall "THCTensorIndex.h THCudaHalfTensor_indexAdd_long"
+  c_indexAdd_long :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> CInt -> Ptr C'THLongTensor -> Ptr C'THCudaHalfTensor -> IO ()
+
+-- | c_indexFill_long :  state tensor dim index val -> void
+foreign import ccall "THCTensorIndex.h THCudaHalfTensor_indexFill_long"
+  c_indexFill_long :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> CInt -> Ptr C'THLongTensor -> CTHHalf -> IO ()
+
+-- | c_indexSelect_long :  state tensor src dim index -> void
+foreign import ccall "THCTensorIndex.h THCudaHalfTensor_indexSelect_long"
+  c_indexSelect_long :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> CInt -> Ptr C'THLongTensor -> IO ()
+
+-- | c_calculateAdvancedIndexingOffsets :  state output indexed baseOffset indexers -> void
+foreign import ccall "THCTensorIndex.h THCudaHalfTensor_calculateAdvancedIndexingOffsets"
+  c_calculateAdvancedIndexingOffsets :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaHalfTensor -> CPtrdiff -> Ptr (Ptr C'THCudaLongTensor) -> IO ()
+
+-- | p_indexCopy : Pointer to function : state res_ dim indices src -> void
+foreign import ccall "THCTensorIndex.h &THCudaHalfTensor_indexCopy"
+  p_indexCopy :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> CInt -> Ptr C'THCudaLongTensor -> Ptr C'THCudaHalfTensor -> IO ())
+
+-- | p_indexAdd : Pointer to function : state res_ dim indices src -> void
+foreign import ccall "THCTensorIndex.h &THCudaHalfTensor_indexAdd"
+  p_indexAdd :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> CInt -> Ptr C'THCudaLongTensor -> Ptr C'THCudaHalfTensor -> IO ())
+
+-- | p_indexFill : Pointer to function : state tensor dim index val -> void
+foreign import ccall "THCTensorIndex.h &THCudaHalfTensor_indexFill"
+  p_indexFill :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> CInt -> Ptr C'THCudaLongTensor -> CTHHalf -> IO ())
+
+-- | p_indexSelect : Pointer to function : state tensor src dim index -> void
+foreign import ccall "THCTensorIndex.h &THCudaHalfTensor_indexSelect"
+  p_indexSelect :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> CInt -> Ptr C'THCudaLongTensor -> IO ())
+
+-- | p_take : Pointer to function : state res_ src index -> void
+foreign import ccall "THCTensorIndex.h &THCudaHalfTensor_take"
+  p_take :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaLongTensor -> IO ())
+
+-- | p_put : Pointer to function : state res_ indices src accumulate -> void
+foreign import ccall "THCTensorIndex.h &THCudaHalfTensor_put"
+  p_put :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaHalfTensor -> CInt -> IO ())
+
+-- | p_indexCopy_long : Pointer to function : state res_ dim indices src -> void
+foreign import ccall "THCTensorIndex.h &THCudaHalfTensor_indexCopy_long"
+  p_indexCopy_long :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> CInt -> Ptr C'THLongTensor -> Ptr C'THCudaHalfTensor -> IO ())
+
+-- | p_indexAdd_long : Pointer to function : state res_ dim indices src -> void
+foreign import ccall "THCTensorIndex.h &THCudaHalfTensor_indexAdd_long"
+  p_indexAdd_long :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> CInt -> Ptr C'THLongTensor -> Ptr C'THCudaHalfTensor -> IO ())
+
+-- | p_indexFill_long : Pointer to function : state tensor dim index val -> void
+foreign import ccall "THCTensorIndex.h &THCudaHalfTensor_indexFill_long"
+  p_indexFill_long :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> CInt -> Ptr C'THLongTensor -> CTHHalf -> IO ())
+
+-- | p_indexSelect_long : Pointer to function : state tensor src dim index -> void
+foreign import ccall "THCTensorIndex.h &THCudaHalfTensor_indexSelect_long"
+  p_indexSelect_long :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> CInt -> Ptr C'THLongTensor -> IO ())
+
+-- | p_calculateAdvancedIndexingOffsets : Pointer to function : state output indexed baseOffset indexers -> void
+foreign import ccall "THCTensorIndex.h &THCudaHalfTensor_calculateAdvancedIndexingOffsets"
+  p_calculateAdvancedIndexingOffsets :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaHalfTensor -> CPtrdiff -> Ptr (Ptr C'THCudaLongTensor) -> IO ())
diff --git a/src/Torch/FFI/THC/Half/TensorMasked.hs b/src/Torch/FFI/THC/Half/TensorMasked.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Half/TensorMasked.hs
@@ -0,0 +1,57 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Half.TensorMasked where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_maskedFill :  state tensor mask value -> void
+foreign import ccall "THCTensorMasked.h THCudaHalfTensor_maskedFill"
+  c_maskedFill :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaByteTensor -> CTHHalf -> IO ()
+
+-- | c_maskedFillByte :  state tensor mask value -> void
+foreign import ccall "THCTensorMasked.h THCudaHalfTensor_maskedFillByte"
+  c_maskedFillByte :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THByteTensor -> CTHHalf -> IO ()
+
+-- | c_maskedCopy :  state tensor mask src -> void
+foreign import ccall "THCTensorMasked.h THCudaHalfTensor_maskedCopy"
+  c_maskedCopy :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaByteTensor -> Ptr C'THCudaHalfTensor -> IO ()
+
+-- | c_maskedCopyByte :  state tensor mask src -> void
+foreign import ccall "THCTensorMasked.h THCudaHalfTensor_maskedCopyByte"
+  c_maskedCopyByte :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THByteTensor -> Ptr C'THCudaHalfTensor -> IO ()
+
+-- | c_maskedSelect :  state tensor src mask -> void
+foreign import ccall "THCTensorMasked.h THCudaHalfTensor_maskedSelect"
+  c_maskedSelect :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaByteTensor -> IO ()
+
+-- | c_maskedSelectByte :  state tensor src mask -> void
+foreign import ccall "THCTensorMasked.h THCudaHalfTensor_maskedSelectByte"
+  c_maskedSelectByte :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> Ptr C'THByteTensor -> IO ()
+
+-- | p_maskedFill : Pointer to function : state tensor mask value -> void
+foreign import ccall "THCTensorMasked.h &THCudaHalfTensor_maskedFill"
+  p_maskedFill :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaByteTensor -> CTHHalf -> IO ())
+
+-- | p_maskedFillByte : Pointer to function : state tensor mask value -> void
+foreign import ccall "THCTensorMasked.h &THCudaHalfTensor_maskedFillByte"
+  p_maskedFillByte :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THByteTensor -> CTHHalf -> IO ())
+
+-- | p_maskedCopy : Pointer to function : state tensor mask src -> void
+foreign import ccall "THCTensorMasked.h &THCudaHalfTensor_maskedCopy"
+  p_maskedCopy :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaByteTensor -> Ptr C'THCudaHalfTensor -> IO ())
+
+-- | p_maskedCopyByte : Pointer to function : state tensor mask src -> void
+foreign import ccall "THCTensorMasked.h &THCudaHalfTensor_maskedCopyByte"
+  p_maskedCopyByte :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THByteTensor -> Ptr C'THCudaHalfTensor -> IO ())
+
+-- | p_maskedSelect : Pointer to function : state tensor src mask -> void
+foreign import ccall "THCTensorMasked.h &THCudaHalfTensor_maskedSelect"
+  p_maskedSelect :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaByteTensor -> IO ())
+
+-- | p_maskedSelectByte : Pointer to function : state tensor src mask -> void
+foreign import ccall "THCTensorMasked.h &THCudaHalfTensor_maskedSelectByte"
+  p_maskedSelectByte :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> Ptr C'THByteTensor -> IO ())
diff --git a/src/Torch/FFI/THC/Half/TensorMath.hs b/src/Torch/FFI/THC/Half/TensorMath.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Half/TensorMath.hs
@@ -0,0 +1,153 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Half.TensorMath where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_fill :  state self value -> void
+foreign import ccall "THCTensorMath.h THCudaHalfTensor_fill"
+  c_fill :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> CTHHalf -> IO ()
+
+-- | c_zero :  state self -> void
+foreign import ccall "THCTensorMath.h THCudaHalfTensor_zero"
+  c_zero :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> IO ()
+
+-- | c_zeros :  state r_ size -> void
+foreign import ccall "THCTensorMath.h THCudaHalfTensor_zeros"
+  c_zeros :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THLongStorage -> IO ()
+
+-- | c_zerosLike :  state r_ input -> void
+foreign import ccall "THCTensorMath.h THCudaHalfTensor_zerosLike"
+  c_zerosLike :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> IO ()
+
+-- | c_ones :  state r_ size -> void
+foreign import ccall "THCTensorMath.h THCudaHalfTensor_ones"
+  c_ones :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THLongStorage -> IO ()
+
+-- | c_onesLike :  state r_ input -> void
+foreign import ccall "THCTensorMath.h THCudaHalfTensor_onesLike"
+  c_onesLike :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> IO ()
+
+-- | c_reshape :  state r_ t size -> void
+foreign import ccall "THCTensorMath.h THCudaHalfTensor_reshape"
+  c_reshape :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> Ptr C'THLongStorage -> IO ()
+
+-- | c_numel :  state t -> ptrdiff_t
+foreign import ccall "THCTensorMath.h THCudaHalfTensor_numel"
+  c_numel :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> IO CPtrdiff
+
+-- | c_cat :  state result ta tb dimension -> void
+foreign import ccall "THCTensorMath.h THCudaHalfTensor_cat"
+  c_cat :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> CInt -> IO ()
+
+-- | c_catArray :  state result inputs numInputs dimension -> void
+foreign import ccall "THCTensorMath.h THCudaHalfTensor_catArray"
+  c_catArray :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr (Ptr C'THCudaHalfTensor) -> CInt -> CInt -> IO ()
+
+-- | c_nonzero :  state tensor self -> void
+foreign import ccall "THCTensorMath.h THCudaHalfTensor_nonzero"
+  c_nonzero :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaHalfTensor -> IO ()
+
+-- | c_tril :  state self src k -> void
+foreign import ccall "THCTensorMath.h THCudaHalfTensor_tril"
+  c_tril :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> CLLong -> IO ()
+
+-- | c_triu :  state self src k -> void
+foreign import ccall "THCTensorMath.h THCudaHalfTensor_triu"
+  c_triu :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> CLLong -> IO ()
+
+-- | c_diag :  state self src k -> void
+foreign import ccall "THCTensorMath.h THCudaHalfTensor_diag"
+  c_diag :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> CLLong -> IO ()
+
+-- | c_eye :  state self n k -> void
+foreign import ccall "THCTensorMath.h THCudaHalfTensor_eye"
+  c_eye :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> CLLong -> CLLong -> IO ()
+
+-- | c_trace :  state self -> accreal
+foreign import ccall "THCTensorMath.h THCudaHalfTensor_trace"
+  c_trace :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> IO CFloat
+
+-- | c_range :  state r_ xmin xmax step -> void
+foreign import ccall "THCTensorMath.h THCudaHalfTensor_range"
+  c_range :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> CFloat -> CFloat -> CFloat -> IO ()
+
+-- | c_arange :  state r_ xmin xmax step -> void
+foreign import ccall "THCTensorMath.h THCudaHalfTensor_arange"
+  c_arange :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> CFloat -> CFloat -> CFloat -> IO ()
+
+-- | p_fill : Pointer to function : state self value -> void
+foreign import ccall "THCTensorMath.h &THCudaHalfTensor_fill"
+  p_fill :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> CTHHalf -> IO ())
+
+-- | p_zero : Pointer to function : state self -> void
+foreign import ccall "THCTensorMath.h &THCudaHalfTensor_zero"
+  p_zero :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> IO ())
+
+-- | p_zeros : Pointer to function : state r_ size -> void
+foreign import ccall "THCTensorMath.h &THCudaHalfTensor_zeros"
+  p_zeros :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THLongStorage -> IO ())
+
+-- | p_zerosLike : Pointer to function : state r_ input -> void
+foreign import ccall "THCTensorMath.h &THCudaHalfTensor_zerosLike"
+  p_zerosLike :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> IO ())
+
+-- | p_ones : Pointer to function : state r_ size -> void
+foreign import ccall "THCTensorMath.h &THCudaHalfTensor_ones"
+  p_ones :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THLongStorage -> IO ())
+
+-- | p_onesLike : Pointer to function : state r_ input -> void
+foreign import ccall "THCTensorMath.h &THCudaHalfTensor_onesLike"
+  p_onesLike :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> IO ())
+
+-- | p_reshape : Pointer to function : state r_ t size -> void
+foreign import ccall "THCTensorMath.h &THCudaHalfTensor_reshape"
+  p_reshape :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> Ptr C'THLongStorage -> IO ())
+
+-- | p_numel : Pointer to function : state t -> ptrdiff_t
+foreign import ccall "THCTensorMath.h &THCudaHalfTensor_numel"
+  p_numel :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> IO CPtrdiff)
+
+-- | p_cat : Pointer to function : state result ta tb dimension -> void
+foreign import ccall "THCTensorMath.h &THCudaHalfTensor_cat"
+  p_cat :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> CInt -> IO ())
+
+-- | p_catArray : Pointer to function : state result inputs numInputs dimension -> void
+foreign import ccall "THCTensorMath.h &THCudaHalfTensor_catArray"
+  p_catArray :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr (Ptr C'THCudaHalfTensor) -> CInt -> CInt -> IO ())
+
+-- | p_nonzero : Pointer to function : state tensor self -> void
+foreign import ccall "THCTensorMath.h &THCudaHalfTensor_nonzero"
+  p_nonzero :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaHalfTensor -> IO ())
+
+-- | p_tril : Pointer to function : state self src k -> void
+foreign import ccall "THCTensorMath.h &THCudaHalfTensor_tril"
+  p_tril :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> CLLong -> IO ())
+
+-- | p_triu : Pointer to function : state self src k -> void
+foreign import ccall "THCTensorMath.h &THCudaHalfTensor_triu"
+  p_triu :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> CLLong -> IO ())
+
+-- | p_diag : Pointer to function : state self src k -> void
+foreign import ccall "THCTensorMath.h &THCudaHalfTensor_diag"
+  p_diag :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> CLLong -> IO ())
+
+-- | p_eye : Pointer to function : state self n k -> void
+foreign import ccall "THCTensorMath.h &THCudaHalfTensor_eye"
+  p_eye :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> CLLong -> CLLong -> IO ())
+
+-- | p_trace : Pointer to function : state self -> accreal
+foreign import ccall "THCTensorMath.h &THCudaHalfTensor_trace"
+  p_trace :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> IO CFloat)
+
+-- | p_range : Pointer to function : state r_ xmin xmax step -> void
+foreign import ccall "THCTensorMath.h &THCudaHalfTensor_range"
+  p_range :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> CFloat -> CFloat -> CFloat -> IO ())
+
+-- | p_arange : Pointer to function : state r_ xmin xmax step -> void
+foreign import ccall "THCTensorMath.h &THCudaHalfTensor_arange"
+  p_arange :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> CFloat -> CFloat -> CFloat -> IO ())
diff --git a/src/Torch/FFI/THC/Half/TensorMathCompare.hs b/src/Torch/FFI/THC/Half/TensorMathCompare.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Half/TensorMathCompare.hs
@@ -0,0 +1,105 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Half.TensorMathCompare where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_ltValue :  state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h THCudaHalfTensor_ltValue"
+  c_ltValue :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaHalfTensor -> CTHHalf -> IO ()
+
+-- | c_gtValue :  state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h THCudaHalfTensor_gtValue"
+  c_gtValue :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaHalfTensor -> CTHHalf -> IO ()
+
+-- | c_leValue :  state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h THCudaHalfTensor_leValue"
+  c_leValue :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaHalfTensor -> CTHHalf -> IO ()
+
+-- | c_geValue :  state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h THCudaHalfTensor_geValue"
+  c_geValue :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaHalfTensor -> CTHHalf -> IO ()
+
+-- | c_eqValue :  state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h THCudaHalfTensor_eqValue"
+  c_eqValue :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaHalfTensor -> CTHHalf -> IO ()
+
+-- | c_neValue :  state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h THCudaHalfTensor_neValue"
+  c_neValue :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaHalfTensor -> CTHHalf -> IO ()
+
+-- | c_ltValueT :  state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h THCudaHalfTensor_ltValueT"
+  c_ltValueT :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> CTHHalf -> IO ()
+
+-- | c_gtValueT :  state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h THCudaHalfTensor_gtValueT"
+  c_gtValueT :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> CTHHalf -> IO ()
+
+-- | c_leValueT :  state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h THCudaHalfTensor_leValueT"
+  c_leValueT :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> CTHHalf -> IO ()
+
+-- | c_geValueT :  state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h THCudaHalfTensor_geValueT"
+  c_geValueT :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> CTHHalf -> IO ()
+
+-- | c_eqValueT :  state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h THCudaHalfTensor_eqValueT"
+  c_eqValueT :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> CTHHalf -> IO ()
+
+-- | c_neValueT :  state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h THCudaHalfTensor_neValueT"
+  c_neValueT :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> CTHHalf -> IO ()
+
+-- | p_ltValue : Pointer to function : state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h &THCudaHalfTensor_ltValue"
+  p_ltValue :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaHalfTensor -> CTHHalf -> IO ())
+
+-- | p_gtValue : Pointer to function : state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h &THCudaHalfTensor_gtValue"
+  p_gtValue :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaHalfTensor -> CTHHalf -> IO ())
+
+-- | p_leValue : Pointer to function : state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h &THCudaHalfTensor_leValue"
+  p_leValue :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaHalfTensor -> CTHHalf -> IO ())
+
+-- | p_geValue : Pointer to function : state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h &THCudaHalfTensor_geValue"
+  p_geValue :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaHalfTensor -> CTHHalf -> IO ())
+
+-- | p_eqValue : Pointer to function : state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h &THCudaHalfTensor_eqValue"
+  p_eqValue :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaHalfTensor -> CTHHalf -> IO ())
+
+-- | p_neValue : Pointer to function : state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h &THCudaHalfTensor_neValue"
+  p_neValue :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaHalfTensor -> CTHHalf -> IO ())
+
+-- | p_ltValueT : Pointer to function : state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h &THCudaHalfTensor_ltValueT"
+  p_ltValueT :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> CTHHalf -> IO ())
+
+-- | p_gtValueT : Pointer to function : state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h &THCudaHalfTensor_gtValueT"
+  p_gtValueT :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> CTHHalf -> IO ())
+
+-- | p_leValueT : Pointer to function : state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h &THCudaHalfTensor_leValueT"
+  p_leValueT :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> CTHHalf -> IO ())
+
+-- | p_geValueT : Pointer to function : state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h &THCudaHalfTensor_geValueT"
+  p_geValueT :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> CTHHalf -> IO ())
+
+-- | p_eqValueT : Pointer to function : state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h &THCudaHalfTensor_eqValueT"
+  p_eqValueT :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> CTHHalf -> IO ())
+
+-- | p_neValueT : Pointer to function : state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h &THCudaHalfTensor_neValueT"
+  p_neValueT :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> CTHHalf -> IO ())
diff --git a/src/Torch/FFI/THC/Half/TensorMathCompareT.hs b/src/Torch/FFI/THC/Half/TensorMathCompareT.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Half/TensorMathCompareT.hs
@@ -0,0 +1,105 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Half.TensorMathCompareT where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_ltTensor :  state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h THCudaHalfTensor_ltTensor"
+  c_ltTensor :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> IO ()
+
+-- | c_gtTensor :  state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h THCudaHalfTensor_gtTensor"
+  c_gtTensor :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> IO ()
+
+-- | c_leTensor :  state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h THCudaHalfTensor_leTensor"
+  c_leTensor :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> IO ()
+
+-- | c_geTensor :  state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h THCudaHalfTensor_geTensor"
+  c_geTensor :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> IO ()
+
+-- | c_eqTensor :  state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h THCudaHalfTensor_eqTensor"
+  c_eqTensor :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> IO ()
+
+-- | c_neTensor :  state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h THCudaHalfTensor_neTensor"
+  c_neTensor :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> IO ()
+
+-- | c_ltTensorT :  state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h THCudaHalfTensor_ltTensorT"
+  c_ltTensorT :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> IO ()
+
+-- | c_gtTensorT :  state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h THCudaHalfTensor_gtTensorT"
+  c_gtTensorT :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> IO ()
+
+-- | c_leTensorT :  state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h THCudaHalfTensor_leTensorT"
+  c_leTensorT :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> IO ()
+
+-- | c_geTensorT :  state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h THCudaHalfTensor_geTensorT"
+  c_geTensorT :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> IO ()
+
+-- | c_eqTensorT :  state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h THCudaHalfTensor_eqTensorT"
+  c_eqTensorT :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> IO ()
+
+-- | c_neTensorT :  state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h THCudaHalfTensor_neTensorT"
+  c_neTensorT :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> IO ()
+
+-- | p_ltTensor : Pointer to function : state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h &THCudaHalfTensor_ltTensor"
+  p_ltTensor :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> IO ())
+
+-- | p_gtTensor : Pointer to function : state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h &THCudaHalfTensor_gtTensor"
+  p_gtTensor :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> IO ())
+
+-- | p_leTensor : Pointer to function : state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h &THCudaHalfTensor_leTensor"
+  p_leTensor :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> IO ())
+
+-- | p_geTensor : Pointer to function : state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h &THCudaHalfTensor_geTensor"
+  p_geTensor :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> IO ())
+
+-- | p_eqTensor : Pointer to function : state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h &THCudaHalfTensor_eqTensor"
+  p_eqTensor :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> IO ())
+
+-- | p_neTensor : Pointer to function : state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h &THCudaHalfTensor_neTensor"
+  p_neTensor :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> IO ())
+
+-- | p_ltTensorT : Pointer to function : state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h &THCudaHalfTensor_ltTensorT"
+  p_ltTensorT :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> IO ())
+
+-- | p_gtTensorT : Pointer to function : state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h &THCudaHalfTensor_gtTensorT"
+  p_gtTensorT :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> IO ())
+
+-- | p_leTensorT : Pointer to function : state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h &THCudaHalfTensor_leTensorT"
+  p_leTensorT :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> IO ())
+
+-- | p_geTensorT : Pointer to function : state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h &THCudaHalfTensor_geTensorT"
+  p_geTensorT :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> IO ())
+
+-- | p_eqTensorT : Pointer to function : state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h &THCudaHalfTensor_eqTensorT"
+  p_eqTensorT :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> IO ())
+
+-- | p_neTensorT : Pointer to function : state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h &THCudaHalfTensor_neTensorT"
+  p_neTensorT :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> IO ())
diff --git a/src/Torch/FFI/THC/Half/TensorMathPairwise.hs b/src/Torch/FFI/THC/Half/TensorMathPairwise.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Half/TensorMathPairwise.hs
@@ -0,0 +1,121 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Half.TensorMathPairwise where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_add :  state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h THCudaHalfTensor_add"
+  c_add :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> CTHHalf -> IO ()
+
+-- | c_sub :  state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h THCudaHalfTensor_sub"
+  c_sub :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> CTHHalf -> IO ()
+
+-- | c_add_scaled :  state self src value alpha -> void
+foreign import ccall "THCTensorMathPairwise.h THCudaHalfTensor_add_scaled"
+  c_add_scaled :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> CTHHalf -> CTHHalf -> IO ()
+
+-- | c_sub_scaled :  state self src value alpha -> void
+foreign import ccall "THCTensorMathPairwise.h THCudaHalfTensor_sub_scaled"
+  c_sub_scaled :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> CTHHalf -> CTHHalf -> IO ()
+
+-- | c_mul :  state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h THCudaHalfTensor_mul"
+  c_mul :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> CTHHalf -> IO ()
+
+-- | c_div :  state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h THCudaHalfTensor_div"
+  c_div :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> CTHHalf -> IO ()
+
+-- | c_lshift :  state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h THCudaHalfTensor_lshift"
+  c_lshift :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> CTHHalf -> IO ()
+
+-- | c_rshift :  state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h THCudaHalfTensor_rshift"
+  c_rshift :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> CTHHalf -> IO ()
+
+-- | c_fmod :  state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h THCudaHalfTensor_fmod"
+  c_fmod :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> CTHHalf -> IO ()
+
+-- | c_remainder :  state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h THCudaHalfTensor_remainder"
+  c_remainder :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> CTHHalf -> IO ()
+
+-- | c_bitand :  state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h THCudaHalfTensor_bitand"
+  c_bitand :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> CTHHalf -> IO ()
+
+-- | c_bitor :  state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h THCudaHalfTensor_bitor"
+  c_bitor :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> CTHHalf -> IO ()
+
+-- | c_bitxor :  state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h THCudaHalfTensor_bitxor"
+  c_bitxor :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> CTHHalf -> IO ()
+
+-- | c_equal :  state self src -> int
+foreign import ccall "THCTensorMathPairwise.h THCudaHalfTensor_equal"
+  c_equal :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> IO CInt
+
+-- | p_add : Pointer to function : state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h &THCudaHalfTensor_add"
+  p_add :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> CTHHalf -> IO ())
+
+-- | p_sub : Pointer to function : state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h &THCudaHalfTensor_sub"
+  p_sub :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> CTHHalf -> IO ())
+
+-- | p_add_scaled : Pointer to function : state self src value alpha -> void
+foreign import ccall "THCTensorMathPairwise.h &THCudaHalfTensor_add_scaled"
+  p_add_scaled :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> CTHHalf -> CTHHalf -> IO ())
+
+-- | p_sub_scaled : Pointer to function : state self src value alpha -> void
+foreign import ccall "THCTensorMathPairwise.h &THCudaHalfTensor_sub_scaled"
+  p_sub_scaled :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> CTHHalf -> CTHHalf -> IO ())
+
+-- | p_mul : Pointer to function : state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h &THCudaHalfTensor_mul"
+  p_mul :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> CTHHalf -> IO ())
+
+-- | p_div : Pointer to function : state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h &THCudaHalfTensor_div"
+  p_div :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> CTHHalf -> IO ())
+
+-- | p_lshift : Pointer to function : state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h &THCudaHalfTensor_lshift"
+  p_lshift :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> CTHHalf -> IO ())
+
+-- | p_rshift : Pointer to function : state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h &THCudaHalfTensor_rshift"
+  p_rshift :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> CTHHalf -> IO ())
+
+-- | p_fmod : Pointer to function : state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h &THCudaHalfTensor_fmod"
+  p_fmod :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> CTHHalf -> IO ())
+
+-- | p_remainder : Pointer to function : state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h &THCudaHalfTensor_remainder"
+  p_remainder :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> CTHHalf -> IO ())
+
+-- | p_bitand : Pointer to function : state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h &THCudaHalfTensor_bitand"
+  p_bitand :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> CTHHalf -> IO ())
+
+-- | p_bitor : Pointer to function : state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h &THCudaHalfTensor_bitor"
+  p_bitor :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> CTHHalf -> IO ())
+
+-- | p_bitxor : Pointer to function : state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h &THCudaHalfTensor_bitxor"
+  p_bitxor :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> CTHHalf -> IO ())
+
+-- | p_equal : Pointer to function : state self src -> int
+foreign import ccall "THCTensorMathPairwise.h &THCudaHalfTensor_equal"
+  p_equal :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> IO CInt)
diff --git a/src/Torch/FFI/THC/Half/TensorMathPointwise.hs b/src/Torch/FFI/THC/Half/TensorMathPointwise.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Half/TensorMathPointwise.hs
@@ -0,0 +1,177 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Half.TensorMathPointwise where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_sign :  state self src -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaHalfTensor_sign"
+  c_sign :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> IO ()
+
+-- | c_clamp :  state self src min_value max_value -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaHalfTensor_clamp"
+  c_clamp :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> CTHHalf -> CTHHalf -> IO ()
+
+-- | c_cross :  state self src1 src2 dimension -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaHalfTensor_cross"
+  c_cross :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> CInt -> IO ()
+
+-- | c_cadd :  state self src1 value src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaHalfTensor_cadd"
+  c_cadd :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> CTHHalf -> Ptr C'THCudaHalfTensor -> IO ()
+
+-- | c_csub :  state self src1 value src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaHalfTensor_csub"
+  c_csub :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> CTHHalf -> Ptr C'THCudaHalfTensor -> IO ()
+
+-- | c_cmul :  state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaHalfTensor_cmul"
+  c_cmul :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> IO ()
+
+-- | c_cpow :  state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaHalfTensor_cpow"
+  c_cpow :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> IO ()
+
+-- | c_cdiv :  state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaHalfTensor_cdiv"
+  c_cdiv :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> IO ()
+
+-- | c_clshift :  state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaHalfTensor_clshift"
+  c_clshift :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> IO ()
+
+-- | c_crshift :  state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaHalfTensor_crshift"
+  c_crshift :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> IO ()
+
+-- | c_cmax :  state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaHalfTensor_cmax"
+  c_cmax :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> IO ()
+
+-- | c_cmin :  state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaHalfTensor_cmin"
+  c_cmin :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> IO ()
+
+-- | c_cfmod :  state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaHalfTensor_cfmod"
+  c_cfmod :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> IO ()
+
+-- | c_cremainder :  state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaHalfTensor_cremainder"
+  c_cremainder :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> IO ()
+
+-- | c_cmaxValue :  state self src value -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaHalfTensor_cmaxValue"
+  c_cmaxValue :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> CTHHalf -> IO ()
+
+-- | c_cminValue :  state self src value -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaHalfTensor_cminValue"
+  c_cminValue :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> CTHHalf -> IO ()
+
+-- | c_cbitand :  state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaHalfTensor_cbitand"
+  c_cbitand :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> IO ()
+
+-- | c_cbitor :  state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaHalfTensor_cbitor"
+  c_cbitor :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> IO ()
+
+-- | c_cbitxor :  state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaHalfTensor_cbitxor"
+  c_cbitxor :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> IO ()
+
+-- | c_addcmul :  state self t value src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaHalfTensor_addcmul"
+  c_addcmul :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> CTHHalf -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> IO ()
+
+-- | c_addcdiv :  state self t value src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaHalfTensor_addcdiv"
+  c_addcdiv :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> CTHHalf -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> IO ()
+
+-- | p_sign : Pointer to function : state self src -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaHalfTensor_sign"
+  p_sign :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> IO ())
+
+-- | p_clamp : Pointer to function : state self src min_value max_value -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaHalfTensor_clamp"
+  p_clamp :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> CTHHalf -> CTHHalf -> IO ())
+
+-- | p_cross : Pointer to function : state self src1 src2 dimension -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaHalfTensor_cross"
+  p_cross :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> CInt -> IO ())
+
+-- | p_cadd : Pointer to function : state self src1 value src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaHalfTensor_cadd"
+  p_cadd :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> CTHHalf -> Ptr C'THCudaHalfTensor -> IO ())
+
+-- | p_csub : Pointer to function : state self src1 value src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaHalfTensor_csub"
+  p_csub :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> CTHHalf -> Ptr C'THCudaHalfTensor -> IO ())
+
+-- | p_cmul : Pointer to function : state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaHalfTensor_cmul"
+  p_cmul :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> IO ())
+
+-- | p_cpow : Pointer to function : state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaHalfTensor_cpow"
+  p_cpow :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> IO ())
+
+-- | p_cdiv : Pointer to function : state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaHalfTensor_cdiv"
+  p_cdiv :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> IO ())
+
+-- | p_clshift : Pointer to function : state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaHalfTensor_clshift"
+  p_clshift :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> IO ())
+
+-- | p_crshift : Pointer to function : state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaHalfTensor_crshift"
+  p_crshift :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> IO ())
+
+-- | p_cmax : Pointer to function : state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaHalfTensor_cmax"
+  p_cmax :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> IO ())
+
+-- | p_cmin : Pointer to function : state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaHalfTensor_cmin"
+  p_cmin :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> IO ())
+
+-- | p_cfmod : Pointer to function : state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaHalfTensor_cfmod"
+  p_cfmod :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> IO ())
+
+-- | p_cremainder : Pointer to function : state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaHalfTensor_cremainder"
+  p_cremainder :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> IO ())
+
+-- | p_cmaxValue : Pointer to function : state self src value -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaHalfTensor_cmaxValue"
+  p_cmaxValue :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> CTHHalf -> IO ())
+
+-- | p_cminValue : Pointer to function : state self src value -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaHalfTensor_cminValue"
+  p_cminValue :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> CTHHalf -> IO ())
+
+-- | p_cbitand : Pointer to function : state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaHalfTensor_cbitand"
+  p_cbitand :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> IO ())
+
+-- | p_cbitor : Pointer to function : state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaHalfTensor_cbitor"
+  p_cbitor :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> IO ())
+
+-- | p_cbitxor : Pointer to function : state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaHalfTensor_cbitxor"
+  p_cbitxor :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> IO ())
+
+-- | p_addcmul : Pointer to function : state self t value src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaHalfTensor_addcmul"
+  p_addcmul :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> CTHHalf -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> IO ())
+
+-- | p_addcdiv : Pointer to function : state self t value src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaHalfTensor_addcdiv"
+  p_addcdiv :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> CTHHalf -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> IO ())
diff --git a/src/Torch/FFI/THC/Half/TensorMathReduce.hs b/src/Torch/FFI/THC/Half/TensorMathReduce.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Half/TensorMathReduce.hs
@@ -0,0 +1,89 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Half.TensorMathReduce where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_sum :  state self src dim keepdim -> void
+foreign import ccall "THCTensorMathReduce.h THCudaHalfTensor_sum"
+  c_sum :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> CInt -> CInt -> IO ()
+
+-- | c_prod :  state self src dim keepdim -> void
+foreign import ccall "THCTensorMathReduce.h THCudaHalfTensor_prod"
+  c_prod :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> CInt -> CInt -> IO ()
+
+-- | c_sumall :  state self -> accreal
+foreign import ccall "THCTensorMathReduce.h THCudaHalfTensor_sumall"
+  c_sumall :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> IO CFloat
+
+-- | c_prodall :  state self -> accreal
+foreign import ccall "THCTensorMathReduce.h THCudaHalfTensor_prodall"
+  c_prodall :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> IO CFloat
+
+-- | c_min :  state values indices src dim keepdim -> void
+foreign import ccall "THCTensorMathReduce.h THCudaHalfTensor_min"
+  c_min :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaHalfTensor -> CInt -> CInt -> IO ()
+
+-- | c_max :  state values indices src dim keepdim -> void
+foreign import ccall "THCTensorMathReduce.h THCudaHalfTensor_max"
+  c_max :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaHalfTensor -> CInt -> CInt -> IO ()
+
+-- | c_minall :  state self -> real
+foreign import ccall "THCTensorMathReduce.h THCudaHalfTensor_minall"
+  c_minall :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> IO CTHHalf
+
+-- | c_maxall :  state self -> real
+foreign import ccall "THCTensorMathReduce.h THCudaHalfTensor_maxall"
+  c_maxall :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> IO CTHHalf
+
+-- | c_medianall :  state self -> real
+foreign import ccall "THCTensorMathReduce.h THCudaHalfTensor_medianall"
+  c_medianall :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> IO CTHHalf
+
+-- | c_median :  state values indices src dim keepdim -> void
+foreign import ccall "THCTensorMathReduce.h THCudaHalfTensor_median"
+  c_median :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaHalfTensor -> CInt -> CInt -> IO ()
+
+-- | p_sum : Pointer to function : state self src dim keepdim -> void
+foreign import ccall "THCTensorMathReduce.h &THCudaHalfTensor_sum"
+  p_sum :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> CInt -> CInt -> IO ())
+
+-- | p_prod : Pointer to function : state self src dim keepdim -> void
+foreign import ccall "THCTensorMathReduce.h &THCudaHalfTensor_prod"
+  p_prod :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> CInt -> CInt -> IO ())
+
+-- | p_sumall : Pointer to function : state self -> accreal
+foreign import ccall "THCTensorMathReduce.h &THCudaHalfTensor_sumall"
+  p_sumall :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> IO CFloat)
+
+-- | p_prodall : Pointer to function : state self -> accreal
+foreign import ccall "THCTensorMathReduce.h &THCudaHalfTensor_prodall"
+  p_prodall :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> IO CFloat)
+
+-- | p_min : Pointer to function : state values indices src dim keepdim -> void
+foreign import ccall "THCTensorMathReduce.h &THCudaHalfTensor_min"
+  p_min :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaHalfTensor -> CInt -> CInt -> IO ())
+
+-- | p_max : Pointer to function : state values indices src dim keepdim -> void
+foreign import ccall "THCTensorMathReduce.h &THCudaHalfTensor_max"
+  p_max :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaHalfTensor -> CInt -> CInt -> IO ())
+
+-- | p_minall : Pointer to function : state self -> real
+foreign import ccall "THCTensorMathReduce.h &THCudaHalfTensor_minall"
+  p_minall :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> IO CTHHalf)
+
+-- | p_maxall : Pointer to function : state self -> real
+foreign import ccall "THCTensorMathReduce.h &THCudaHalfTensor_maxall"
+  p_maxall :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> IO CTHHalf)
+
+-- | p_medianall : Pointer to function : state self -> real
+foreign import ccall "THCTensorMathReduce.h &THCudaHalfTensor_medianall"
+  p_medianall :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> IO CTHHalf)
+
+-- | p_median : Pointer to function : state values indices src dim keepdim -> void
+foreign import ccall "THCTensorMathReduce.h &THCudaHalfTensor_median"
+  p_median :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaHalfTensor -> CInt -> CInt -> IO ())
diff --git a/src/Torch/FFI/THC/Half/TensorMathScan.hs b/src/Torch/FFI/THC/Half/TensorMathScan.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Half/TensorMathScan.hs
@@ -0,0 +1,25 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Half.TensorMathScan where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_cumsum :  state self src dim -> void
+foreign import ccall "THCTensorMathScan.h THCudaHalfTensor_cumsum"
+  c_cumsum :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> CInt -> IO ()
+
+-- | c_cumprod :  state self src dim -> void
+foreign import ccall "THCTensorMathScan.h THCudaHalfTensor_cumprod"
+  c_cumprod :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> CInt -> IO ()
+
+-- | p_cumsum : Pointer to function : state self src dim -> void
+foreign import ccall "THCTensorMathScan.h &THCudaHalfTensor_cumsum"
+  p_cumsum :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> CInt -> IO ())
+
+-- | p_cumprod : Pointer to function : state self src dim -> void
+foreign import ccall "THCTensorMathScan.h &THCudaHalfTensor_cumprod"
+  p_cumprod :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> CInt -> IO ())
diff --git a/src/Torch/FFI/THC/Half/TensorMode.hs b/src/Torch/FFI/THC/Half/TensorMode.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Half/TensorMode.hs
@@ -0,0 +1,17 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Half.TensorMode where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_mode :  state values indices input dimension keepdim -> void
+foreign import ccall "THCTensorMode.h THCudaHalfTensor_mode"
+  c_mode :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaHalfTensor -> CInt -> CInt -> IO ()
+
+-- | p_mode : Pointer to function : state values indices input dimension keepdim -> void
+foreign import ccall "THCTensorMode.h &THCudaHalfTensor_mode"
+  p_mode :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaHalfTensor -> CInt -> CInt -> IO ())
diff --git a/src/Torch/FFI/THC/Half/TensorRandom.hs b/src/Torch/FFI/THC/Half/TensorRandom.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Half/TensorRandom.hs
@@ -0,0 +1,57 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Half.TensorRandom where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_random :  state self -> void
+foreign import ccall "THCTensorRandom.h THCudaHalfTensor_random"
+  c_random :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> IO ()
+
+-- | c_clampedRandom :  state self min max -> void
+foreign import ccall "THCTensorRandom.h THCudaHalfTensor_clampedRandom"
+  c_clampedRandom :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> CLLong -> CLLong -> IO ()
+
+-- | c_cappedRandom :  state self max -> void
+foreign import ccall "THCTensorRandom.h THCudaHalfTensor_cappedRandom"
+  c_cappedRandom :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> CLLong -> IO ()
+
+-- | c_bernoulli :  state self p -> void
+foreign import ccall "THCTensorRandom.h THCudaHalfTensor_bernoulli"
+  c_bernoulli :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> CDouble -> IO ()
+
+-- | c_bernoulli_DoubleTensor :  state self p -> void
+foreign import ccall "THCTensorRandom.h THCudaHalfTensor_bernoulli_DoubleTensor"
+  c_bernoulli_DoubleTensor :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_geometric :  state self p -> void
+foreign import ccall "THCTensorRandom.h THCudaHalfTensor_geometric"
+  c_geometric :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> CDouble -> IO ()
+
+-- | p_random : Pointer to function : state self -> void
+foreign import ccall "THCTensorRandom.h &THCudaHalfTensor_random"
+  p_random :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> IO ())
+
+-- | p_clampedRandom : Pointer to function : state self min max -> void
+foreign import ccall "THCTensorRandom.h &THCudaHalfTensor_clampedRandom"
+  p_clampedRandom :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> CLLong -> CLLong -> IO ())
+
+-- | p_cappedRandom : Pointer to function : state self max -> void
+foreign import ccall "THCTensorRandom.h &THCudaHalfTensor_cappedRandom"
+  p_cappedRandom :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> CLLong -> IO ())
+
+-- | p_bernoulli : Pointer to function : state self p -> void
+foreign import ccall "THCTensorRandom.h &THCudaHalfTensor_bernoulli"
+  p_bernoulli :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> CDouble -> IO ())
+
+-- | p_bernoulli_DoubleTensor : Pointer to function : state self p -> void
+foreign import ccall "THCTensorRandom.h &THCudaHalfTensor_bernoulli_DoubleTensor"
+  p_bernoulli_DoubleTensor :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_geometric : Pointer to function : state self p -> void
+foreign import ccall "THCTensorRandom.h &THCudaHalfTensor_geometric"
+  p_geometric :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> CDouble -> IO ())
diff --git a/src/Torch/FFI/THC/Half/TensorScatterGather.hs b/src/Torch/FFI/THC/Half/TensorScatterGather.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Half/TensorScatterGather.hs
@@ -0,0 +1,41 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Half.TensorScatterGather where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_gather :  state tensor src dim index -> void
+foreign import ccall "THCTensorScatterGather.h THCudaHalfTensor_gather"
+  c_gather :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> CInt -> Ptr C'THCudaLongTensor -> IO ()
+
+-- | c_scatter :  state tensor dim index src -> void
+foreign import ccall "THCTensorScatterGather.h THCudaHalfTensor_scatter"
+  c_scatter :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> CInt -> Ptr C'THCudaLongTensor -> Ptr C'THCudaHalfTensor -> IO ()
+
+-- | c_scatterAdd :  state tensor dim index src -> void
+foreign import ccall "THCTensorScatterGather.h THCudaHalfTensor_scatterAdd"
+  c_scatterAdd :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> CInt -> Ptr C'THCudaLongTensor -> Ptr C'THCudaHalfTensor -> IO ()
+
+-- | c_scatterFill :  state tensor dim index value -> void
+foreign import ccall "THCTensorScatterGather.h THCudaHalfTensor_scatterFill"
+  c_scatterFill :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> CInt -> Ptr C'THCudaLongTensor -> CTHHalf -> IO ()
+
+-- | p_gather : Pointer to function : state tensor src dim index -> void
+foreign import ccall "THCTensorScatterGather.h &THCudaHalfTensor_gather"
+  p_gather :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaHalfTensor -> CInt -> Ptr C'THCudaLongTensor -> IO ())
+
+-- | p_scatter : Pointer to function : state tensor dim index src -> void
+foreign import ccall "THCTensorScatterGather.h &THCudaHalfTensor_scatter"
+  p_scatter :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> CInt -> Ptr C'THCudaLongTensor -> Ptr C'THCudaHalfTensor -> IO ())
+
+-- | p_scatterAdd : Pointer to function : state tensor dim index src -> void
+foreign import ccall "THCTensorScatterGather.h &THCudaHalfTensor_scatterAdd"
+  p_scatterAdd :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> CInt -> Ptr C'THCudaLongTensor -> Ptr C'THCudaHalfTensor -> IO ())
+
+-- | p_scatterFill : Pointer to function : state tensor dim index value -> void
+foreign import ccall "THCTensorScatterGather.h &THCudaHalfTensor_scatterFill"
+  p_scatterFill :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> CInt -> Ptr C'THCudaLongTensor -> CTHHalf -> IO ())
diff --git a/src/Torch/FFI/THC/Half/TensorSort.hs b/src/Torch/FFI/THC/Half/TensorSort.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Half/TensorSort.hs
@@ -0,0 +1,25 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Half.TensorSort where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_sortKeyValueInplace :  state keys values dim order -> void
+foreign import ccall "THCTensorSort.h THCudaHalfTensor_sortKeyValueInplace"
+  c_sortKeyValueInplace :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaLongTensor -> CInt -> CInt -> IO ()
+
+-- | c_sort :  state sorted indices input dim order -> void
+foreign import ccall "THCTensorSort.h THCudaHalfTensor_sort"
+  c_sort :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaHalfTensor -> CInt -> CInt -> IO ()
+
+-- | p_sortKeyValueInplace : Pointer to function : state keys values dim order -> void
+foreign import ccall "THCTensorSort.h &THCudaHalfTensor_sortKeyValueInplace"
+  p_sortKeyValueInplace :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaLongTensor -> CInt -> CInt -> IO ())
+
+-- | p_sort : Pointer to function : state sorted indices input dim order -> void
+foreign import ccall "THCTensorSort.h &THCudaHalfTensor_sort"
+  p_sort :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaHalfTensor -> CInt -> CInt -> IO ())
diff --git a/src/Torch/FFI/THC/Half/TensorTopK.hs b/src/Torch/FFI/THC/Half/TensorTopK.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Half/TensorTopK.hs
@@ -0,0 +1,17 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Half.TensorTopK where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_topk :  state topK indices input k dim dir sorted -> void
+foreign import ccall "THCTensorTopK.h THCudaHalfTensor_topk"
+  c_topk :: Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaHalfTensor -> CLLong -> CInt -> CInt -> CInt -> IO ()
+
+-- | p_topk : Pointer to function : state topK indices input k dim dir sorted -> void
+foreign import ccall "THCTensorTopK.h &THCudaHalfTensor_topk"
+  p_topk :: FunPtr (Ptr C'THCState -> Ptr C'THCudaHalfTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaHalfTensor -> CLLong -> CInt -> CInt -> CInt -> IO ())
diff --git a/src/Torch/FFI/THC/Int/Storage.hs b/src/Torch/FFI/THC/Int/Storage.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Int/Storage.hs
@@ -0,0 +1,161 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Int.Storage where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_data :  state  -> real *
+foreign import ccall "THCStorage.h THCudaIntStorage_data"
+  c_data :: Ptr C'THCState -> Ptr C'THCIntStorage -> IO (Ptr CInt)
+
+-- | c_size :  state  -> ptrdiff_t
+foreign import ccall "THCStorage.h THCudaIntStorage_size"
+  c_size :: Ptr C'THCState -> Ptr C'THCIntStorage -> IO CPtrdiff
+
+-- | c_set :  state    -> void
+foreign import ccall "THCStorage.h THCudaIntStorage_set"
+  c_set :: Ptr C'THCState -> Ptr C'THCIntStorage -> CPtrdiff -> CInt -> IO ()
+
+-- | c_get :  state   -> real
+foreign import ccall "THCStorage.h THCudaIntStorage_get"
+  c_get :: Ptr C'THCState -> Ptr C'THCIntStorage -> CPtrdiff -> IO CInt
+
+-- | c_new :  state -> THCStorage *
+foreign import ccall "THCStorage.h THCudaIntStorage_new"
+  c_new :: Ptr C'THCState -> IO (Ptr C'THCIntStorage)
+
+-- | c_newWithSize :  state size -> THCStorage *
+foreign import ccall "THCStorage.h THCudaIntStorage_newWithSize"
+  c_newWithSize :: Ptr C'THCState -> CPtrdiff -> IO (Ptr C'THCIntStorage)
+
+-- | c_newWithSize1 :  state  -> THCStorage *
+foreign import ccall "THCStorage.h THCudaIntStorage_newWithSize1"
+  c_newWithSize1 :: Ptr C'THCState -> CInt -> IO (Ptr C'THCIntStorage)
+
+-- | c_newWithSize2 :  state   -> THCStorage *
+foreign import ccall "THCStorage.h THCudaIntStorage_newWithSize2"
+  c_newWithSize2 :: Ptr C'THCState -> CInt -> CInt -> IO (Ptr C'THCIntStorage)
+
+-- | c_newWithSize3 :  state    -> THCStorage *
+foreign import ccall "THCStorage.h THCudaIntStorage_newWithSize3"
+  c_newWithSize3 :: Ptr C'THCState -> CInt -> CInt -> CInt -> IO (Ptr C'THCIntStorage)
+
+-- | c_newWithSize4 :  state     -> THCStorage *
+foreign import ccall "THCStorage.h THCudaIntStorage_newWithSize4"
+  c_newWithSize4 :: Ptr C'THCState -> CInt -> CInt -> CInt -> CInt -> IO (Ptr C'THCIntStorage)
+
+-- | c_newWithMapping :  state filename size shared -> THCStorage *
+foreign import ccall "THCStorage.h THCudaIntStorage_newWithMapping"
+  c_newWithMapping :: Ptr C'THCState -> Ptr CChar -> CPtrdiff -> CInt -> IO (Ptr C'THCIntStorage)
+
+-- | c_newWithData :  state data size -> THCStorage *
+foreign import ccall "THCStorage.h THCudaIntStorage_newWithData"
+  c_newWithData :: Ptr C'THCState -> Ptr CInt -> CPtrdiff -> IO (Ptr C'THCIntStorage)
+
+-- | c_setFlag :  state storage flag -> void
+foreign import ccall "THCStorage.h THCudaIntStorage_setFlag"
+  c_setFlag :: Ptr C'THCState -> Ptr C'THCIntStorage -> CChar -> IO ()
+
+-- | c_clearFlag :  state storage flag -> void
+foreign import ccall "THCStorage.h THCudaIntStorage_clearFlag"
+  c_clearFlag :: Ptr C'THCState -> Ptr C'THCIntStorage -> CChar -> IO ()
+
+-- | c_retain :  state storage -> void
+foreign import ccall "THCStorage.h THCudaIntStorage_retain"
+  c_retain :: Ptr C'THCState -> Ptr C'THCIntStorage -> IO ()
+
+-- | c_free :  state storage -> void
+foreign import ccall "THCStorage.h THCudaIntStorage_free"
+  c_free :: Ptr C'THCState -> Ptr C'THCIntStorage -> IO ()
+
+-- | c_resize :  state storage size -> void
+foreign import ccall "THCStorage.h THCudaIntStorage_resize"
+  c_resize :: Ptr C'THCState -> Ptr C'THCIntStorage -> CPtrdiff -> IO ()
+
+-- | c_fill :  state storage value -> void
+foreign import ccall "THCStorage.h THCudaIntStorage_fill"
+  c_fill :: Ptr C'THCState -> Ptr C'THCIntStorage -> CInt -> IO ()
+
+-- | c_getDevice :  state storage -> int
+foreign import ccall "THCStorage.h THCudaIntStorage_getDevice"
+  c_getDevice :: Ptr C'THCState -> Ptr C'THCIntStorage -> IO CInt
+
+-- | p_data : Pointer to function : state  -> real *
+foreign import ccall "THCStorage.h &THCudaIntStorage_data"
+  p_data :: FunPtr (Ptr C'THCState -> Ptr C'THCIntStorage -> IO (Ptr CInt))
+
+-- | p_size : Pointer to function : state  -> ptrdiff_t
+foreign import ccall "THCStorage.h &THCudaIntStorage_size"
+  p_size :: FunPtr (Ptr C'THCState -> Ptr C'THCIntStorage -> IO CPtrdiff)
+
+-- | p_set : Pointer to function : state    -> void
+foreign import ccall "THCStorage.h &THCudaIntStorage_set"
+  p_set :: FunPtr (Ptr C'THCState -> Ptr C'THCIntStorage -> CPtrdiff -> CInt -> IO ())
+
+-- | p_get : Pointer to function : state   -> real
+foreign import ccall "THCStorage.h &THCudaIntStorage_get"
+  p_get :: FunPtr (Ptr C'THCState -> Ptr C'THCIntStorage -> CPtrdiff -> IO CInt)
+
+-- | p_new : Pointer to function : state -> THCStorage *
+foreign import ccall "THCStorage.h &THCudaIntStorage_new"
+  p_new :: FunPtr (Ptr C'THCState -> IO (Ptr C'THCIntStorage))
+
+-- | p_newWithSize : Pointer to function : state size -> THCStorage *
+foreign import ccall "THCStorage.h &THCudaIntStorage_newWithSize"
+  p_newWithSize :: FunPtr (Ptr C'THCState -> CPtrdiff -> IO (Ptr C'THCIntStorage))
+
+-- | p_newWithSize1 : Pointer to function : state  -> THCStorage *
+foreign import ccall "THCStorage.h &THCudaIntStorage_newWithSize1"
+  p_newWithSize1 :: FunPtr (Ptr C'THCState -> CInt -> IO (Ptr C'THCIntStorage))
+
+-- | p_newWithSize2 : Pointer to function : state   -> THCStorage *
+foreign import ccall "THCStorage.h &THCudaIntStorage_newWithSize2"
+  p_newWithSize2 :: FunPtr (Ptr C'THCState -> CInt -> CInt -> IO (Ptr C'THCIntStorage))
+
+-- | p_newWithSize3 : Pointer to function : state    -> THCStorage *
+foreign import ccall "THCStorage.h &THCudaIntStorage_newWithSize3"
+  p_newWithSize3 :: FunPtr (Ptr C'THCState -> CInt -> CInt -> CInt -> IO (Ptr C'THCIntStorage))
+
+-- | p_newWithSize4 : Pointer to function : state     -> THCStorage *
+foreign import ccall "THCStorage.h &THCudaIntStorage_newWithSize4"
+  p_newWithSize4 :: FunPtr (Ptr C'THCState -> CInt -> CInt -> CInt -> CInt -> IO (Ptr C'THCIntStorage))
+
+-- | p_newWithMapping : Pointer to function : state filename size shared -> THCStorage *
+foreign import ccall "THCStorage.h &THCudaIntStorage_newWithMapping"
+  p_newWithMapping :: FunPtr (Ptr C'THCState -> Ptr CChar -> CPtrdiff -> CInt -> IO (Ptr C'THCIntStorage))
+
+-- | p_newWithData : Pointer to function : state data size -> THCStorage *
+foreign import ccall "THCStorage.h &THCudaIntStorage_newWithData"
+  p_newWithData :: FunPtr (Ptr C'THCState -> Ptr CInt -> CPtrdiff -> IO (Ptr C'THCIntStorage))
+
+-- | p_setFlag : Pointer to function : state storage flag -> void
+foreign import ccall "THCStorage.h &THCudaIntStorage_setFlag"
+  p_setFlag :: FunPtr (Ptr C'THCState -> Ptr C'THCIntStorage -> CChar -> IO ())
+
+-- | p_clearFlag : Pointer to function : state storage flag -> void
+foreign import ccall "THCStorage.h &THCudaIntStorage_clearFlag"
+  p_clearFlag :: FunPtr (Ptr C'THCState -> Ptr C'THCIntStorage -> CChar -> IO ())
+
+-- | p_retain : Pointer to function : state storage -> void
+foreign import ccall "THCStorage.h &THCudaIntStorage_retain"
+  p_retain :: FunPtr (Ptr C'THCState -> Ptr C'THCIntStorage -> IO ())
+
+-- | p_free : Pointer to function : state storage -> void
+foreign import ccall "THCStorage.h &THCudaIntStorage_free"
+  p_free :: FunPtr (Ptr C'THCState -> Ptr C'THCIntStorage -> IO ())
+
+-- | p_resize : Pointer to function : state storage size -> void
+foreign import ccall "THCStorage.h &THCudaIntStorage_resize"
+  p_resize :: FunPtr (Ptr C'THCState -> Ptr C'THCIntStorage -> CPtrdiff -> IO ())
+
+-- | p_fill : Pointer to function : state storage value -> void
+foreign import ccall "THCStorage.h &THCudaIntStorage_fill"
+  p_fill :: FunPtr (Ptr C'THCState -> Ptr C'THCIntStorage -> CInt -> IO ())
+
+-- | p_getDevice : Pointer to function : state storage -> int
+foreign import ccall "THCStorage.h &THCudaIntStorage_getDevice"
+  p_getDevice :: FunPtr (Ptr C'THCState -> Ptr C'THCIntStorage -> IO CInt)
diff --git a/src/Torch/FFI/THC/Int/StorageCopy.hs b/src/Torch/FFI/THC/Int/StorageCopy.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Int/StorageCopy.hs
@@ -0,0 +1,113 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Int.StorageCopy where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_rawCopy :  state storage src -> void
+foreign import ccall "THCStorageCopy.h THCudaIntStorage_rawCopy"
+  c_rawCopy :: Ptr C'THCState -> Ptr C'THCIntStorage -> Ptr CInt -> IO ()
+
+-- | c_copy :  state storage src -> void
+foreign import ccall "THCStorageCopy.h THCudaIntStorage_copy"
+  c_copy :: Ptr C'THCState -> Ptr C'THCIntStorage -> Ptr C'THCIntStorage -> IO ()
+
+-- | c_copyByte :  state storage src -> void
+foreign import ccall "THCStorageCopy.h THCudaIntStorage_copyByte"
+  c_copyByte :: Ptr C'THCState -> Ptr C'THCIntStorage -> Ptr C'THByteStorage -> IO ()
+
+-- | c_copyChar :  state storage src -> void
+foreign import ccall "THCStorageCopy.h THCudaIntStorage_copyChar"
+  c_copyChar :: Ptr C'THCState -> Ptr C'THCIntStorage -> Ptr C'THCharStorage -> IO ()
+
+-- | c_copyShort :  state storage src -> void
+foreign import ccall "THCStorageCopy.h THCudaIntStorage_copyShort"
+  c_copyShort :: Ptr C'THCState -> Ptr C'THCIntStorage -> Ptr C'THShortStorage -> IO ()
+
+-- | c_copyInt :  state storage src -> void
+foreign import ccall "THCStorageCopy.h THCudaIntStorage_copyInt"
+  c_copyInt :: Ptr C'THCState -> Ptr C'THCIntStorage -> Ptr C'THIntStorage -> IO ()
+
+-- | c_copyLong :  state storage src -> void
+foreign import ccall "THCStorageCopy.h THCudaIntStorage_copyLong"
+  c_copyLong :: Ptr C'THCState -> Ptr C'THCIntStorage -> Ptr C'THLongStorage -> IO ()
+
+-- | c_copyFloat :  state storage src -> void
+foreign import ccall "THCStorageCopy.h THCudaIntStorage_copyFloat"
+  c_copyFloat :: Ptr C'THCState -> Ptr C'THCIntStorage -> Ptr C'THFloatStorage -> IO ()
+
+-- | c_copyDouble :  state storage src -> void
+foreign import ccall "THCStorageCopy.h THCudaIntStorage_copyDouble"
+  c_copyDouble :: Ptr C'THCState -> Ptr C'THCIntStorage -> Ptr C'THDoubleStorage -> IO ()
+
+-- | c_copyHalf :  state storage src -> void
+foreign import ccall "THCStorageCopy.h THCudaIntStorage_copyHalf"
+  c_copyHalf :: Ptr C'THCState -> Ptr C'THCIntStorage -> Ptr C'THHalfStorage -> IO ()
+
+-- | c_thCopyCuda :  state self src -> void
+foreign import ccall "THCStorageCopy.h THIntStorage_copyCuda"
+  c_thCopyCuda :: Ptr C'THCState -> Ptr C'THIntStorage -> Ptr C'THCIntStorage -> IO ()
+
+-- | c_copyCuda :  state self src -> void
+foreign import ccall "THCStorageCopy.h THCudaIntStorage_copyCuda"
+  c_copyCuda :: Ptr C'THCState -> Ptr C'THCIntStorage -> Ptr C'THCIntStorage -> IO ()
+
+-- | c_copyCPU :  state self src -> void
+foreign import ccall "THCStorageCopy.h THCudaIntStorage_copyCPU"
+  c_copyCPU :: Ptr C'THCState -> Ptr C'THCIntStorage -> Ptr C'THIntStorage -> IO ()
+
+-- | p_rawCopy : Pointer to function : state storage src -> void
+foreign import ccall "THCStorageCopy.h &THCudaIntStorage_rawCopy"
+  p_rawCopy :: FunPtr (Ptr C'THCState -> Ptr C'THCIntStorage -> Ptr CInt -> IO ())
+
+-- | p_copy : Pointer to function : state storage src -> void
+foreign import ccall "THCStorageCopy.h &THCudaIntStorage_copy"
+  p_copy :: FunPtr (Ptr C'THCState -> Ptr C'THCIntStorage -> Ptr C'THCIntStorage -> IO ())
+
+-- | p_copyByte : Pointer to function : state storage src -> void
+foreign import ccall "THCStorageCopy.h &THCudaIntStorage_copyByte"
+  p_copyByte :: FunPtr (Ptr C'THCState -> Ptr C'THCIntStorage -> Ptr C'THByteStorage -> IO ())
+
+-- | p_copyChar : Pointer to function : state storage src -> void
+foreign import ccall "THCStorageCopy.h &THCudaIntStorage_copyChar"
+  p_copyChar :: FunPtr (Ptr C'THCState -> Ptr C'THCIntStorage -> Ptr C'THCharStorage -> IO ())
+
+-- | p_copyShort : Pointer to function : state storage src -> void
+foreign import ccall "THCStorageCopy.h &THCudaIntStorage_copyShort"
+  p_copyShort :: FunPtr (Ptr C'THCState -> Ptr C'THCIntStorage -> Ptr C'THShortStorage -> IO ())
+
+-- | p_copyInt : Pointer to function : state storage src -> void
+foreign import ccall "THCStorageCopy.h &THCudaIntStorage_copyInt"
+  p_copyInt :: FunPtr (Ptr C'THCState -> Ptr C'THCIntStorage -> Ptr C'THIntStorage -> IO ())
+
+-- | p_copyLong : Pointer to function : state storage src -> void
+foreign import ccall "THCStorageCopy.h &THCudaIntStorage_copyLong"
+  p_copyLong :: FunPtr (Ptr C'THCState -> Ptr C'THCIntStorage -> Ptr C'THLongStorage -> IO ())
+
+-- | p_copyFloat : Pointer to function : state storage src -> void
+foreign import ccall "THCStorageCopy.h &THCudaIntStorage_copyFloat"
+  p_copyFloat :: FunPtr (Ptr C'THCState -> Ptr C'THCIntStorage -> Ptr C'THFloatStorage -> IO ())
+
+-- | p_copyDouble : Pointer to function : state storage src -> void
+foreign import ccall "THCStorageCopy.h &THCudaIntStorage_copyDouble"
+  p_copyDouble :: FunPtr (Ptr C'THCState -> Ptr C'THCIntStorage -> Ptr C'THDoubleStorage -> IO ())
+
+-- | p_copyHalf : Pointer to function : state storage src -> void
+foreign import ccall "THCStorageCopy.h &THCudaIntStorage_copyHalf"
+  p_copyHalf :: FunPtr (Ptr C'THCState -> Ptr C'THCIntStorage -> Ptr C'THHalfStorage -> IO ())
+
+-- | p_thCopyCuda : Pointer to function : state self src -> void
+foreign import ccall "THCStorageCopy.h &THIntStorage_copyCuda"
+  p_thCopyCuda :: FunPtr (Ptr C'THCState -> Ptr C'THIntStorage -> Ptr C'THCIntStorage -> IO ())
+
+-- | p_copyCuda : Pointer to function : state self src -> void
+foreign import ccall "THCStorageCopy.h &THCudaIntStorage_copyCuda"
+  p_copyCuda :: FunPtr (Ptr C'THCState -> Ptr C'THCIntStorage -> Ptr C'THCIntStorage -> IO ())
+
+-- | p_copyCPU : Pointer to function : state self src -> void
+foreign import ccall "THCStorageCopy.h &THCudaIntStorage_copyCPU"
+  p_copyCPU :: FunPtr (Ptr C'THCState -> Ptr C'THCIntStorage -> Ptr C'THIntStorage -> IO ())
diff --git a/src/Torch/FFI/THC/Int/Tensor.hs b/src/Torch/FFI/THC/Int/Tensor.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Int/Tensor.hs
@@ -0,0 +1,593 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Int.Tensor where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_storage :  state self -> THCStorage *
+foreign import ccall "THCTensor.h THCudaIntTensor_storage"
+  c_storage :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> IO (Ptr C'THCIntStorage)
+
+-- | c_storageOffset :  state self -> ptrdiff_t
+foreign import ccall "THCTensor.h THCudaIntTensor_storageOffset"
+  c_storageOffset :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> IO CPtrdiff
+
+-- | c_nDimension :  state self -> int
+foreign import ccall "THCTensor.h THCudaIntTensor_nDimension"
+  c_nDimension :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> IO CInt
+
+-- | c_size :  state self dim -> int64_t
+foreign import ccall "THCTensor.h THCudaIntTensor_size"
+  c_size :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> CInt -> IO CLLong
+
+-- | c_stride :  state self dim -> int64_t
+foreign import ccall "THCTensor.h THCudaIntTensor_stride"
+  c_stride :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> CInt -> IO CLLong
+
+-- | c_newSizeOf :  state self -> THLongStorage *
+foreign import ccall "THCTensor.h THCudaIntTensor_newSizeOf"
+  c_newSizeOf :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> IO (Ptr C'THLongStorage)
+
+-- | c_newStrideOf :  state self -> THLongStorage *
+foreign import ccall "THCTensor.h THCudaIntTensor_newStrideOf"
+  c_newStrideOf :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> IO (Ptr C'THLongStorage)
+
+-- | c_data :  state self -> real *
+foreign import ccall "THCTensor.h THCudaIntTensor_data"
+  c_data :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> IO (Ptr CInt)
+
+-- | c_setFlag :  state self flag -> void
+foreign import ccall "THCTensor.h THCudaIntTensor_setFlag"
+  c_setFlag :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> CChar -> IO ()
+
+-- | c_clearFlag :  state self flag -> void
+foreign import ccall "THCTensor.h THCudaIntTensor_clearFlag"
+  c_clearFlag :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> CChar -> IO ()
+
+-- | c_new :  state -> THCTensor *
+foreign import ccall "THCTensor.h THCudaIntTensor_new"
+  c_new :: Ptr C'THCState -> IO (Ptr C'THCudaIntTensor)
+
+-- | c_newWithTensor :  state tensor -> THCTensor *
+foreign import ccall "THCTensor.h THCudaIntTensor_newWithTensor"
+  c_newWithTensor :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> IO (Ptr C'THCudaIntTensor)
+
+-- | c_newWithStorage :  state storage_ storageOffset_ size_ stride_ -> THCTensor *
+foreign import ccall "THCTensor.h THCudaIntTensor_newWithStorage"
+  c_newWithStorage :: Ptr C'THCState -> Ptr C'THCIntStorage -> CPtrdiff -> Ptr C'THLongStorage -> Ptr C'THLongStorage -> IO (Ptr C'THCudaIntTensor)
+
+-- | c_newWithStorage1d :  state storage_ storageOffset_ size0_ stride0_ -> THCTensor *
+foreign import ccall "THCTensor.h THCudaIntTensor_newWithStorage1d"
+  c_newWithStorage1d :: Ptr C'THCState -> Ptr C'THCIntStorage -> CPtrdiff -> CLLong -> CLLong -> IO (Ptr C'THCudaIntTensor)
+
+-- | c_newWithStorage2d :  state storage_ storageOffset_ size0_ stride0_ size1_ stride1_ -> THCTensor *
+foreign import ccall "THCTensor.h THCudaIntTensor_newWithStorage2d"
+  c_newWithStorage2d :: Ptr C'THCState -> Ptr C'THCIntStorage -> CPtrdiff -> CLLong -> CLLong -> CLLong -> CLLong -> IO (Ptr C'THCudaIntTensor)
+
+-- | c_newWithStorage3d :  state storage_ storageOffset_ size0_ stride0_ size1_ stride1_ size2_ stride2_ -> THCTensor *
+foreign import ccall "THCTensor.h THCudaIntTensor_newWithStorage3d"
+  c_newWithStorage3d :: Ptr C'THCState -> Ptr C'THCIntStorage -> CPtrdiff -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> IO (Ptr C'THCudaIntTensor)
+
+-- | c_newWithStorage4d :  state storage_ storageOffset_ size0_ stride0_ size1_ stride1_ size2_ stride2_ size3_ stride3_ -> THCTensor *
+foreign import ccall "THCTensor.h THCudaIntTensor_newWithStorage4d"
+  c_newWithStorage4d :: Ptr C'THCState -> Ptr C'THCIntStorage -> CPtrdiff -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> IO (Ptr C'THCudaIntTensor)
+
+-- | c_newWithSize :  state size_ stride_ -> THCTensor *
+foreign import ccall "THCTensor.h THCudaIntTensor_newWithSize"
+  c_newWithSize :: Ptr C'THCState -> Ptr C'THLongStorage -> Ptr C'THLongStorage -> IO (Ptr C'THCudaIntTensor)
+
+-- | c_newWithSize1d :  state size0_ -> THCTensor *
+foreign import ccall "THCTensor.h THCudaIntTensor_newWithSize1d"
+  c_newWithSize1d :: Ptr C'THCState -> CLLong -> IO (Ptr C'THCudaIntTensor)
+
+-- | c_newWithSize2d :  state size0_ size1_ -> THCTensor *
+foreign import ccall "THCTensor.h THCudaIntTensor_newWithSize2d"
+  c_newWithSize2d :: Ptr C'THCState -> CLLong -> CLLong -> IO (Ptr C'THCudaIntTensor)
+
+-- | c_newWithSize3d :  state size0_ size1_ size2_ -> THCTensor *
+foreign import ccall "THCTensor.h THCudaIntTensor_newWithSize3d"
+  c_newWithSize3d :: Ptr C'THCState -> CLLong -> CLLong -> CLLong -> IO (Ptr C'THCudaIntTensor)
+
+-- | c_newWithSize4d :  state size0_ size1_ size2_ size3_ -> THCTensor *
+foreign import ccall "THCTensor.h THCudaIntTensor_newWithSize4d"
+  c_newWithSize4d :: Ptr C'THCState -> CLLong -> CLLong -> CLLong -> CLLong -> IO (Ptr C'THCudaIntTensor)
+
+-- | c_newClone :  state self -> THCTensor *
+foreign import ccall "THCTensor.h THCudaIntTensor_newClone"
+  c_newClone :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> IO (Ptr C'THCudaIntTensor)
+
+-- | c_newContiguous :  state tensor -> THCTensor *
+foreign import ccall "THCTensor.h THCudaIntTensor_newContiguous"
+  c_newContiguous :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> IO (Ptr C'THCudaIntTensor)
+
+-- | c_newSelect :  state tensor dimension_ sliceIndex_ -> THCTensor *
+foreign import ccall "THCTensor.h THCudaIntTensor_newSelect"
+  c_newSelect :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> CInt -> CLLong -> IO (Ptr C'THCudaIntTensor)
+
+-- | c_newNarrow :  state tensor dimension_ firstIndex_ size_ -> THCTensor *
+foreign import ccall "THCTensor.h THCudaIntTensor_newNarrow"
+  c_newNarrow :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> CInt -> CLLong -> CLLong -> IO (Ptr C'THCudaIntTensor)
+
+-- | c_newTranspose :  state tensor dimension1_ dimension2_ -> THCTensor *
+foreign import ccall "THCTensor.h THCudaIntTensor_newTranspose"
+  c_newTranspose :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> CInt -> CInt -> IO (Ptr C'THCudaIntTensor)
+
+-- | c_newUnfold :  state tensor dimension_ size_ step_ -> THCTensor *
+foreign import ccall "THCTensor.h THCudaIntTensor_newUnfold"
+  c_newUnfold :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> CInt -> CLLong -> CLLong -> IO (Ptr C'THCudaIntTensor)
+
+-- | c_newView :  state tensor size -> THCTensor *
+foreign import ccall "THCTensor.h THCudaIntTensor_newView"
+  c_newView :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THLongStorage -> IO (Ptr C'THCudaIntTensor)
+
+-- | c_newFoldBatchDim :  state input -> THCTensor *
+foreign import ccall "THCTensor.h THCudaIntTensor_newFoldBatchDim"
+  c_newFoldBatchDim :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> IO (Ptr C'THCudaIntTensor)
+
+-- | c_newExpand :  state tensor size -> THCTensor *
+foreign import ccall "THCTensor.h THCudaIntTensor_newExpand"
+  c_newExpand :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THLongStorage -> IO (Ptr C'THCudaIntTensor)
+
+-- | c_expand :  state r tensor sizes -> void
+foreign import ccall "THCTensor.h THCudaIntTensor_expand"
+  c_expand :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> Ptr C'THLongStorage -> IO ()
+
+-- | c_expandNd :  state rets ops count -> void
+foreign import ccall "THCTensor.h THCudaIntTensor_expandNd"
+  c_expandNd :: Ptr C'THCState -> Ptr (Ptr C'THCudaIntTensor) -> Ptr (Ptr C'THCudaIntTensor) -> CInt -> IO ()
+
+-- | c_resize :  state tensor size stride -> void
+foreign import ccall "THCTensor.h THCudaIntTensor_resize"
+  c_resize :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THLongStorage -> Ptr C'THLongStorage -> IO ()
+
+-- | c_resizeAs :  state tensor src -> void
+foreign import ccall "THCTensor.h THCudaIntTensor_resizeAs"
+  c_resizeAs :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> IO ()
+
+-- | c_resize1d :  state tensor size0_ -> void
+foreign import ccall "THCTensor.h THCudaIntTensor_resize1d"
+  c_resize1d :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> CLLong -> IO ()
+
+-- | c_resize2d :  state tensor size0_ size1_ -> void
+foreign import ccall "THCTensor.h THCudaIntTensor_resize2d"
+  c_resize2d :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> CLLong -> CLLong -> IO ()
+
+-- | c_resize3d :  state tensor size0_ size1_ size2_ -> void
+foreign import ccall "THCTensor.h THCudaIntTensor_resize3d"
+  c_resize3d :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> CLLong -> CLLong -> CLLong -> IO ()
+
+-- | c_resize4d :  state tensor size0_ size1_ size2_ size3_ -> void
+foreign import ccall "THCTensor.h THCudaIntTensor_resize4d"
+  c_resize4d :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> CLLong -> CLLong -> CLLong -> CLLong -> IO ()
+
+-- | c_resize5d :  state tensor size0_ size1_ size2_ size3_ size4_ -> void
+foreign import ccall "THCTensor.h THCudaIntTensor_resize5d"
+  c_resize5d :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> IO ()
+
+-- | c_resizeNd :  state tensor nDimension size stride -> void
+foreign import ccall "THCTensor.h THCudaIntTensor_resizeNd"
+  c_resizeNd :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> CInt -> Ptr CLLong -> Ptr CLLong -> IO ()
+
+-- | c_set :  state self src -> void
+foreign import ccall "THCTensor.h THCudaIntTensor_set"
+  c_set :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> IO ()
+
+-- | c_setStorage :  state self storage_ storageOffset_ size_ stride_ -> void
+foreign import ccall "THCTensor.h THCudaIntTensor_setStorage"
+  c_setStorage :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCIntStorage -> CPtrdiff -> Ptr C'THLongStorage -> Ptr C'THLongStorage -> IO ()
+
+-- | c_setStorageNd :  state self storage storageOffset nDimension size stride -> void
+foreign import ccall "THCTensor.h THCudaIntTensor_setStorageNd"
+  c_setStorageNd :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCIntStorage -> CPtrdiff -> CInt -> Ptr CLLong -> Ptr CLLong -> IO ()
+
+-- | c_setStorage1d :  state self storage_ storageOffset_ size0_ stride0_ -> void
+foreign import ccall "THCTensor.h THCudaIntTensor_setStorage1d"
+  c_setStorage1d :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCIntStorage -> CPtrdiff -> CLLong -> CLLong -> IO ()
+
+-- | c_setStorage2d :  state self storage_ storageOffset_ size0_ stride0_ size1_ stride1_ -> void
+foreign import ccall "THCTensor.h THCudaIntTensor_setStorage2d"
+  c_setStorage2d :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCIntStorage -> CPtrdiff -> CLLong -> CLLong -> CLLong -> CLLong -> IO ()
+
+-- | c_setStorage3d :  state self storage_ storageOffset_ size0_ stride0_ size1_ stride1_ size2_ stride2_ -> void
+foreign import ccall "THCTensor.h THCudaIntTensor_setStorage3d"
+  c_setStorage3d :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCIntStorage -> CPtrdiff -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> IO ()
+
+-- | c_setStorage4d :  state self storage_ storageOffset_ size0_ stride0_ size1_ stride1_ size2_ stride2_ size3_ stride3_ -> void
+foreign import ccall "THCTensor.h THCudaIntTensor_setStorage4d"
+  c_setStorage4d :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCIntStorage -> CPtrdiff -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> IO ()
+
+-- | c_narrow :  state self src dimension_ firstIndex_ size_ -> void
+foreign import ccall "THCTensor.h THCudaIntTensor_narrow"
+  c_narrow :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> CInt -> CLLong -> CLLong -> IO ()
+
+-- | c_select :  state self src dimension_ sliceIndex_ -> void
+foreign import ccall "THCTensor.h THCudaIntTensor_select"
+  c_select :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> CInt -> CLLong -> IO ()
+
+-- | c_transpose :  state self src dimension1_ dimension2_ -> void
+foreign import ccall "THCTensor.h THCudaIntTensor_transpose"
+  c_transpose :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> CInt -> CInt -> IO ()
+
+-- | c_unfold :  state self src dimension_ size_ step_ -> void
+foreign import ccall "THCTensor.h THCudaIntTensor_unfold"
+  c_unfold :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> CInt -> CLLong -> CLLong -> IO ()
+
+-- | c_squeeze :  state self src -> void
+foreign import ccall "THCTensor.h THCudaIntTensor_squeeze"
+  c_squeeze :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> IO ()
+
+-- | c_squeeze1d :  state self src dimension_ -> void
+foreign import ccall "THCTensor.h THCudaIntTensor_squeeze1d"
+  c_squeeze1d :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> CInt -> IO ()
+
+-- | c_unsqueeze1d :  state self src dimension_ -> void
+foreign import ccall "THCTensor.h THCudaIntTensor_unsqueeze1d"
+  c_unsqueeze1d :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> CInt -> IO ()
+
+-- | c_isContiguous :  state self -> int
+foreign import ccall "THCTensor.h THCudaIntTensor_isContiguous"
+  c_isContiguous :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> IO CInt
+
+-- | c_isSameSizeAs :  state self src -> int
+foreign import ccall "THCTensor.h THCudaIntTensor_isSameSizeAs"
+  c_isSameSizeAs :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> IO CInt
+
+-- | c_isSetTo :  state self src -> int
+foreign import ccall "THCTensor.h THCudaIntTensor_isSetTo"
+  c_isSetTo :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> IO CInt
+
+-- | c_isSize :  state self dims -> int
+foreign import ccall "THCTensor.h THCudaIntTensor_isSize"
+  c_isSize :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THLongStorage -> IO CInt
+
+-- | c_nElement :  state self -> ptrdiff_t
+foreign import ccall "THCTensor.h THCudaIntTensor_nElement"
+  c_nElement :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> IO CPtrdiff
+
+-- | c_retain :  state self -> void
+foreign import ccall "THCTensor.h THCudaIntTensor_retain"
+  c_retain :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> IO ()
+
+-- | c_free :  state self -> void
+foreign import ccall "THCTensor.h THCudaIntTensor_free"
+  c_free :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> IO ()
+
+-- | c_freeCopyTo :  state self dst -> void
+foreign import ccall "THCTensor.h THCudaIntTensor_freeCopyTo"
+  c_freeCopyTo :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> IO ()
+
+-- | c_set1d :  state tensor x0 value -> void
+foreign import ccall "THCTensor.h THCudaIntTensor_set1d"
+  c_set1d :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> CLLong -> CInt -> IO ()
+
+-- | c_set2d :  state tensor x0 x1 value -> void
+foreign import ccall "THCTensor.h THCudaIntTensor_set2d"
+  c_set2d :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> CLLong -> CLLong -> CInt -> IO ()
+
+-- | c_set3d :  state tensor x0 x1 x2 value -> void
+foreign import ccall "THCTensor.h THCudaIntTensor_set3d"
+  c_set3d :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> CLLong -> CLLong -> CLLong -> CInt -> IO ()
+
+-- | c_set4d :  state tensor x0 x1 x2 x3 value -> void
+foreign import ccall "THCTensor.h THCudaIntTensor_set4d"
+  c_set4d :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> CLLong -> CLLong -> CLLong -> CLLong -> CInt -> IO ()
+
+-- | c_get1d :  state tensor x0 -> real
+foreign import ccall "THCTensor.h THCudaIntTensor_get1d"
+  c_get1d :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> CLLong -> IO CInt
+
+-- | c_get2d :  state tensor x0 x1 -> real
+foreign import ccall "THCTensor.h THCudaIntTensor_get2d"
+  c_get2d :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> CLLong -> CLLong -> IO CInt
+
+-- | c_get3d :  state tensor x0 x1 x2 -> real
+foreign import ccall "THCTensor.h THCudaIntTensor_get3d"
+  c_get3d :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> CLLong -> CLLong -> CLLong -> IO CInt
+
+-- | c_get4d :  state tensor x0 x1 x2 x3 -> real
+foreign import ccall "THCTensor.h THCudaIntTensor_get4d"
+  c_get4d :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> CLLong -> CLLong -> CLLong -> CLLong -> IO CInt
+
+-- | c_getDevice :  state self -> int
+foreign import ccall "THCTensor.h THCudaIntTensor_getDevice"
+  c_getDevice :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> IO CInt
+
+-- | c_sizeDesc :  state tensor -> THCDescBuff
+foreign import ccall "THCTensor.h THCudaIntTensor_sizeDesc"
+  c_sizeDesc :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> IO (Ptr C'THCDescBuff)
+
+-- | p_storage : Pointer to function : state self -> THCStorage *
+foreign import ccall "THCTensor.h &THCudaIntTensor_storage"
+  p_storage :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> IO (Ptr C'THCIntStorage))
+
+-- | p_storageOffset : Pointer to function : state self -> ptrdiff_t
+foreign import ccall "THCTensor.h &THCudaIntTensor_storageOffset"
+  p_storageOffset :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> IO CPtrdiff)
+
+-- | p_nDimension : Pointer to function : state self -> int
+foreign import ccall "THCTensor.h &THCudaIntTensor_nDimension"
+  p_nDimension :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> IO CInt)
+
+-- | p_size : Pointer to function : state self dim -> int64_t
+foreign import ccall "THCTensor.h &THCudaIntTensor_size"
+  p_size :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> CInt -> IO CLLong)
+
+-- | p_stride : Pointer to function : state self dim -> int64_t
+foreign import ccall "THCTensor.h &THCudaIntTensor_stride"
+  p_stride :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> CInt -> IO CLLong)
+
+-- | p_newSizeOf : Pointer to function : state self -> THLongStorage *
+foreign import ccall "THCTensor.h &THCudaIntTensor_newSizeOf"
+  p_newSizeOf :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> IO (Ptr C'THLongStorage))
+
+-- | p_newStrideOf : Pointer to function : state self -> THLongStorage *
+foreign import ccall "THCTensor.h &THCudaIntTensor_newStrideOf"
+  p_newStrideOf :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> IO (Ptr C'THLongStorage))
+
+-- | p_data : Pointer to function : state self -> real *
+foreign import ccall "THCTensor.h &THCudaIntTensor_data"
+  p_data :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> IO (Ptr CInt))
+
+-- | p_setFlag : Pointer to function : state self flag -> void
+foreign import ccall "THCTensor.h &THCudaIntTensor_setFlag"
+  p_setFlag :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> CChar -> IO ())
+
+-- | p_clearFlag : Pointer to function : state self flag -> void
+foreign import ccall "THCTensor.h &THCudaIntTensor_clearFlag"
+  p_clearFlag :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> CChar -> IO ())
+
+-- | p_new : Pointer to function : state -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaIntTensor_new"
+  p_new :: FunPtr (Ptr C'THCState -> IO (Ptr C'THCudaIntTensor))
+
+-- | p_newWithTensor : Pointer to function : state tensor -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaIntTensor_newWithTensor"
+  p_newWithTensor :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> IO (Ptr C'THCudaIntTensor))
+
+-- | p_newWithStorage : Pointer to function : state storage_ storageOffset_ size_ stride_ -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaIntTensor_newWithStorage"
+  p_newWithStorage :: FunPtr (Ptr C'THCState -> Ptr C'THCIntStorage -> CPtrdiff -> Ptr C'THLongStorage -> Ptr C'THLongStorage -> IO (Ptr C'THCudaIntTensor))
+
+-- | p_newWithStorage1d : Pointer to function : state storage_ storageOffset_ size0_ stride0_ -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaIntTensor_newWithStorage1d"
+  p_newWithStorage1d :: FunPtr (Ptr C'THCState -> Ptr C'THCIntStorage -> CPtrdiff -> CLLong -> CLLong -> IO (Ptr C'THCudaIntTensor))
+
+-- | p_newWithStorage2d : Pointer to function : state storage_ storageOffset_ size0_ stride0_ size1_ stride1_ -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaIntTensor_newWithStorage2d"
+  p_newWithStorage2d :: FunPtr (Ptr C'THCState -> Ptr C'THCIntStorage -> CPtrdiff -> CLLong -> CLLong -> CLLong -> CLLong -> IO (Ptr C'THCudaIntTensor))
+
+-- | p_newWithStorage3d : Pointer to function : state storage_ storageOffset_ size0_ stride0_ size1_ stride1_ size2_ stride2_ -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaIntTensor_newWithStorage3d"
+  p_newWithStorage3d :: FunPtr (Ptr C'THCState -> Ptr C'THCIntStorage -> CPtrdiff -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> IO (Ptr C'THCudaIntTensor))
+
+-- | p_newWithStorage4d : Pointer to function : state storage_ storageOffset_ size0_ stride0_ size1_ stride1_ size2_ stride2_ size3_ stride3_ -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaIntTensor_newWithStorage4d"
+  p_newWithStorage4d :: FunPtr (Ptr C'THCState -> Ptr C'THCIntStorage -> CPtrdiff -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> IO (Ptr C'THCudaIntTensor))
+
+-- | p_newWithSize : Pointer to function : state size_ stride_ -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaIntTensor_newWithSize"
+  p_newWithSize :: FunPtr (Ptr C'THCState -> Ptr C'THLongStorage -> Ptr C'THLongStorage -> IO (Ptr C'THCudaIntTensor))
+
+-- | p_newWithSize1d : Pointer to function : state size0_ -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaIntTensor_newWithSize1d"
+  p_newWithSize1d :: FunPtr (Ptr C'THCState -> CLLong -> IO (Ptr C'THCudaIntTensor))
+
+-- | p_newWithSize2d : Pointer to function : state size0_ size1_ -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaIntTensor_newWithSize2d"
+  p_newWithSize2d :: FunPtr (Ptr C'THCState -> CLLong -> CLLong -> IO (Ptr C'THCudaIntTensor))
+
+-- | p_newWithSize3d : Pointer to function : state size0_ size1_ size2_ -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaIntTensor_newWithSize3d"
+  p_newWithSize3d :: FunPtr (Ptr C'THCState -> CLLong -> CLLong -> CLLong -> IO (Ptr C'THCudaIntTensor))
+
+-- | p_newWithSize4d : Pointer to function : state size0_ size1_ size2_ size3_ -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaIntTensor_newWithSize4d"
+  p_newWithSize4d :: FunPtr (Ptr C'THCState -> CLLong -> CLLong -> CLLong -> CLLong -> IO (Ptr C'THCudaIntTensor))
+
+-- | p_newClone : Pointer to function : state self -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaIntTensor_newClone"
+  p_newClone :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> IO (Ptr C'THCudaIntTensor))
+
+-- | p_newContiguous : Pointer to function : state tensor -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaIntTensor_newContiguous"
+  p_newContiguous :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> IO (Ptr C'THCudaIntTensor))
+
+-- | p_newSelect : Pointer to function : state tensor dimension_ sliceIndex_ -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaIntTensor_newSelect"
+  p_newSelect :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> CInt -> CLLong -> IO (Ptr C'THCudaIntTensor))
+
+-- | p_newNarrow : Pointer to function : state tensor dimension_ firstIndex_ size_ -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaIntTensor_newNarrow"
+  p_newNarrow :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> CInt -> CLLong -> CLLong -> IO (Ptr C'THCudaIntTensor))
+
+-- | p_newTranspose : Pointer to function : state tensor dimension1_ dimension2_ -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaIntTensor_newTranspose"
+  p_newTranspose :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> CInt -> CInt -> IO (Ptr C'THCudaIntTensor))
+
+-- | p_newUnfold : Pointer to function : state tensor dimension_ size_ step_ -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaIntTensor_newUnfold"
+  p_newUnfold :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> CInt -> CLLong -> CLLong -> IO (Ptr C'THCudaIntTensor))
+
+-- | p_newView : Pointer to function : state tensor size -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaIntTensor_newView"
+  p_newView :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THLongStorage -> IO (Ptr C'THCudaIntTensor))
+
+-- | p_newFoldBatchDim : Pointer to function : state input -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaIntTensor_newFoldBatchDim"
+  p_newFoldBatchDim :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> IO (Ptr C'THCudaIntTensor))
+
+-- | p_newExpand : Pointer to function : state tensor size -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaIntTensor_newExpand"
+  p_newExpand :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THLongStorage -> IO (Ptr C'THCudaIntTensor))
+
+-- | p_expand : Pointer to function : state r tensor sizes -> void
+foreign import ccall "THCTensor.h &THCudaIntTensor_expand"
+  p_expand :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> Ptr C'THLongStorage -> IO ())
+
+-- | p_expandNd : Pointer to function : state rets ops count -> void
+foreign import ccall "THCTensor.h &THCudaIntTensor_expandNd"
+  p_expandNd :: FunPtr (Ptr C'THCState -> Ptr (Ptr C'THCudaIntTensor) -> Ptr (Ptr C'THCudaIntTensor) -> CInt -> IO ())
+
+-- | p_resize : Pointer to function : state tensor size stride -> void
+foreign import ccall "THCTensor.h &THCudaIntTensor_resize"
+  p_resize :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THLongStorage -> Ptr C'THLongStorage -> IO ())
+
+-- | p_resizeAs : Pointer to function : state tensor src -> void
+foreign import ccall "THCTensor.h &THCudaIntTensor_resizeAs"
+  p_resizeAs :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> IO ())
+
+-- | p_resize1d : Pointer to function : state tensor size0_ -> void
+foreign import ccall "THCTensor.h &THCudaIntTensor_resize1d"
+  p_resize1d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> CLLong -> IO ())
+
+-- | p_resize2d : Pointer to function : state tensor size0_ size1_ -> void
+foreign import ccall "THCTensor.h &THCudaIntTensor_resize2d"
+  p_resize2d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> CLLong -> CLLong -> IO ())
+
+-- | p_resize3d : Pointer to function : state tensor size0_ size1_ size2_ -> void
+foreign import ccall "THCTensor.h &THCudaIntTensor_resize3d"
+  p_resize3d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> CLLong -> CLLong -> CLLong -> IO ())
+
+-- | p_resize4d : Pointer to function : state tensor size0_ size1_ size2_ size3_ -> void
+foreign import ccall "THCTensor.h &THCudaIntTensor_resize4d"
+  p_resize4d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> CLLong -> CLLong -> CLLong -> CLLong -> IO ())
+
+-- | p_resize5d : Pointer to function : state tensor size0_ size1_ size2_ size3_ size4_ -> void
+foreign import ccall "THCTensor.h &THCudaIntTensor_resize5d"
+  p_resize5d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> IO ())
+
+-- | p_resizeNd : Pointer to function : state tensor nDimension size stride -> void
+foreign import ccall "THCTensor.h &THCudaIntTensor_resizeNd"
+  p_resizeNd :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> CInt -> Ptr CLLong -> Ptr CLLong -> IO ())
+
+-- | p_set : Pointer to function : state self src -> void
+foreign import ccall "THCTensor.h &THCudaIntTensor_set"
+  p_set :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> IO ())
+
+-- | p_setStorage : Pointer to function : state self storage_ storageOffset_ size_ stride_ -> void
+foreign import ccall "THCTensor.h &THCudaIntTensor_setStorage"
+  p_setStorage :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCIntStorage -> CPtrdiff -> Ptr C'THLongStorage -> Ptr C'THLongStorage -> IO ())
+
+-- | p_setStorageNd : Pointer to function : state self storage storageOffset nDimension size stride -> void
+foreign import ccall "THCTensor.h &THCudaIntTensor_setStorageNd"
+  p_setStorageNd :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCIntStorage -> CPtrdiff -> CInt -> Ptr CLLong -> Ptr CLLong -> IO ())
+
+-- | p_setStorage1d : Pointer to function : state self storage_ storageOffset_ size0_ stride0_ -> void
+foreign import ccall "THCTensor.h &THCudaIntTensor_setStorage1d"
+  p_setStorage1d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCIntStorage -> CPtrdiff -> CLLong -> CLLong -> IO ())
+
+-- | p_setStorage2d : Pointer to function : state self storage_ storageOffset_ size0_ stride0_ size1_ stride1_ -> void
+foreign import ccall "THCTensor.h &THCudaIntTensor_setStorage2d"
+  p_setStorage2d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCIntStorage -> CPtrdiff -> CLLong -> CLLong -> CLLong -> CLLong -> IO ())
+
+-- | p_setStorage3d : Pointer to function : state self storage_ storageOffset_ size0_ stride0_ size1_ stride1_ size2_ stride2_ -> void
+foreign import ccall "THCTensor.h &THCudaIntTensor_setStorage3d"
+  p_setStorage3d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCIntStorage -> CPtrdiff -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> IO ())
+
+-- | p_setStorage4d : Pointer to function : state self storage_ storageOffset_ size0_ stride0_ size1_ stride1_ size2_ stride2_ size3_ stride3_ -> void
+foreign import ccall "THCTensor.h &THCudaIntTensor_setStorage4d"
+  p_setStorage4d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCIntStorage -> CPtrdiff -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> IO ())
+
+-- | p_narrow : Pointer to function : state self src dimension_ firstIndex_ size_ -> void
+foreign import ccall "THCTensor.h &THCudaIntTensor_narrow"
+  p_narrow :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> CInt -> CLLong -> CLLong -> IO ())
+
+-- | p_select : Pointer to function : state self src dimension_ sliceIndex_ -> void
+foreign import ccall "THCTensor.h &THCudaIntTensor_select"
+  p_select :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> CInt -> CLLong -> IO ())
+
+-- | p_transpose : Pointer to function : state self src dimension1_ dimension2_ -> void
+foreign import ccall "THCTensor.h &THCudaIntTensor_transpose"
+  p_transpose :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> CInt -> CInt -> IO ())
+
+-- | p_unfold : Pointer to function : state self src dimension_ size_ step_ -> void
+foreign import ccall "THCTensor.h &THCudaIntTensor_unfold"
+  p_unfold :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> CInt -> CLLong -> CLLong -> IO ())
+
+-- | p_squeeze : Pointer to function : state self src -> void
+foreign import ccall "THCTensor.h &THCudaIntTensor_squeeze"
+  p_squeeze :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> IO ())
+
+-- | p_squeeze1d : Pointer to function : state self src dimension_ -> void
+foreign import ccall "THCTensor.h &THCudaIntTensor_squeeze1d"
+  p_squeeze1d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> CInt -> IO ())
+
+-- | p_unsqueeze1d : Pointer to function : state self src dimension_ -> void
+foreign import ccall "THCTensor.h &THCudaIntTensor_unsqueeze1d"
+  p_unsqueeze1d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> CInt -> IO ())
+
+-- | p_isContiguous : Pointer to function : state self -> int
+foreign import ccall "THCTensor.h &THCudaIntTensor_isContiguous"
+  p_isContiguous :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> IO CInt)
+
+-- | p_isSameSizeAs : Pointer to function : state self src -> int
+foreign import ccall "THCTensor.h &THCudaIntTensor_isSameSizeAs"
+  p_isSameSizeAs :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> IO CInt)
+
+-- | p_isSetTo : Pointer to function : state self src -> int
+foreign import ccall "THCTensor.h &THCudaIntTensor_isSetTo"
+  p_isSetTo :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> IO CInt)
+
+-- | p_isSize : Pointer to function : state self dims -> int
+foreign import ccall "THCTensor.h &THCudaIntTensor_isSize"
+  p_isSize :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THLongStorage -> IO CInt)
+
+-- | p_nElement : Pointer to function : state self -> ptrdiff_t
+foreign import ccall "THCTensor.h &THCudaIntTensor_nElement"
+  p_nElement :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> IO CPtrdiff)
+
+-- | p_retain : Pointer to function : state self -> void
+foreign import ccall "THCTensor.h &THCudaIntTensor_retain"
+  p_retain :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> IO ())
+
+-- | p_free : Pointer to function : state self -> void
+foreign import ccall "THCTensor.h &THCudaIntTensor_free"
+  p_free :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> IO ())
+
+-- | p_freeCopyTo : Pointer to function : state self dst -> void
+foreign import ccall "THCTensor.h &THCudaIntTensor_freeCopyTo"
+  p_freeCopyTo :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> IO ())
+
+-- | p_set1d : Pointer to function : state tensor x0 value -> void
+foreign import ccall "THCTensor.h &THCudaIntTensor_set1d"
+  p_set1d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> CLLong -> CInt -> IO ())
+
+-- | p_set2d : Pointer to function : state tensor x0 x1 value -> void
+foreign import ccall "THCTensor.h &THCudaIntTensor_set2d"
+  p_set2d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> CLLong -> CLLong -> CInt -> IO ())
+
+-- | p_set3d : Pointer to function : state tensor x0 x1 x2 value -> void
+foreign import ccall "THCTensor.h &THCudaIntTensor_set3d"
+  p_set3d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> CLLong -> CLLong -> CLLong -> CInt -> IO ())
+
+-- | p_set4d : Pointer to function : state tensor x0 x1 x2 x3 value -> void
+foreign import ccall "THCTensor.h &THCudaIntTensor_set4d"
+  p_set4d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> CLLong -> CLLong -> CLLong -> CLLong -> CInt -> IO ())
+
+-- | p_get1d : Pointer to function : state tensor x0 -> real
+foreign import ccall "THCTensor.h &THCudaIntTensor_get1d"
+  p_get1d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> CLLong -> IO CInt)
+
+-- | p_get2d : Pointer to function : state tensor x0 x1 -> real
+foreign import ccall "THCTensor.h &THCudaIntTensor_get2d"
+  p_get2d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> CLLong -> CLLong -> IO CInt)
+
+-- | p_get3d : Pointer to function : state tensor x0 x1 x2 -> real
+foreign import ccall "THCTensor.h &THCudaIntTensor_get3d"
+  p_get3d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> CLLong -> CLLong -> CLLong -> IO CInt)
+
+-- | p_get4d : Pointer to function : state tensor x0 x1 x2 x3 -> real
+foreign import ccall "THCTensor.h &THCudaIntTensor_get4d"
+  p_get4d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> CLLong -> CLLong -> CLLong -> CLLong -> IO CInt)
+
+-- | p_getDevice : Pointer to function : state self -> int
+foreign import ccall "THCTensor.h &THCudaIntTensor_getDevice"
+  p_getDevice :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> IO CInt)
+
+-- | p_sizeDesc : Pointer to function : state tensor -> THCDescBuff
+foreign import ccall "THCTensor.h &THCudaIntTensor_sizeDesc"
+  p_sizeDesc :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> IO (Ptr C'THCDescBuff))
diff --git a/src/Torch/FFI/THC/Int/TensorCopy.hs b/src/Torch/FFI/THC/Int/TensorCopy.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Int/TensorCopy.hs
@@ -0,0 +1,177 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Int.TensorCopy where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_copy :  state self src -> void
+foreign import ccall "THCTensorCopy.h THCudaIntTensor_copy"
+  c_copy :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> IO ()
+
+-- | c_copyIgnoringOverlaps :  state self src -> void
+foreign import ccall "THCTensorCopy.h THCudaIntTensor_copyIgnoringOverlaps"
+  c_copyIgnoringOverlaps :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> IO ()
+
+-- | c_copyByte :  state self src -> void
+foreign import ccall "THCTensorCopy.h THCudaIntTensor_copyByte"
+  c_copyByte :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THByteTensor -> IO ()
+
+-- | c_copyChar :  state self src -> void
+foreign import ccall "THCTensorCopy.h THCudaIntTensor_copyChar"
+  c_copyChar :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCharTensor -> IO ()
+
+-- | c_copyShort :  state self src -> void
+foreign import ccall "THCTensorCopy.h THCudaIntTensor_copyShort"
+  c_copyShort :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THShortTensor -> IO ()
+
+-- | c_copyInt :  state self src -> void
+foreign import ccall "THCTensorCopy.h THCudaIntTensor_copyInt"
+  c_copyInt :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THIntTensor -> IO ()
+
+-- | c_copyLong :  state self src -> void
+foreign import ccall "THCTensorCopy.h THCudaIntTensor_copyLong"
+  c_copyLong :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THLongTensor -> IO ()
+
+-- | c_copyFloat :  state self src -> void
+foreign import ccall "THCTensorCopy.h THCudaIntTensor_copyFloat"
+  c_copyFloat :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THFloatTensor -> IO ()
+
+-- | c_copyDouble :  state self src -> void
+foreign import ccall "THCTensorCopy.h THCudaIntTensor_copyDouble"
+  c_copyDouble :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THDoubleTensor -> IO ()
+
+-- | c_copyHalf :  state self src -> void
+foreign import ccall "THCTensorCopy.h THCudaIntTensor_copyHalf"
+  c_copyHalf :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THHalfTensor -> IO ()
+
+-- | c_copyCudaByte :  state dst src -> void
+foreign import ccall "THCTensorCopy.h THCudaIntTensor_copyCudaByte"
+  c_copyCudaByte :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaByteTensor -> IO ()
+
+-- | c_copyCudaChar :  state dst src -> void
+foreign import ccall "THCTensorCopy.h THCudaIntTensor_copyCudaChar"
+  c_copyCudaChar :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaCharTensor -> IO ()
+
+-- | c_copyCudaShort :  state dst src -> void
+foreign import ccall "THCTensorCopy.h THCudaIntTensor_copyCudaShort"
+  c_copyCudaShort :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaShortTensor -> IO ()
+
+-- | c_copyCudaInt :  state dst src -> void
+foreign import ccall "THCTensorCopy.h THCudaIntTensor_copyCudaInt"
+  c_copyCudaInt :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> IO ()
+
+-- | c_copyCudaLong :  state dst src -> void
+foreign import ccall "THCTensorCopy.h THCudaIntTensor_copyCudaLong"
+  c_copyCudaLong :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaLongTensor -> IO ()
+
+-- | c_copyCudaDouble :  state dst src -> void
+foreign import ccall "THCTensorCopy.h THCudaIntTensor_copyCudaDouble"
+  c_copyCudaDouble :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_copyCuda :  state self src -> void
+foreign import ccall "THCTensorCopy.h THCudaIntTensor_copyCuda"
+  c_copyCuda :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> IO ()
+
+-- | c_thCopyCuda :  state self src -> void
+foreign import ccall "THCTensorCopy.h THIntTensor_copyCuda"
+  c_thCopyCuda :: Ptr C'THCState -> Ptr C'THIntTensor -> Ptr C'THCudaIntTensor -> IO ()
+
+-- | c_copyCPU :  state self src -> void
+foreign import ccall "THCTensorCopy.h THCudaIntTensor_copyCPU"
+  c_copyCPU :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THIntTensor -> IO ()
+
+-- | c_copyAsyncCPU :  state self src -> void
+foreign import ccall "THCTensorCopy.h THCudaIntTensor_copyAsyncCPU"
+  c_copyAsyncCPU :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THIntTensor -> IO ()
+
+-- | c_thCopyAsyncCuda :  state self src -> void
+foreign import ccall "THCTensorCopy.h THIntTensor_copyAsyncCuda"
+  c_thCopyAsyncCuda :: Ptr C'THCState -> Ptr C'THIntTensor -> Ptr C'THCudaIntTensor -> IO ()
+
+-- | p_copy : Pointer to function : state self src -> void
+foreign import ccall "THCTensorCopy.h &THCudaIntTensor_copy"
+  p_copy :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> IO ())
+
+-- | p_copyIgnoringOverlaps : Pointer to function : state self src -> void
+foreign import ccall "THCTensorCopy.h &THCudaIntTensor_copyIgnoringOverlaps"
+  p_copyIgnoringOverlaps :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> IO ())
+
+-- | p_copyByte : Pointer to function : state self src -> void
+foreign import ccall "THCTensorCopy.h &THCudaIntTensor_copyByte"
+  p_copyByte :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THByteTensor -> IO ())
+
+-- | p_copyChar : Pointer to function : state self src -> void
+foreign import ccall "THCTensorCopy.h &THCudaIntTensor_copyChar"
+  p_copyChar :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCharTensor -> IO ())
+
+-- | p_copyShort : Pointer to function : state self src -> void
+foreign import ccall "THCTensorCopy.h &THCudaIntTensor_copyShort"
+  p_copyShort :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THShortTensor -> IO ())
+
+-- | p_copyInt : Pointer to function : state self src -> void
+foreign import ccall "THCTensorCopy.h &THCudaIntTensor_copyInt"
+  p_copyInt :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THIntTensor -> IO ())
+
+-- | p_copyLong : Pointer to function : state self src -> void
+foreign import ccall "THCTensorCopy.h &THCudaIntTensor_copyLong"
+  p_copyLong :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THLongTensor -> IO ())
+
+-- | p_copyFloat : Pointer to function : state self src -> void
+foreign import ccall "THCTensorCopy.h &THCudaIntTensor_copyFloat"
+  p_copyFloat :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THFloatTensor -> IO ())
+
+-- | p_copyDouble : Pointer to function : state self src -> void
+foreign import ccall "THCTensorCopy.h &THCudaIntTensor_copyDouble"
+  p_copyDouble :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THDoubleTensor -> IO ())
+
+-- | p_copyHalf : Pointer to function : state self src -> void
+foreign import ccall "THCTensorCopy.h &THCudaIntTensor_copyHalf"
+  p_copyHalf :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THHalfTensor -> IO ())
+
+-- | p_copyCudaByte : Pointer to function : state dst src -> void
+foreign import ccall "THCTensorCopy.h &THCudaIntTensor_copyCudaByte"
+  p_copyCudaByte :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaByteTensor -> IO ())
+
+-- | p_copyCudaChar : Pointer to function : state dst src -> void
+foreign import ccall "THCTensorCopy.h &THCudaIntTensor_copyCudaChar"
+  p_copyCudaChar :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaCharTensor -> IO ())
+
+-- | p_copyCudaShort : Pointer to function : state dst src -> void
+foreign import ccall "THCTensorCopy.h &THCudaIntTensor_copyCudaShort"
+  p_copyCudaShort :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaShortTensor -> IO ())
+
+-- | p_copyCudaInt : Pointer to function : state dst src -> void
+foreign import ccall "THCTensorCopy.h &THCudaIntTensor_copyCudaInt"
+  p_copyCudaInt :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> IO ())
+
+-- | p_copyCudaLong : Pointer to function : state dst src -> void
+foreign import ccall "THCTensorCopy.h &THCudaIntTensor_copyCudaLong"
+  p_copyCudaLong :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaLongTensor -> IO ())
+
+-- | p_copyCudaDouble : Pointer to function : state dst src -> void
+foreign import ccall "THCTensorCopy.h &THCudaIntTensor_copyCudaDouble"
+  p_copyCudaDouble :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_copyCuda : Pointer to function : state self src -> void
+foreign import ccall "THCTensorCopy.h &THCudaIntTensor_copyCuda"
+  p_copyCuda :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> IO ())
+
+-- | p_thCopyCuda : Pointer to function : state self src -> void
+foreign import ccall "THCTensorCopy.h &THIntTensor_copyCuda"
+  p_thCopyCuda :: FunPtr (Ptr C'THCState -> Ptr C'THIntTensor -> Ptr C'THCudaIntTensor -> IO ())
+
+-- | p_copyCPU : Pointer to function : state self src -> void
+foreign import ccall "THCTensorCopy.h &THCudaIntTensor_copyCPU"
+  p_copyCPU :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THIntTensor -> IO ())
+
+-- | p_copyAsyncCPU : Pointer to function : state self src -> void
+foreign import ccall "THCTensorCopy.h &THCudaIntTensor_copyAsyncCPU"
+  p_copyAsyncCPU :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THIntTensor -> IO ())
+
+-- | p_thCopyAsyncCuda : Pointer to function : state self src -> void
+foreign import ccall "THCTensorCopy.h &THIntTensor_copyAsyncCuda"
+  p_thCopyAsyncCuda :: FunPtr (Ptr C'THCState -> Ptr C'THIntTensor -> Ptr C'THCudaIntTensor -> IO ())
diff --git a/src/Torch/FFI/THC/Int/TensorIndex.hs b/src/Torch/FFI/THC/Int/TensorIndex.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Int/TensorIndex.hs
@@ -0,0 +1,97 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Int.TensorIndex where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_indexCopy :  state res_ dim indices src -> void
+foreign import ccall "THCTensorIndex.h THCudaIntTensor_indexCopy"
+  c_indexCopy :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> CInt -> Ptr C'THCudaLongTensor -> Ptr C'THCudaIntTensor -> IO ()
+
+-- | c_indexAdd :  state res_ dim indices src -> void
+foreign import ccall "THCTensorIndex.h THCudaIntTensor_indexAdd"
+  c_indexAdd :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> CInt -> Ptr C'THCudaLongTensor -> Ptr C'THCudaIntTensor -> IO ()
+
+-- | c_indexFill :  state tensor dim index val -> void
+foreign import ccall "THCTensorIndex.h THCudaIntTensor_indexFill"
+  c_indexFill :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> CInt -> Ptr C'THCudaLongTensor -> CInt -> IO ()
+
+-- | c_indexSelect :  state tensor src dim index -> void
+foreign import ccall "THCTensorIndex.h THCudaIntTensor_indexSelect"
+  c_indexSelect :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> CInt -> Ptr C'THCudaLongTensor -> IO ()
+
+-- | c_take :  state res_ src index -> void
+foreign import ccall "THCTensorIndex.h THCudaIntTensor_take"
+  c_take :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> Ptr C'THCudaLongTensor -> IO ()
+
+-- | c_put :  state res_ indices src accumulate -> void
+foreign import ccall "THCTensorIndex.h THCudaIntTensor_put"
+  c_put :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaIntTensor -> CInt -> IO ()
+
+-- | c_indexCopy_long :  state res_ dim indices src -> void
+foreign import ccall "THCTensorIndex.h THCudaIntTensor_indexCopy_long"
+  c_indexCopy_long :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> CInt -> Ptr C'THLongTensor -> Ptr C'THCudaIntTensor -> IO ()
+
+-- | c_indexAdd_long :  state res_ dim indices src -> void
+foreign import ccall "THCTensorIndex.h THCudaIntTensor_indexAdd_long"
+  c_indexAdd_long :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> CInt -> Ptr C'THLongTensor -> Ptr C'THCudaIntTensor -> IO ()
+
+-- | c_indexFill_long :  state tensor dim index val -> void
+foreign import ccall "THCTensorIndex.h THCudaIntTensor_indexFill_long"
+  c_indexFill_long :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> CInt -> Ptr C'THLongTensor -> CInt -> IO ()
+
+-- | c_indexSelect_long :  state tensor src dim index -> void
+foreign import ccall "THCTensorIndex.h THCudaIntTensor_indexSelect_long"
+  c_indexSelect_long :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> CInt -> Ptr C'THLongTensor -> IO ()
+
+-- | c_calculateAdvancedIndexingOffsets :  state output indexed baseOffset indexers -> void
+foreign import ccall "THCTensorIndex.h THCudaIntTensor_calculateAdvancedIndexingOffsets"
+  c_calculateAdvancedIndexingOffsets :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaIntTensor -> CPtrdiff -> Ptr (Ptr C'THCudaLongTensor) -> IO ()
+
+-- | p_indexCopy : Pointer to function : state res_ dim indices src -> void
+foreign import ccall "THCTensorIndex.h &THCudaIntTensor_indexCopy"
+  p_indexCopy :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> CInt -> Ptr C'THCudaLongTensor -> Ptr C'THCudaIntTensor -> IO ())
+
+-- | p_indexAdd : Pointer to function : state res_ dim indices src -> void
+foreign import ccall "THCTensorIndex.h &THCudaIntTensor_indexAdd"
+  p_indexAdd :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> CInt -> Ptr C'THCudaLongTensor -> Ptr C'THCudaIntTensor -> IO ())
+
+-- | p_indexFill : Pointer to function : state tensor dim index val -> void
+foreign import ccall "THCTensorIndex.h &THCudaIntTensor_indexFill"
+  p_indexFill :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> CInt -> Ptr C'THCudaLongTensor -> CInt -> IO ())
+
+-- | p_indexSelect : Pointer to function : state tensor src dim index -> void
+foreign import ccall "THCTensorIndex.h &THCudaIntTensor_indexSelect"
+  p_indexSelect :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> CInt -> Ptr C'THCudaLongTensor -> IO ())
+
+-- | p_take : Pointer to function : state res_ src index -> void
+foreign import ccall "THCTensorIndex.h &THCudaIntTensor_take"
+  p_take :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> Ptr C'THCudaLongTensor -> IO ())
+
+-- | p_put : Pointer to function : state res_ indices src accumulate -> void
+foreign import ccall "THCTensorIndex.h &THCudaIntTensor_put"
+  p_put :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaIntTensor -> CInt -> IO ())
+
+-- | p_indexCopy_long : Pointer to function : state res_ dim indices src -> void
+foreign import ccall "THCTensorIndex.h &THCudaIntTensor_indexCopy_long"
+  p_indexCopy_long :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> CInt -> Ptr C'THLongTensor -> Ptr C'THCudaIntTensor -> IO ())
+
+-- | p_indexAdd_long : Pointer to function : state res_ dim indices src -> void
+foreign import ccall "THCTensorIndex.h &THCudaIntTensor_indexAdd_long"
+  p_indexAdd_long :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> CInt -> Ptr C'THLongTensor -> Ptr C'THCudaIntTensor -> IO ())
+
+-- | p_indexFill_long : Pointer to function : state tensor dim index val -> void
+foreign import ccall "THCTensorIndex.h &THCudaIntTensor_indexFill_long"
+  p_indexFill_long :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> CInt -> Ptr C'THLongTensor -> CInt -> IO ())
+
+-- | p_indexSelect_long : Pointer to function : state tensor src dim index -> void
+foreign import ccall "THCTensorIndex.h &THCudaIntTensor_indexSelect_long"
+  p_indexSelect_long :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> CInt -> Ptr C'THLongTensor -> IO ())
+
+-- | p_calculateAdvancedIndexingOffsets : Pointer to function : state output indexed baseOffset indexers -> void
+foreign import ccall "THCTensorIndex.h &THCudaIntTensor_calculateAdvancedIndexingOffsets"
+  p_calculateAdvancedIndexingOffsets :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaIntTensor -> CPtrdiff -> Ptr (Ptr C'THCudaLongTensor) -> IO ())
diff --git a/src/Torch/FFI/THC/Int/TensorMasked.hs b/src/Torch/FFI/THC/Int/TensorMasked.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Int/TensorMasked.hs
@@ -0,0 +1,57 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Int.TensorMasked where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_maskedFill :  state tensor mask value -> void
+foreign import ccall "THCTensorMasked.h THCudaIntTensor_maskedFill"
+  c_maskedFill :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaByteTensor -> CInt -> IO ()
+
+-- | c_maskedFillByte :  state tensor mask value -> void
+foreign import ccall "THCTensorMasked.h THCudaIntTensor_maskedFillByte"
+  c_maskedFillByte :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THByteTensor -> CInt -> IO ()
+
+-- | c_maskedCopy :  state tensor mask src -> void
+foreign import ccall "THCTensorMasked.h THCudaIntTensor_maskedCopy"
+  c_maskedCopy :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaByteTensor -> Ptr C'THCudaIntTensor -> IO ()
+
+-- | c_maskedCopyByte :  state tensor mask src -> void
+foreign import ccall "THCTensorMasked.h THCudaIntTensor_maskedCopyByte"
+  c_maskedCopyByte :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THByteTensor -> Ptr C'THCudaIntTensor -> IO ()
+
+-- | c_maskedSelect :  state tensor src mask -> void
+foreign import ccall "THCTensorMasked.h THCudaIntTensor_maskedSelect"
+  c_maskedSelect :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> Ptr C'THCudaByteTensor -> IO ()
+
+-- | c_maskedSelectByte :  state tensor src mask -> void
+foreign import ccall "THCTensorMasked.h THCudaIntTensor_maskedSelectByte"
+  c_maskedSelectByte :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> Ptr C'THByteTensor -> IO ()
+
+-- | p_maskedFill : Pointer to function : state tensor mask value -> void
+foreign import ccall "THCTensorMasked.h &THCudaIntTensor_maskedFill"
+  p_maskedFill :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaByteTensor -> CInt -> IO ())
+
+-- | p_maskedFillByte : Pointer to function : state tensor mask value -> void
+foreign import ccall "THCTensorMasked.h &THCudaIntTensor_maskedFillByte"
+  p_maskedFillByte :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THByteTensor -> CInt -> IO ())
+
+-- | p_maskedCopy : Pointer to function : state tensor mask src -> void
+foreign import ccall "THCTensorMasked.h &THCudaIntTensor_maskedCopy"
+  p_maskedCopy :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaByteTensor -> Ptr C'THCudaIntTensor -> IO ())
+
+-- | p_maskedCopyByte : Pointer to function : state tensor mask src -> void
+foreign import ccall "THCTensorMasked.h &THCudaIntTensor_maskedCopyByte"
+  p_maskedCopyByte :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THByteTensor -> Ptr C'THCudaIntTensor -> IO ())
+
+-- | p_maskedSelect : Pointer to function : state tensor src mask -> void
+foreign import ccall "THCTensorMasked.h &THCudaIntTensor_maskedSelect"
+  p_maskedSelect :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> Ptr C'THCudaByteTensor -> IO ())
+
+-- | p_maskedSelectByte : Pointer to function : state tensor src mask -> void
+foreign import ccall "THCTensorMasked.h &THCudaIntTensor_maskedSelectByte"
+  p_maskedSelectByte :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> Ptr C'THByteTensor -> IO ())
diff --git a/src/Torch/FFI/THC/Int/TensorMath.hs b/src/Torch/FFI/THC/Int/TensorMath.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Int/TensorMath.hs
@@ -0,0 +1,153 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Int.TensorMath where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_fill :  state self value -> void
+foreign import ccall "THCTensorMath.h THCudaIntTensor_fill"
+  c_fill :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> CInt -> IO ()
+
+-- | c_zero :  state self -> void
+foreign import ccall "THCTensorMath.h THCudaIntTensor_zero"
+  c_zero :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> IO ()
+
+-- | c_zeros :  state r_ size -> void
+foreign import ccall "THCTensorMath.h THCudaIntTensor_zeros"
+  c_zeros :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THLongStorage -> IO ()
+
+-- | c_zerosLike :  state r_ input -> void
+foreign import ccall "THCTensorMath.h THCudaIntTensor_zerosLike"
+  c_zerosLike :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> IO ()
+
+-- | c_ones :  state r_ size -> void
+foreign import ccall "THCTensorMath.h THCudaIntTensor_ones"
+  c_ones :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THLongStorage -> IO ()
+
+-- | c_onesLike :  state r_ input -> void
+foreign import ccall "THCTensorMath.h THCudaIntTensor_onesLike"
+  c_onesLike :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> IO ()
+
+-- | c_reshape :  state r_ t size -> void
+foreign import ccall "THCTensorMath.h THCudaIntTensor_reshape"
+  c_reshape :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> Ptr C'THLongStorage -> IO ()
+
+-- | c_numel :  state t -> ptrdiff_t
+foreign import ccall "THCTensorMath.h THCudaIntTensor_numel"
+  c_numel :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> IO CPtrdiff
+
+-- | c_cat :  state result ta tb dimension -> void
+foreign import ccall "THCTensorMath.h THCudaIntTensor_cat"
+  c_cat :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> CInt -> IO ()
+
+-- | c_catArray :  state result inputs numInputs dimension -> void
+foreign import ccall "THCTensorMath.h THCudaIntTensor_catArray"
+  c_catArray :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr (Ptr C'THCudaIntTensor) -> CInt -> CInt -> IO ()
+
+-- | c_nonzero :  state tensor self -> void
+foreign import ccall "THCTensorMath.h THCudaIntTensor_nonzero"
+  c_nonzero :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaIntTensor -> IO ()
+
+-- | c_tril :  state self src k -> void
+foreign import ccall "THCTensorMath.h THCudaIntTensor_tril"
+  c_tril :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> CLLong -> IO ()
+
+-- | c_triu :  state self src k -> void
+foreign import ccall "THCTensorMath.h THCudaIntTensor_triu"
+  c_triu :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> CLLong -> IO ()
+
+-- | c_diag :  state self src k -> void
+foreign import ccall "THCTensorMath.h THCudaIntTensor_diag"
+  c_diag :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> CLLong -> IO ()
+
+-- | c_eye :  state self n k -> void
+foreign import ccall "THCTensorMath.h THCudaIntTensor_eye"
+  c_eye :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> CLLong -> CLLong -> IO ()
+
+-- | c_trace :  state self -> accreal
+foreign import ccall "THCTensorMath.h THCudaIntTensor_trace"
+  c_trace :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> IO CLong
+
+-- | c_range :  state r_ xmin xmax step -> void
+foreign import ccall "THCTensorMath.h THCudaIntTensor_range"
+  c_range :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> CLong -> CLong -> CLong -> IO ()
+
+-- | c_arange :  state r_ xmin xmax step -> void
+foreign import ccall "THCTensorMath.h THCudaIntTensor_arange"
+  c_arange :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> CLong -> CLong -> CLong -> IO ()
+
+-- | p_fill : Pointer to function : state self value -> void
+foreign import ccall "THCTensorMath.h &THCudaIntTensor_fill"
+  p_fill :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> CInt -> IO ())
+
+-- | p_zero : Pointer to function : state self -> void
+foreign import ccall "THCTensorMath.h &THCudaIntTensor_zero"
+  p_zero :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> IO ())
+
+-- | p_zeros : Pointer to function : state r_ size -> void
+foreign import ccall "THCTensorMath.h &THCudaIntTensor_zeros"
+  p_zeros :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THLongStorage -> IO ())
+
+-- | p_zerosLike : Pointer to function : state r_ input -> void
+foreign import ccall "THCTensorMath.h &THCudaIntTensor_zerosLike"
+  p_zerosLike :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> IO ())
+
+-- | p_ones : Pointer to function : state r_ size -> void
+foreign import ccall "THCTensorMath.h &THCudaIntTensor_ones"
+  p_ones :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THLongStorage -> IO ())
+
+-- | p_onesLike : Pointer to function : state r_ input -> void
+foreign import ccall "THCTensorMath.h &THCudaIntTensor_onesLike"
+  p_onesLike :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> IO ())
+
+-- | p_reshape : Pointer to function : state r_ t size -> void
+foreign import ccall "THCTensorMath.h &THCudaIntTensor_reshape"
+  p_reshape :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> Ptr C'THLongStorage -> IO ())
+
+-- | p_numel : Pointer to function : state t -> ptrdiff_t
+foreign import ccall "THCTensorMath.h &THCudaIntTensor_numel"
+  p_numel :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> IO CPtrdiff)
+
+-- | p_cat : Pointer to function : state result ta tb dimension -> void
+foreign import ccall "THCTensorMath.h &THCudaIntTensor_cat"
+  p_cat :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> CInt -> IO ())
+
+-- | p_catArray : Pointer to function : state result inputs numInputs dimension -> void
+foreign import ccall "THCTensorMath.h &THCudaIntTensor_catArray"
+  p_catArray :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr (Ptr C'THCudaIntTensor) -> CInt -> CInt -> IO ())
+
+-- | p_nonzero : Pointer to function : state tensor self -> void
+foreign import ccall "THCTensorMath.h &THCudaIntTensor_nonzero"
+  p_nonzero :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaIntTensor -> IO ())
+
+-- | p_tril : Pointer to function : state self src k -> void
+foreign import ccall "THCTensorMath.h &THCudaIntTensor_tril"
+  p_tril :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> CLLong -> IO ())
+
+-- | p_triu : Pointer to function : state self src k -> void
+foreign import ccall "THCTensorMath.h &THCudaIntTensor_triu"
+  p_triu :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> CLLong -> IO ())
+
+-- | p_diag : Pointer to function : state self src k -> void
+foreign import ccall "THCTensorMath.h &THCudaIntTensor_diag"
+  p_diag :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> CLLong -> IO ())
+
+-- | p_eye : Pointer to function : state self n k -> void
+foreign import ccall "THCTensorMath.h &THCudaIntTensor_eye"
+  p_eye :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> CLLong -> CLLong -> IO ())
+
+-- | p_trace : Pointer to function : state self -> accreal
+foreign import ccall "THCTensorMath.h &THCudaIntTensor_trace"
+  p_trace :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> IO CLong)
+
+-- | p_range : Pointer to function : state r_ xmin xmax step -> void
+foreign import ccall "THCTensorMath.h &THCudaIntTensor_range"
+  p_range :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> CLong -> CLong -> CLong -> IO ())
+
+-- | p_arange : Pointer to function : state r_ xmin xmax step -> void
+foreign import ccall "THCTensorMath.h &THCudaIntTensor_arange"
+  p_arange :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> CLong -> CLong -> CLong -> IO ())
diff --git a/src/Torch/FFI/THC/Int/TensorMathCompare.hs b/src/Torch/FFI/THC/Int/TensorMathCompare.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Int/TensorMathCompare.hs
@@ -0,0 +1,105 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Int.TensorMathCompare where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_ltValue :  state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h THCudaIntTensor_ltValue"
+  c_ltValue :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaIntTensor -> CInt -> IO ()
+
+-- | c_gtValue :  state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h THCudaIntTensor_gtValue"
+  c_gtValue :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaIntTensor -> CInt -> IO ()
+
+-- | c_leValue :  state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h THCudaIntTensor_leValue"
+  c_leValue :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaIntTensor -> CInt -> IO ()
+
+-- | c_geValue :  state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h THCudaIntTensor_geValue"
+  c_geValue :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaIntTensor -> CInt -> IO ()
+
+-- | c_eqValue :  state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h THCudaIntTensor_eqValue"
+  c_eqValue :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaIntTensor -> CInt -> IO ()
+
+-- | c_neValue :  state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h THCudaIntTensor_neValue"
+  c_neValue :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaIntTensor -> CInt -> IO ()
+
+-- | c_ltValueT :  state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h THCudaIntTensor_ltValueT"
+  c_ltValueT :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> CInt -> IO ()
+
+-- | c_gtValueT :  state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h THCudaIntTensor_gtValueT"
+  c_gtValueT :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> CInt -> IO ()
+
+-- | c_leValueT :  state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h THCudaIntTensor_leValueT"
+  c_leValueT :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> CInt -> IO ()
+
+-- | c_geValueT :  state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h THCudaIntTensor_geValueT"
+  c_geValueT :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> CInt -> IO ()
+
+-- | c_eqValueT :  state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h THCudaIntTensor_eqValueT"
+  c_eqValueT :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> CInt -> IO ()
+
+-- | c_neValueT :  state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h THCudaIntTensor_neValueT"
+  c_neValueT :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> CInt -> IO ()
+
+-- | p_ltValue : Pointer to function : state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h &THCudaIntTensor_ltValue"
+  p_ltValue :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaIntTensor -> CInt -> IO ())
+
+-- | p_gtValue : Pointer to function : state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h &THCudaIntTensor_gtValue"
+  p_gtValue :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaIntTensor -> CInt -> IO ())
+
+-- | p_leValue : Pointer to function : state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h &THCudaIntTensor_leValue"
+  p_leValue :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaIntTensor -> CInt -> IO ())
+
+-- | p_geValue : Pointer to function : state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h &THCudaIntTensor_geValue"
+  p_geValue :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaIntTensor -> CInt -> IO ())
+
+-- | p_eqValue : Pointer to function : state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h &THCudaIntTensor_eqValue"
+  p_eqValue :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaIntTensor -> CInt -> IO ())
+
+-- | p_neValue : Pointer to function : state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h &THCudaIntTensor_neValue"
+  p_neValue :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaIntTensor -> CInt -> IO ())
+
+-- | p_ltValueT : Pointer to function : state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h &THCudaIntTensor_ltValueT"
+  p_ltValueT :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> CInt -> IO ())
+
+-- | p_gtValueT : Pointer to function : state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h &THCudaIntTensor_gtValueT"
+  p_gtValueT :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> CInt -> IO ())
+
+-- | p_leValueT : Pointer to function : state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h &THCudaIntTensor_leValueT"
+  p_leValueT :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> CInt -> IO ())
+
+-- | p_geValueT : Pointer to function : state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h &THCudaIntTensor_geValueT"
+  p_geValueT :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> CInt -> IO ())
+
+-- | p_eqValueT : Pointer to function : state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h &THCudaIntTensor_eqValueT"
+  p_eqValueT :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> CInt -> IO ())
+
+-- | p_neValueT : Pointer to function : state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h &THCudaIntTensor_neValueT"
+  p_neValueT :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> CInt -> IO ())
diff --git a/src/Torch/FFI/THC/Int/TensorMathCompareT.hs b/src/Torch/FFI/THC/Int/TensorMathCompareT.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Int/TensorMathCompareT.hs
@@ -0,0 +1,105 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Int.TensorMathCompareT where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_ltTensor :  state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h THCudaIntTensor_ltTensor"
+  c_ltTensor :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> IO ()
+
+-- | c_gtTensor :  state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h THCudaIntTensor_gtTensor"
+  c_gtTensor :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> IO ()
+
+-- | c_leTensor :  state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h THCudaIntTensor_leTensor"
+  c_leTensor :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> IO ()
+
+-- | c_geTensor :  state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h THCudaIntTensor_geTensor"
+  c_geTensor :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> IO ()
+
+-- | c_eqTensor :  state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h THCudaIntTensor_eqTensor"
+  c_eqTensor :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> IO ()
+
+-- | c_neTensor :  state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h THCudaIntTensor_neTensor"
+  c_neTensor :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> IO ()
+
+-- | c_ltTensorT :  state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h THCudaIntTensor_ltTensorT"
+  c_ltTensorT :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> IO ()
+
+-- | c_gtTensorT :  state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h THCudaIntTensor_gtTensorT"
+  c_gtTensorT :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> IO ()
+
+-- | c_leTensorT :  state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h THCudaIntTensor_leTensorT"
+  c_leTensorT :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> IO ()
+
+-- | c_geTensorT :  state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h THCudaIntTensor_geTensorT"
+  c_geTensorT :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> IO ()
+
+-- | c_eqTensorT :  state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h THCudaIntTensor_eqTensorT"
+  c_eqTensorT :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> IO ()
+
+-- | c_neTensorT :  state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h THCudaIntTensor_neTensorT"
+  c_neTensorT :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> IO ()
+
+-- | p_ltTensor : Pointer to function : state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h &THCudaIntTensor_ltTensor"
+  p_ltTensor :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> IO ())
+
+-- | p_gtTensor : Pointer to function : state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h &THCudaIntTensor_gtTensor"
+  p_gtTensor :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> IO ())
+
+-- | p_leTensor : Pointer to function : state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h &THCudaIntTensor_leTensor"
+  p_leTensor :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> IO ())
+
+-- | p_geTensor : Pointer to function : state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h &THCudaIntTensor_geTensor"
+  p_geTensor :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> IO ())
+
+-- | p_eqTensor : Pointer to function : state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h &THCudaIntTensor_eqTensor"
+  p_eqTensor :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> IO ())
+
+-- | p_neTensor : Pointer to function : state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h &THCudaIntTensor_neTensor"
+  p_neTensor :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> IO ())
+
+-- | p_ltTensorT : Pointer to function : state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h &THCudaIntTensor_ltTensorT"
+  p_ltTensorT :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> IO ())
+
+-- | p_gtTensorT : Pointer to function : state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h &THCudaIntTensor_gtTensorT"
+  p_gtTensorT :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> IO ())
+
+-- | p_leTensorT : Pointer to function : state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h &THCudaIntTensor_leTensorT"
+  p_leTensorT :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> IO ())
+
+-- | p_geTensorT : Pointer to function : state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h &THCudaIntTensor_geTensorT"
+  p_geTensorT :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> IO ())
+
+-- | p_eqTensorT : Pointer to function : state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h &THCudaIntTensor_eqTensorT"
+  p_eqTensorT :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> IO ())
+
+-- | p_neTensorT : Pointer to function : state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h &THCudaIntTensor_neTensorT"
+  p_neTensorT :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> IO ())
diff --git a/src/Torch/FFI/THC/Int/TensorMathPairwise.hs b/src/Torch/FFI/THC/Int/TensorMathPairwise.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Int/TensorMathPairwise.hs
@@ -0,0 +1,121 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Int.TensorMathPairwise where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_add :  state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h THCudaIntTensor_add"
+  c_add :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> CInt -> IO ()
+
+-- | c_sub :  state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h THCudaIntTensor_sub"
+  c_sub :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> CInt -> IO ()
+
+-- | c_add_scaled :  state self src value alpha -> void
+foreign import ccall "THCTensorMathPairwise.h THCudaIntTensor_add_scaled"
+  c_add_scaled :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> CInt -> CInt -> IO ()
+
+-- | c_sub_scaled :  state self src value alpha -> void
+foreign import ccall "THCTensorMathPairwise.h THCudaIntTensor_sub_scaled"
+  c_sub_scaled :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> CInt -> CInt -> IO ()
+
+-- | c_mul :  state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h THCudaIntTensor_mul"
+  c_mul :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> CInt -> IO ()
+
+-- | c_div :  state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h THCudaIntTensor_div"
+  c_div :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> CInt -> IO ()
+
+-- | c_lshift :  state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h THCudaIntTensor_lshift"
+  c_lshift :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> CInt -> IO ()
+
+-- | c_rshift :  state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h THCudaIntTensor_rshift"
+  c_rshift :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> CInt -> IO ()
+
+-- | c_fmod :  state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h THCudaIntTensor_fmod"
+  c_fmod :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> CInt -> IO ()
+
+-- | c_remainder :  state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h THCudaIntTensor_remainder"
+  c_remainder :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> CInt -> IO ()
+
+-- | c_bitand :  state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h THCudaIntTensor_bitand"
+  c_bitand :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> CInt -> IO ()
+
+-- | c_bitor :  state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h THCudaIntTensor_bitor"
+  c_bitor :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> CInt -> IO ()
+
+-- | c_bitxor :  state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h THCudaIntTensor_bitxor"
+  c_bitxor :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> CInt -> IO ()
+
+-- | c_equal :  state self src -> int
+foreign import ccall "THCTensorMathPairwise.h THCudaIntTensor_equal"
+  c_equal :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> IO CInt
+
+-- | p_add : Pointer to function : state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h &THCudaIntTensor_add"
+  p_add :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> CInt -> IO ())
+
+-- | p_sub : Pointer to function : state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h &THCudaIntTensor_sub"
+  p_sub :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> CInt -> IO ())
+
+-- | p_add_scaled : Pointer to function : state self src value alpha -> void
+foreign import ccall "THCTensorMathPairwise.h &THCudaIntTensor_add_scaled"
+  p_add_scaled :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> CInt -> CInt -> IO ())
+
+-- | p_sub_scaled : Pointer to function : state self src value alpha -> void
+foreign import ccall "THCTensorMathPairwise.h &THCudaIntTensor_sub_scaled"
+  p_sub_scaled :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> CInt -> CInt -> IO ())
+
+-- | p_mul : Pointer to function : state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h &THCudaIntTensor_mul"
+  p_mul :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> CInt -> IO ())
+
+-- | p_div : Pointer to function : state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h &THCudaIntTensor_div"
+  p_div :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> CInt -> IO ())
+
+-- | p_lshift : Pointer to function : state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h &THCudaIntTensor_lshift"
+  p_lshift :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> CInt -> IO ())
+
+-- | p_rshift : Pointer to function : state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h &THCudaIntTensor_rshift"
+  p_rshift :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> CInt -> IO ())
+
+-- | p_fmod : Pointer to function : state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h &THCudaIntTensor_fmod"
+  p_fmod :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> CInt -> IO ())
+
+-- | p_remainder : Pointer to function : state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h &THCudaIntTensor_remainder"
+  p_remainder :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> CInt -> IO ())
+
+-- | p_bitand : Pointer to function : state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h &THCudaIntTensor_bitand"
+  p_bitand :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> CInt -> IO ())
+
+-- | p_bitor : Pointer to function : state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h &THCudaIntTensor_bitor"
+  p_bitor :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> CInt -> IO ())
+
+-- | p_bitxor : Pointer to function : state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h &THCudaIntTensor_bitxor"
+  p_bitxor :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> CInt -> IO ())
+
+-- | p_equal : Pointer to function : state self src -> int
+foreign import ccall "THCTensorMathPairwise.h &THCudaIntTensor_equal"
+  p_equal :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> IO CInt)
diff --git a/src/Torch/FFI/THC/Int/TensorMathPointwise.hs b/src/Torch/FFI/THC/Int/TensorMathPointwise.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Int/TensorMathPointwise.hs
@@ -0,0 +1,193 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Int.TensorMathPointwise where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_neg :  state self src -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaIntTensor_neg"
+  c_neg :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> IO ()
+
+-- | c_abs :  state self src -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaIntTensor_abs"
+  c_abs :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> IO ()
+
+-- | c_sign :  state self src -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaIntTensor_sign"
+  c_sign :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> IO ()
+
+-- | c_clamp :  state self src min_value max_value -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaIntTensor_clamp"
+  c_clamp :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> CInt -> CInt -> IO ()
+
+-- | c_cross :  state self src1 src2 dimension -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaIntTensor_cross"
+  c_cross :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> CInt -> IO ()
+
+-- | c_cadd :  state self src1 value src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaIntTensor_cadd"
+  c_cadd :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> CInt -> Ptr C'THCudaIntTensor -> IO ()
+
+-- | c_csub :  state self src1 value src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaIntTensor_csub"
+  c_csub :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> CInt -> Ptr C'THCudaIntTensor -> IO ()
+
+-- | c_cmul :  state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaIntTensor_cmul"
+  c_cmul :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> IO ()
+
+-- | c_cpow :  state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaIntTensor_cpow"
+  c_cpow :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> IO ()
+
+-- | c_cdiv :  state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaIntTensor_cdiv"
+  c_cdiv :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> IO ()
+
+-- | c_clshift :  state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaIntTensor_clshift"
+  c_clshift :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> IO ()
+
+-- | c_crshift :  state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaIntTensor_crshift"
+  c_crshift :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> IO ()
+
+-- | c_cmax :  state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaIntTensor_cmax"
+  c_cmax :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> IO ()
+
+-- | c_cmin :  state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaIntTensor_cmin"
+  c_cmin :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> IO ()
+
+-- | c_cfmod :  state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaIntTensor_cfmod"
+  c_cfmod :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> IO ()
+
+-- | c_cremainder :  state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaIntTensor_cremainder"
+  c_cremainder :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> IO ()
+
+-- | c_cmaxValue :  state self src value -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaIntTensor_cmaxValue"
+  c_cmaxValue :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> CInt -> IO ()
+
+-- | c_cminValue :  state self src value -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaIntTensor_cminValue"
+  c_cminValue :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> CInt -> IO ()
+
+-- | c_cbitand :  state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaIntTensor_cbitand"
+  c_cbitand :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> IO ()
+
+-- | c_cbitor :  state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaIntTensor_cbitor"
+  c_cbitor :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> IO ()
+
+-- | c_cbitxor :  state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaIntTensor_cbitxor"
+  c_cbitxor :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> IO ()
+
+-- | c_addcmul :  state self t value src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaIntTensor_addcmul"
+  c_addcmul :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> CInt -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> IO ()
+
+-- | c_addcdiv :  state self t value src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaIntTensor_addcdiv"
+  c_addcdiv :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> CInt -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> IO ()
+
+-- | p_neg : Pointer to function : state self src -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaIntTensor_neg"
+  p_neg :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> IO ())
+
+-- | p_abs : Pointer to function : state self src -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaIntTensor_abs"
+  p_abs :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> IO ())
+
+-- | p_sign : Pointer to function : state self src -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaIntTensor_sign"
+  p_sign :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> IO ())
+
+-- | p_clamp : Pointer to function : state self src min_value max_value -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaIntTensor_clamp"
+  p_clamp :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> CInt -> CInt -> IO ())
+
+-- | p_cross : Pointer to function : state self src1 src2 dimension -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaIntTensor_cross"
+  p_cross :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> CInt -> IO ())
+
+-- | p_cadd : Pointer to function : state self src1 value src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaIntTensor_cadd"
+  p_cadd :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> CInt -> Ptr C'THCudaIntTensor -> IO ())
+
+-- | p_csub : Pointer to function : state self src1 value src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaIntTensor_csub"
+  p_csub :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> CInt -> Ptr C'THCudaIntTensor -> IO ())
+
+-- | p_cmul : Pointer to function : state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaIntTensor_cmul"
+  p_cmul :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> IO ())
+
+-- | p_cpow : Pointer to function : state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaIntTensor_cpow"
+  p_cpow :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> IO ())
+
+-- | p_cdiv : Pointer to function : state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaIntTensor_cdiv"
+  p_cdiv :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> IO ())
+
+-- | p_clshift : Pointer to function : state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaIntTensor_clshift"
+  p_clshift :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> IO ())
+
+-- | p_crshift : Pointer to function : state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaIntTensor_crshift"
+  p_crshift :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> IO ())
+
+-- | p_cmax : Pointer to function : state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaIntTensor_cmax"
+  p_cmax :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> IO ())
+
+-- | p_cmin : Pointer to function : state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaIntTensor_cmin"
+  p_cmin :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> IO ())
+
+-- | p_cfmod : Pointer to function : state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaIntTensor_cfmod"
+  p_cfmod :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> IO ())
+
+-- | p_cremainder : Pointer to function : state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaIntTensor_cremainder"
+  p_cremainder :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> IO ())
+
+-- | p_cmaxValue : Pointer to function : state self src value -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaIntTensor_cmaxValue"
+  p_cmaxValue :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> CInt -> IO ())
+
+-- | p_cminValue : Pointer to function : state self src value -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaIntTensor_cminValue"
+  p_cminValue :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> CInt -> IO ())
+
+-- | p_cbitand : Pointer to function : state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaIntTensor_cbitand"
+  p_cbitand :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> IO ())
+
+-- | p_cbitor : Pointer to function : state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaIntTensor_cbitor"
+  p_cbitor :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> IO ())
+
+-- | p_cbitxor : Pointer to function : state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaIntTensor_cbitxor"
+  p_cbitxor :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> IO ())
+
+-- | p_addcmul : Pointer to function : state self t value src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaIntTensor_addcmul"
+  p_addcmul :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> CInt -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> IO ())
+
+-- | p_addcdiv : Pointer to function : state self t value src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaIntTensor_addcdiv"
+  p_addcdiv :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> CInt -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> IO ())
diff --git a/src/Torch/FFI/THC/Int/TensorMathReduce.hs b/src/Torch/FFI/THC/Int/TensorMathReduce.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Int/TensorMathReduce.hs
@@ -0,0 +1,89 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Int.TensorMathReduce where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_sum :  state self src dim keepdim -> void
+foreign import ccall "THCTensorMathReduce.h THCudaIntTensor_sum"
+  c_sum :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> CInt -> CInt -> IO ()
+
+-- | c_prod :  state self src dim keepdim -> void
+foreign import ccall "THCTensorMathReduce.h THCudaIntTensor_prod"
+  c_prod :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> CInt -> CInt -> IO ()
+
+-- | c_sumall :  state self -> accreal
+foreign import ccall "THCTensorMathReduce.h THCudaIntTensor_sumall"
+  c_sumall :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> IO CLong
+
+-- | c_prodall :  state self -> accreal
+foreign import ccall "THCTensorMathReduce.h THCudaIntTensor_prodall"
+  c_prodall :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> IO CLong
+
+-- | c_min :  state values indices src dim keepdim -> void
+foreign import ccall "THCTensorMathReduce.h THCudaIntTensor_min"
+  c_min :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaIntTensor -> CInt -> CInt -> IO ()
+
+-- | c_max :  state values indices src dim keepdim -> void
+foreign import ccall "THCTensorMathReduce.h THCudaIntTensor_max"
+  c_max :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaIntTensor -> CInt -> CInt -> IO ()
+
+-- | c_minall :  state self -> real
+foreign import ccall "THCTensorMathReduce.h THCudaIntTensor_minall"
+  c_minall :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> IO CInt
+
+-- | c_maxall :  state self -> real
+foreign import ccall "THCTensorMathReduce.h THCudaIntTensor_maxall"
+  c_maxall :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> IO CInt
+
+-- | c_medianall :  state self -> real
+foreign import ccall "THCTensorMathReduce.h THCudaIntTensor_medianall"
+  c_medianall :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> IO CInt
+
+-- | c_median :  state values indices src dim keepdim -> void
+foreign import ccall "THCTensorMathReduce.h THCudaIntTensor_median"
+  c_median :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaIntTensor -> CInt -> CInt -> IO ()
+
+-- | p_sum : Pointer to function : state self src dim keepdim -> void
+foreign import ccall "THCTensorMathReduce.h &THCudaIntTensor_sum"
+  p_sum :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> CInt -> CInt -> IO ())
+
+-- | p_prod : Pointer to function : state self src dim keepdim -> void
+foreign import ccall "THCTensorMathReduce.h &THCudaIntTensor_prod"
+  p_prod :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> CInt -> CInt -> IO ())
+
+-- | p_sumall : Pointer to function : state self -> accreal
+foreign import ccall "THCTensorMathReduce.h &THCudaIntTensor_sumall"
+  p_sumall :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> IO CLong)
+
+-- | p_prodall : Pointer to function : state self -> accreal
+foreign import ccall "THCTensorMathReduce.h &THCudaIntTensor_prodall"
+  p_prodall :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> IO CLong)
+
+-- | p_min : Pointer to function : state values indices src dim keepdim -> void
+foreign import ccall "THCTensorMathReduce.h &THCudaIntTensor_min"
+  p_min :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaIntTensor -> CInt -> CInt -> IO ())
+
+-- | p_max : Pointer to function : state values indices src dim keepdim -> void
+foreign import ccall "THCTensorMathReduce.h &THCudaIntTensor_max"
+  p_max :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaIntTensor -> CInt -> CInt -> IO ())
+
+-- | p_minall : Pointer to function : state self -> real
+foreign import ccall "THCTensorMathReduce.h &THCudaIntTensor_minall"
+  p_minall :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> IO CInt)
+
+-- | p_maxall : Pointer to function : state self -> real
+foreign import ccall "THCTensorMathReduce.h &THCudaIntTensor_maxall"
+  p_maxall :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> IO CInt)
+
+-- | p_medianall : Pointer to function : state self -> real
+foreign import ccall "THCTensorMathReduce.h &THCudaIntTensor_medianall"
+  p_medianall :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> IO CInt)
+
+-- | p_median : Pointer to function : state values indices src dim keepdim -> void
+foreign import ccall "THCTensorMathReduce.h &THCudaIntTensor_median"
+  p_median :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaIntTensor -> CInt -> CInt -> IO ())
diff --git a/src/Torch/FFI/THC/Int/TensorMathScan.hs b/src/Torch/FFI/THC/Int/TensorMathScan.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Int/TensorMathScan.hs
@@ -0,0 +1,25 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Int.TensorMathScan where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_cumsum :  state self src dim -> void
+foreign import ccall "THCTensorMathScan.h THCudaIntTensor_cumsum"
+  c_cumsum :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> CInt -> IO ()
+
+-- | c_cumprod :  state self src dim -> void
+foreign import ccall "THCTensorMathScan.h THCudaIntTensor_cumprod"
+  c_cumprod :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> CInt -> IO ()
+
+-- | p_cumsum : Pointer to function : state self src dim -> void
+foreign import ccall "THCTensorMathScan.h &THCudaIntTensor_cumsum"
+  p_cumsum :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> CInt -> IO ())
+
+-- | p_cumprod : Pointer to function : state self src dim -> void
+foreign import ccall "THCTensorMathScan.h &THCudaIntTensor_cumprod"
+  p_cumprod :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> CInt -> IO ())
diff --git a/src/Torch/FFI/THC/Int/TensorMode.hs b/src/Torch/FFI/THC/Int/TensorMode.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Int/TensorMode.hs
@@ -0,0 +1,17 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Int.TensorMode where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_mode :  state values indices input dimension keepdim -> void
+foreign import ccall "THCTensorMode.h THCudaIntTensor_mode"
+  c_mode :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaIntTensor -> CInt -> CInt -> IO ()
+
+-- | p_mode : Pointer to function : state values indices input dimension keepdim -> void
+foreign import ccall "THCTensorMode.h &THCudaIntTensor_mode"
+  p_mode :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaIntTensor -> CInt -> CInt -> IO ())
diff --git a/src/Torch/FFI/THC/Int/TensorRandom.hs b/src/Torch/FFI/THC/Int/TensorRandom.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Int/TensorRandom.hs
@@ -0,0 +1,57 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Int.TensorRandom where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_random :  state self -> void
+foreign import ccall "THCTensorRandom.h THCudaIntTensor_random"
+  c_random :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> IO ()
+
+-- | c_clampedRandom :  state self min max -> void
+foreign import ccall "THCTensorRandom.h THCudaIntTensor_clampedRandom"
+  c_clampedRandom :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> CLLong -> CLLong -> IO ()
+
+-- | c_cappedRandom :  state self max -> void
+foreign import ccall "THCTensorRandom.h THCudaIntTensor_cappedRandom"
+  c_cappedRandom :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> CLLong -> IO ()
+
+-- | c_bernoulli :  state self p -> void
+foreign import ccall "THCTensorRandom.h THCudaIntTensor_bernoulli"
+  c_bernoulli :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> CDouble -> IO ()
+
+-- | c_bernoulli_DoubleTensor :  state self p -> void
+foreign import ccall "THCTensorRandom.h THCudaIntTensor_bernoulli_DoubleTensor"
+  c_bernoulli_DoubleTensor :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_geometric :  state self p -> void
+foreign import ccall "THCTensorRandom.h THCudaIntTensor_geometric"
+  c_geometric :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> CDouble -> IO ()
+
+-- | p_random : Pointer to function : state self -> void
+foreign import ccall "THCTensorRandom.h &THCudaIntTensor_random"
+  p_random :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> IO ())
+
+-- | p_clampedRandom : Pointer to function : state self min max -> void
+foreign import ccall "THCTensorRandom.h &THCudaIntTensor_clampedRandom"
+  p_clampedRandom :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> CLLong -> CLLong -> IO ())
+
+-- | p_cappedRandom : Pointer to function : state self max -> void
+foreign import ccall "THCTensorRandom.h &THCudaIntTensor_cappedRandom"
+  p_cappedRandom :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> CLLong -> IO ())
+
+-- | p_bernoulli : Pointer to function : state self p -> void
+foreign import ccall "THCTensorRandom.h &THCudaIntTensor_bernoulli"
+  p_bernoulli :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> CDouble -> IO ())
+
+-- | p_bernoulli_DoubleTensor : Pointer to function : state self p -> void
+foreign import ccall "THCTensorRandom.h &THCudaIntTensor_bernoulli_DoubleTensor"
+  p_bernoulli_DoubleTensor :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_geometric : Pointer to function : state self p -> void
+foreign import ccall "THCTensorRandom.h &THCudaIntTensor_geometric"
+  p_geometric :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> CDouble -> IO ())
diff --git a/src/Torch/FFI/THC/Int/TensorScatterGather.hs b/src/Torch/FFI/THC/Int/TensorScatterGather.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Int/TensorScatterGather.hs
@@ -0,0 +1,41 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Int.TensorScatterGather where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_gather :  state tensor src dim index -> void
+foreign import ccall "THCTensorScatterGather.h THCudaIntTensor_gather"
+  c_gather :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> CInt -> Ptr C'THCudaLongTensor -> IO ()
+
+-- | c_scatter :  state tensor dim index src -> void
+foreign import ccall "THCTensorScatterGather.h THCudaIntTensor_scatter"
+  c_scatter :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> CInt -> Ptr C'THCudaLongTensor -> Ptr C'THCudaIntTensor -> IO ()
+
+-- | c_scatterAdd :  state tensor dim index src -> void
+foreign import ccall "THCTensorScatterGather.h THCudaIntTensor_scatterAdd"
+  c_scatterAdd :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> CInt -> Ptr C'THCudaLongTensor -> Ptr C'THCudaIntTensor -> IO ()
+
+-- | c_scatterFill :  state tensor dim index value -> void
+foreign import ccall "THCTensorScatterGather.h THCudaIntTensor_scatterFill"
+  c_scatterFill :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> CInt -> Ptr C'THCudaLongTensor -> CInt -> IO ()
+
+-- | p_gather : Pointer to function : state tensor src dim index -> void
+foreign import ccall "THCTensorScatterGather.h &THCudaIntTensor_gather"
+  p_gather :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaIntTensor -> CInt -> Ptr C'THCudaLongTensor -> IO ())
+
+-- | p_scatter : Pointer to function : state tensor dim index src -> void
+foreign import ccall "THCTensorScatterGather.h &THCudaIntTensor_scatter"
+  p_scatter :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> CInt -> Ptr C'THCudaLongTensor -> Ptr C'THCudaIntTensor -> IO ())
+
+-- | p_scatterAdd : Pointer to function : state tensor dim index src -> void
+foreign import ccall "THCTensorScatterGather.h &THCudaIntTensor_scatterAdd"
+  p_scatterAdd :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> CInt -> Ptr C'THCudaLongTensor -> Ptr C'THCudaIntTensor -> IO ())
+
+-- | p_scatterFill : Pointer to function : state tensor dim index value -> void
+foreign import ccall "THCTensorScatterGather.h &THCudaIntTensor_scatterFill"
+  p_scatterFill :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> CInt -> Ptr C'THCudaLongTensor -> CInt -> IO ())
diff --git a/src/Torch/FFI/THC/Int/TensorSort.hs b/src/Torch/FFI/THC/Int/TensorSort.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Int/TensorSort.hs
@@ -0,0 +1,25 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Int.TensorSort where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_sortKeyValueInplace :  state keys values dim order -> void
+foreign import ccall "THCTensorSort.h THCudaIntTensor_sortKeyValueInplace"
+  c_sortKeyValueInplace :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaLongTensor -> CInt -> CInt -> IO ()
+
+-- | c_sort :  state sorted indices input dim order -> void
+foreign import ccall "THCTensorSort.h THCudaIntTensor_sort"
+  c_sort :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaIntTensor -> CInt -> CInt -> IO ()
+
+-- | p_sortKeyValueInplace : Pointer to function : state keys values dim order -> void
+foreign import ccall "THCTensorSort.h &THCudaIntTensor_sortKeyValueInplace"
+  p_sortKeyValueInplace :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaLongTensor -> CInt -> CInt -> IO ())
+
+-- | p_sort : Pointer to function : state sorted indices input dim order -> void
+foreign import ccall "THCTensorSort.h &THCudaIntTensor_sort"
+  p_sort :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaIntTensor -> CInt -> CInt -> IO ())
diff --git a/src/Torch/FFI/THC/Int/TensorTopK.hs b/src/Torch/FFI/THC/Int/TensorTopK.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Int/TensorTopK.hs
@@ -0,0 +1,17 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Int.TensorTopK where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_topk :  state topK indices input k dim dir sorted -> void
+foreign import ccall "THCTensorTopK.h THCudaIntTensor_topk"
+  c_topk :: Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaIntTensor -> CLLong -> CInt -> CInt -> CInt -> IO ()
+
+-- | p_topk : Pointer to function : state topK indices input k dim dir sorted -> void
+foreign import ccall "THCTensorTopK.h &THCudaIntTensor_topk"
+  p_topk :: FunPtr (Ptr C'THCState -> Ptr C'THCudaIntTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaIntTensor -> CLLong -> CInt -> CInt -> CInt -> IO ())
diff --git a/src/Torch/FFI/THC/Long/Storage.hs b/src/Torch/FFI/THC/Long/Storage.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Long/Storage.hs
@@ -0,0 +1,161 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Long.Storage where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_data :  state  -> real *
+foreign import ccall "THCStorage.h THCudaLongStorage_data"
+  c_data :: Ptr C'THCState -> Ptr C'THCLongStorage -> IO (Ptr CLong)
+
+-- | c_size :  state  -> ptrdiff_t
+foreign import ccall "THCStorage.h THCudaLongStorage_size"
+  c_size :: Ptr C'THCState -> Ptr C'THCLongStorage -> IO CPtrdiff
+
+-- | c_set :  state    -> void
+foreign import ccall "THCStorage.h THCudaLongStorage_set"
+  c_set :: Ptr C'THCState -> Ptr C'THCLongStorage -> CPtrdiff -> CLong -> IO ()
+
+-- | c_get :  state   -> real
+foreign import ccall "THCStorage.h THCudaLongStorage_get"
+  c_get :: Ptr C'THCState -> Ptr C'THCLongStorage -> CPtrdiff -> IO CLong
+
+-- | c_new :  state -> THCStorage *
+foreign import ccall "THCStorage.h THCudaLongStorage_new"
+  c_new :: Ptr C'THCState -> IO (Ptr C'THCLongStorage)
+
+-- | c_newWithSize :  state size -> THCStorage *
+foreign import ccall "THCStorage.h THCudaLongStorage_newWithSize"
+  c_newWithSize :: Ptr C'THCState -> CPtrdiff -> IO (Ptr C'THCLongStorage)
+
+-- | c_newWithSize1 :  state  -> THCStorage *
+foreign import ccall "THCStorage.h THCudaLongStorage_newWithSize1"
+  c_newWithSize1 :: Ptr C'THCState -> CLong -> IO (Ptr C'THCLongStorage)
+
+-- | c_newWithSize2 :  state   -> THCStorage *
+foreign import ccall "THCStorage.h THCudaLongStorage_newWithSize2"
+  c_newWithSize2 :: Ptr C'THCState -> CLong -> CLong -> IO (Ptr C'THCLongStorage)
+
+-- | c_newWithSize3 :  state    -> THCStorage *
+foreign import ccall "THCStorage.h THCudaLongStorage_newWithSize3"
+  c_newWithSize3 :: Ptr C'THCState -> CLong -> CLong -> CLong -> IO (Ptr C'THCLongStorage)
+
+-- | c_newWithSize4 :  state     -> THCStorage *
+foreign import ccall "THCStorage.h THCudaLongStorage_newWithSize4"
+  c_newWithSize4 :: Ptr C'THCState -> CLong -> CLong -> CLong -> CLong -> IO (Ptr C'THCLongStorage)
+
+-- | c_newWithMapping :  state filename size shared -> THCStorage *
+foreign import ccall "THCStorage.h THCudaLongStorage_newWithMapping"
+  c_newWithMapping :: Ptr C'THCState -> Ptr CChar -> CPtrdiff -> CInt -> IO (Ptr C'THCLongStorage)
+
+-- | c_newWithData :  state data size -> THCStorage *
+foreign import ccall "THCStorage.h THCudaLongStorage_newWithData"
+  c_newWithData :: Ptr C'THCState -> Ptr CLong -> CPtrdiff -> IO (Ptr C'THCLongStorage)
+
+-- | c_setFlag :  state storage flag -> void
+foreign import ccall "THCStorage.h THCudaLongStorage_setFlag"
+  c_setFlag :: Ptr C'THCState -> Ptr C'THCLongStorage -> CChar -> IO ()
+
+-- | c_clearFlag :  state storage flag -> void
+foreign import ccall "THCStorage.h THCudaLongStorage_clearFlag"
+  c_clearFlag :: Ptr C'THCState -> Ptr C'THCLongStorage -> CChar -> IO ()
+
+-- | c_retain :  state storage -> void
+foreign import ccall "THCStorage.h THCudaLongStorage_retain"
+  c_retain :: Ptr C'THCState -> Ptr C'THCLongStorage -> IO ()
+
+-- | c_free :  state storage -> void
+foreign import ccall "THCStorage.h THCudaLongStorage_free"
+  c_free :: Ptr C'THCState -> Ptr C'THCLongStorage -> IO ()
+
+-- | c_resize :  state storage size -> void
+foreign import ccall "THCStorage.h THCudaLongStorage_resize"
+  c_resize :: Ptr C'THCState -> Ptr C'THCLongStorage -> CPtrdiff -> IO ()
+
+-- | c_fill :  state storage value -> void
+foreign import ccall "THCStorage.h THCudaLongStorage_fill"
+  c_fill :: Ptr C'THCState -> Ptr C'THCLongStorage -> CLong -> IO ()
+
+-- | c_getDevice :  state storage -> int
+foreign import ccall "THCStorage.h THCudaLongStorage_getDevice"
+  c_getDevice :: Ptr C'THCState -> Ptr C'THCLongStorage -> IO CInt
+
+-- | p_data : Pointer to function : state  -> real *
+foreign import ccall "THCStorage.h &THCudaLongStorage_data"
+  p_data :: FunPtr (Ptr C'THCState -> Ptr C'THCLongStorage -> IO (Ptr CLong))
+
+-- | p_size : Pointer to function : state  -> ptrdiff_t
+foreign import ccall "THCStorage.h &THCudaLongStorage_size"
+  p_size :: FunPtr (Ptr C'THCState -> Ptr C'THCLongStorage -> IO CPtrdiff)
+
+-- | p_set : Pointer to function : state    -> void
+foreign import ccall "THCStorage.h &THCudaLongStorage_set"
+  p_set :: FunPtr (Ptr C'THCState -> Ptr C'THCLongStorage -> CPtrdiff -> CLong -> IO ())
+
+-- | p_get : Pointer to function : state   -> real
+foreign import ccall "THCStorage.h &THCudaLongStorage_get"
+  p_get :: FunPtr (Ptr C'THCState -> Ptr C'THCLongStorage -> CPtrdiff -> IO CLong)
+
+-- | p_new : Pointer to function : state -> THCStorage *
+foreign import ccall "THCStorage.h &THCudaLongStorage_new"
+  p_new :: FunPtr (Ptr C'THCState -> IO (Ptr C'THCLongStorage))
+
+-- | p_newWithSize : Pointer to function : state size -> THCStorage *
+foreign import ccall "THCStorage.h &THCudaLongStorage_newWithSize"
+  p_newWithSize :: FunPtr (Ptr C'THCState -> CPtrdiff -> IO (Ptr C'THCLongStorage))
+
+-- | p_newWithSize1 : Pointer to function : state  -> THCStorage *
+foreign import ccall "THCStorage.h &THCudaLongStorage_newWithSize1"
+  p_newWithSize1 :: FunPtr (Ptr C'THCState -> CLong -> IO (Ptr C'THCLongStorage))
+
+-- | p_newWithSize2 : Pointer to function : state   -> THCStorage *
+foreign import ccall "THCStorage.h &THCudaLongStorage_newWithSize2"
+  p_newWithSize2 :: FunPtr (Ptr C'THCState -> CLong -> CLong -> IO (Ptr C'THCLongStorage))
+
+-- | p_newWithSize3 : Pointer to function : state    -> THCStorage *
+foreign import ccall "THCStorage.h &THCudaLongStorage_newWithSize3"
+  p_newWithSize3 :: FunPtr (Ptr C'THCState -> CLong -> CLong -> CLong -> IO (Ptr C'THCLongStorage))
+
+-- | p_newWithSize4 : Pointer to function : state     -> THCStorage *
+foreign import ccall "THCStorage.h &THCudaLongStorage_newWithSize4"
+  p_newWithSize4 :: FunPtr (Ptr C'THCState -> CLong -> CLong -> CLong -> CLong -> IO (Ptr C'THCLongStorage))
+
+-- | p_newWithMapping : Pointer to function : state filename size shared -> THCStorage *
+foreign import ccall "THCStorage.h &THCudaLongStorage_newWithMapping"
+  p_newWithMapping :: FunPtr (Ptr C'THCState -> Ptr CChar -> CPtrdiff -> CInt -> IO (Ptr C'THCLongStorage))
+
+-- | p_newWithData : Pointer to function : state data size -> THCStorage *
+foreign import ccall "THCStorage.h &THCudaLongStorage_newWithData"
+  p_newWithData :: FunPtr (Ptr C'THCState -> Ptr CLong -> CPtrdiff -> IO (Ptr C'THCLongStorage))
+
+-- | p_setFlag : Pointer to function : state storage flag -> void
+foreign import ccall "THCStorage.h &THCudaLongStorage_setFlag"
+  p_setFlag :: FunPtr (Ptr C'THCState -> Ptr C'THCLongStorage -> CChar -> IO ())
+
+-- | p_clearFlag : Pointer to function : state storage flag -> void
+foreign import ccall "THCStorage.h &THCudaLongStorage_clearFlag"
+  p_clearFlag :: FunPtr (Ptr C'THCState -> Ptr C'THCLongStorage -> CChar -> IO ())
+
+-- | p_retain : Pointer to function : state storage -> void
+foreign import ccall "THCStorage.h &THCudaLongStorage_retain"
+  p_retain :: FunPtr (Ptr C'THCState -> Ptr C'THCLongStorage -> IO ())
+
+-- | p_free : Pointer to function : state storage -> void
+foreign import ccall "THCStorage.h &THCudaLongStorage_free"
+  p_free :: FunPtr (Ptr C'THCState -> Ptr C'THCLongStorage -> IO ())
+
+-- | p_resize : Pointer to function : state storage size -> void
+foreign import ccall "THCStorage.h &THCudaLongStorage_resize"
+  p_resize :: FunPtr (Ptr C'THCState -> Ptr C'THCLongStorage -> CPtrdiff -> IO ())
+
+-- | p_fill : Pointer to function : state storage value -> void
+foreign import ccall "THCStorage.h &THCudaLongStorage_fill"
+  p_fill :: FunPtr (Ptr C'THCState -> Ptr C'THCLongStorage -> CLong -> IO ())
+
+-- | p_getDevice : Pointer to function : state storage -> int
+foreign import ccall "THCStorage.h &THCudaLongStorage_getDevice"
+  p_getDevice :: FunPtr (Ptr C'THCState -> Ptr C'THCLongStorage -> IO CInt)
diff --git a/src/Torch/FFI/THC/Long/StorageCopy.hs b/src/Torch/FFI/THC/Long/StorageCopy.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Long/StorageCopy.hs
@@ -0,0 +1,113 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Long.StorageCopy where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_rawCopy :  state storage src -> void
+foreign import ccall "THCStorageCopy.h THCudaLongStorage_rawCopy"
+  c_rawCopy :: Ptr C'THCState -> Ptr C'THCLongStorage -> Ptr CLong -> IO ()
+
+-- | c_copy :  state storage src -> void
+foreign import ccall "THCStorageCopy.h THCudaLongStorage_copy"
+  c_copy :: Ptr C'THCState -> Ptr C'THCLongStorage -> Ptr C'THCLongStorage -> IO ()
+
+-- | c_copyByte :  state storage src -> void
+foreign import ccall "THCStorageCopy.h THCudaLongStorage_copyByte"
+  c_copyByte :: Ptr C'THCState -> Ptr C'THCLongStorage -> Ptr C'THByteStorage -> IO ()
+
+-- | c_copyChar :  state storage src -> void
+foreign import ccall "THCStorageCopy.h THCudaLongStorage_copyChar"
+  c_copyChar :: Ptr C'THCState -> Ptr C'THCLongStorage -> Ptr C'THCharStorage -> IO ()
+
+-- | c_copyShort :  state storage src -> void
+foreign import ccall "THCStorageCopy.h THCudaLongStorage_copyShort"
+  c_copyShort :: Ptr C'THCState -> Ptr C'THCLongStorage -> Ptr C'THShortStorage -> IO ()
+
+-- | c_copyInt :  state storage src -> void
+foreign import ccall "THCStorageCopy.h THCudaLongStorage_copyInt"
+  c_copyInt :: Ptr C'THCState -> Ptr C'THCLongStorage -> Ptr C'THIntStorage -> IO ()
+
+-- | c_copyLong :  state storage src -> void
+foreign import ccall "THCStorageCopy.h THCudaLongStorage_copyLong"
+  c_copyLong :: Ptr C'THCState -> Ptr C'THCLongStorage -> Ptr C'THLongStorage -> IO ()
+
+-- | c_copyFloat :  state storage src -> void
+foreign import ccall "THCStorageCopy.h THCudaLongStorage_copyFloat"
+  c_copyFloat :: Ptr C'THCState -> Ptr C'THCLongStorage -> Ptr C'THFloatStorage -> IO ()
+
+-- | c_copyDouble :  state storage src -> void
+foreign import ccall "THCStorageCopy.h THCudaLongStorage_copyDouble"
+  c_copyDouble :: Ptr C'THCState -> Ptr C'THCLongStorage -> Ptr C'THDoubleStorage -> IO ()
+
+-- | c_copyHalf :  state storage src -> void
+foreign import ccall "THCStorageCopy.h THCudaLongStorage_copyHalf"
+  c_copyHalf :: Ptr C'THCState -> Ptr C'THCLongStorage -> Ptr C'THHalfStorage -> IO ()
+
+-- | c_thCopyCuda :  state self src -> void
+foreign import ccall "THCStorageCopy.h THLongStorage_copyCuda"
+  c_thCopyCuda :: Ptr C'THCState -> Ptr C'THLongStorage -> Ptr C'THCLongStorage -> IO ()
+
+-- | c_copyCuda :  state self src -> void
+foreign import ccall "THCStorageCopy.h THCudaLongStorage_copyCuda"
+  c_copyCuda :: Ptr C'THCState -> Ptr C'THCLongStorage -> Ptr C'THCLongStorage -> IO ()
+
+-- | c_copyCPU :  state self src -> void
+foreign import ccall "THCStorageCopy.h THCudaLongStorage_copyCPU"
+  c_copyCPU :: Ptr C'THCState -> Ptr C'THCLongStorage -> Ptr C'THLongStorage -> IO ()
+
+-- | p_rawCopy : Pointer to function : state storage src -> void
+foreign import ccall "THCStorageCopy.h &THCudaLongStorage_rawCopy"
+  p_rawCopy :: FunPtr (Ptr C'THCState -> Ptr C'THCLongStorage -> Ptr CLong -> IO ())
+
+-- | p_copy : Pointer to function : state storage src -> void
+foreign import ccall "THCStorageCopy.h &THCudaLongStorage_copy"
+  p_copy :: FunPtr (Ptr C'THCState -> Ptr C'THCLongStorage -> Ptr C'THCLongStorage -> IO ())
+
+-- | p_copyByte : Pointer to function : state storage src -> void
+foreign import ccall "THCStorageCopy.h &THCudaLongStorage_copyByte"
+  p_copyByte :: FunPtr (Ptr C'THCState -> Ptr C'THCLongStorage -> Ptr C'THByteStorage -> IO ())
+
+-- | p_copyChar : Pointer to function : state storage src -> void
+foreign import ccall "THCStorageCopy.h &THCudaLongStorage_copyChar"
+  p_copyChar :: FunPtr (Ptr C'THCState -> Ptr C'THCLongStorage -> Ptr C'THCharStorage -> IO ())
+
+-- | p_copyShort : Pointer to function : state storage src -> void
+foreign import ccall "THCStorageCopy.h &THCudaLongStorage_copyShort"
+  p_copyShort :: FunPtr (Ptr C'THCState -> Ptr C'THCLongStorage -> Ptr C'THShortStorage -> IO ())
+
+-- | p_copyInt : Pointer to function : state storage src -> void
+foreign import ccall "THCStorageCopy.h &THCudaLongStorage_copyInt"
+  p_copyInt :: FunPtr (Ptr C'THCState -> Ptr C'THCLongStorage -> Ptr C'THIntStorage -> IO ())
+
+-- | p_copyLong : Pointer to function : state storage src -> void
+foreign import ccall "THCStorageCopy.h &THCudaLongStorage_copyLong"
+  p_copyLong :: FunPtr (Ptr C'THCState -> Ptr C'THCLongStorage -> Ptr C'THLongStorage -> IO ())
+
+-- | p_copyFloat : Pointer to function : state storage src -> void
+foreign import ccall "THCStorageCopy.h &THCudaLongStorage_copyFloat"
+  p_copyFloat :: FunPtr (Ptr C'THCState -> Ptr C'THCLongStorage -> Ptr C'THFloatStorage -> IO ())
+
+-- | p_copyDouble : Pointer to function : state storage src -> void
+foreign import ccall "THCStorageCopy.h &THCudaLongStorage_copyDouble"
+  p_copyDouble :: FunPtr (Ptr C'THCState -> Ptr C'THCLongStorage -> Ptr C'THDoubleStorage -> IO ())
+
+-- | p_copyHalf : Pointer to function : state storage src -> void
+foreign import ccall "THCStorageCopy.h &THCudaLongStorage_copyHalf"
+  p_copyHalf :: FunPtr (Ptr C'THCState -> Ptr C'THCLongStorage -> Ptr C'THHalfStorage -> IO ())
+
+-- | p_thCopyCuda : Pointer to function : state self src -> void
+foreign import ccall "THCStorageCopy.h &THLongStorage_copyCuda"
+  p_thCopyCuda :: FunPtr (Ptr C'THCState -> Ptr C'THLongStorage -> Ptr C'THCLongStorage -> IO ())
+
+-- | p_copyCuda : Pointer to function : state self src -> void
+foreign import ccall "THCStorageCopy.h &THCudaLongStorage_copyCuda"
+  p_copyCuda :: FunPtr (Ptr C'THCState -> Ptr C'THCLongStorage -> Ptr C'THCLongStorage -> IO ())
+
+-- | p_copyCPU : Pointer to function : state self src -> void
+foreign import ccall "THCStorageCopy.h &THCudaLongStorage_copyCPU"
+  p_copyCPU :: FunPtr (Ptr C'THCState -> Ptr C'THCLongStorage -> Ptr C'THLongStorage -> IO ())
diff --git a/src/Torch/FFI/THC/Long/Tensor.hs b/src/Torch/FFI/THC/Long/Tensor.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Long/Tensor.hs
@@ -0,0 +1,593 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Long.Tensor where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_storage :  state self -> THCStorage *
+foreign import ccall "THCTensor.h THCudaLongTensor_storage"
+  c_storage :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> IO (Ptr C'THCLongStorage)
+
+-- | c_storageOffset :  state self -> ptrdiff_t
+foreign import ccall "THCTensor.h THCudaLongTensor_storageOffset"
+  c_storageOffset :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> IO CPtrdiff
+
+-- | c_nDimension :  state self -> int
+foreign import ccall "THCTensor.h THCudaLongTensor_nDimension"
+  c_nDimension :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> IO CInt
+
+-- | c_size :  state self dim -> int64_t
+foreign import ccall "THCTensor.h THCudaLongTensor_size"
+  c_size :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> CInt -> IO CLLong
+
+-- | c_stride :  state self dim -> int64_t
+foreign import ccall "THCTensor.h THCudaLongTensor_stride"
+  c_stride :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> CInt -> IO CLLong
+
+-- | c_newSizeOf :  state self -> THLongStorage *
+foreign import ccall "THCTensor.h THCudaLongTensor_newSizeOf"
+  c_newSizeOf :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> IO (Ptr C'THLongStorage)
+
+-- | c_newStrideOf :  state self -> THLongStorage *
+foreign import ccall "THCTensor.h THCudaLongTensor_newStrideOf"
+  c_newStrideOf :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> IO (Ptr C'THLongStorage)
+
+-- | c_data :  state self -> real *
+foreign import ccall "THCTensor.h THCudaLongTensor_data"
+  c_data :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> IO (Ptr CLong)
+
+-- | c_setFlag :  state self flag -> void
+foreign import ccall "THCTensor.h THCudaLongTensor_setFlag"
+  c_setFlag :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> CChar -> IO ()
+
+-- | c_clearFlag :  state self flag -> void
+foreign import ccall "THCTensor.h THCudaLongTensor_clearFlag"
+  c_clearFlag :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> CChar -> IO ()
+
+-- | c_new :  state -> THCTensor *
+foreign import ccall "THCTensor.h THCudaLongTensor_new"
+  c_new :: Ptr C'THCState -> IO (Ptr C'THCudaLongTensor)
+
+-- | c_newWithTensor :  state tensor -> THCTensor *
+foreign import ccall "THCTensor.h THCudaLongTensor_newWithTensor"
+  c_newWithTensor :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> IO (Ptr C'THCudaLongTensor)
+
+-- | c_newWithStorage :  state storage_ storageOffset_ size_ stride_ -> THCTensor *
+foreign import ccall "THCTensor.h THCudaLongTensor_newWithStorage"
+  c_newWithStorage :: Ptr C'THCState -> Ptr C'THCLongStorage -> CPtrdiff -> Ptr C'THLongStorage -> Ptr C'THLongStorage -> IO (Ptr C'THCudaLongTensor)
+
+-- | c_newWithStorage1d :  state storage_ storageOffset_ size0_ stride0_ -> THCTensor *
+foreign import ccall "THCTensor.h THCudaLongTensor_newWithStorage1d"
+  c_newWithStorage1d :: Ptr C'THCState -> Ptr C'THCLongStorage -> CPtrdiff -> CLLong -> CLLong -> IO (Ptr C'THCudaLongTensor)
+
+-- | c_newWithStorage2d :  state storage_ storageOffset_ size0_ stride0_ size1_ stride1_ -> THCTensor *
+foreign import ccall "THCTensor.h THCudaLongTensor_newWithStorage2d"
+  c_newWithStorage2d :: Ptr C'THCState -> Ptr C'THCLongStorage -> CPtrdiff -> CLLong -> CLLong -> CLLong -> CLLong -> IO (Ptr C'THCudaLongTensor)
+
+-- | c_newWithStorage3d :  state storage_ storageOffset_ size0_ stride0_ size1_ stride1_ size2_ stride2_ -> THCTensor *
+foreign import ccall "THCTensor.h THCudaLongTensor_newWithStorage3d"
+  c_newWithStorage3d :: Ptr C'THCState -> Ptr C'THCLongStorage -> CPtrdiff -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> IO (Ptr C'THCudaLongTensor)
+
+-- | c_newWithStorage4d :  state storage_ storageOffset_ size0_ stride0_ size1_ stride1_ size2_ stride2_ size3_ stride3_ -> THCTensor *
+foreign import ccall "THCTensor.h THCudaLongTensor_newWithStorage4d"
+  c_newWithStorage4d :: Ptr C'THCState -> Ptr C'THCLongStorage -> CPtrdiff -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> IO (Ptr C'THCudaLongTensor)
+
+-- | c_newWithSize :  state size_ stride_ -> THCTensor *
+foreign import ccall "THCTensor.h THCudaLongTensor_newWithSize"
+  c_newWithSize :: Ptr C'THCState -> Ptr C'THLongStorage -> Ptr C'THLongStorage -> IO (Ptr C'THCudaLongTensor)
+
+-- | c_newWithSize1d :  state size0_ -> THCTensor *
+foreign import ccall "THCTensor.h THCudaLongTensor_newWithSize1d"
+  c_newWithSize1d :: Ptr C'THCState -> CLLong -> IO (Ptr C'THCudaLongTensor)
+
+-- | c_newWithSize2d :  state size0_ size1_ -> THCTensor *
+foreign import ccall "THCTensor.h THCudaLongTensor_newWithSize2d"
+  c_newWithSize2d :: Ptr C'THCState -> CLLong -> CLLong -> IO (Ptr C'THCudaLongTensor)
+
+-- | c_newWithSize3d :  state size0_ size1_ size2_ -> THCTensor *
+foreign import ccall "THCTensor.h THCudaLongTensor_newWithSize3d"
+  c_newWithSize3d :: Ptr C'THCState -> CLLong -> CLLong -> CLLong -> IO (Ptr C'THCudaLongTensor)
+
+-- | c_newWithSize4d :  state size0_ size1_ size2_ size3_ -> THCTensor *
+foreign import ccall "THCTensor.h THCudaLongTensor_newWithSize4d"
+  c_newWithSize4d :: Ptr C'THCState -> CLLong -> CLLong -> CLLong -> CLLong -> IO (Ptr C'THCudaLongTensor)
+
+-- | c_newClone :  state self -> THCTensor *
+foreign import ccall "THCTensor.h THCudaLongTensor_newClone"
+  c_newClone :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> IO (Ptr C'THCudaLongTensor)
+
+-- | c_newContiguous :  state tensor -> THCTensor *
+foreign import ccall "THCTensor.h THCudaLongTensor_newContiguous"
+  c_newContiguous :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> IO (Ptr C'THCudaLongTensor)
+
+-- | c_newSelect :  state tensor dimension_ sliceIndex_ -> THCTensor *
+foreign import ccall "THCTensor.h THCudaLongTensor_newSelect"
+  c_newSelect :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> CInt -> CLLong -> IO (Ptr C'THCudaLongTensor)
+
+-- | c_newNarrow :  state tensor dimension_ firstIndex_ size_ -> THCTensor *
+foreign import ccall "THCTensor.h THCudaLongTensor_newNarrow"
+  c_newNarrow :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> CInt -> CLLong -> CLLong -> IO (Ptr C'THCudaLongTensor)
+
+-- | c_newTranspose :  state tensor dimension1_ dimension2_ -> THCTensor *
+foreign import ccall "THCTensor.h THCudaLongTensor_newTranspose"
+  c_newTranspose :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> CInt -> CInt -> IO (Ptr C'THCudaLongTensor)
+
+-- | c_newUnfold :  state tensor dimension_ size_ step_ -> THCTensor *
+foreign import ccall "THCTensor.h THCudaLongTensor_newUnfold"
+  c_newUnfold :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> CInt -> CLLong -> CLLong -> IO (Ptr C'THCudaLongTensor)
+
+-- | c_newView :  state tensor size -> THCTensor *
+foreign import ccall "THCTensor.h THCudaLongTensor_newView"
+  c_newView :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THLongStorage -> IO (Ptr C'THCudaLongTensor)
+
+-- | c_newFoldBatchDim :  state input -> THCTensor *
+foreign import ccall "THCTensor.h THCudaLongTensor_newFoldBatchDim"
+  c_newFoldBatchDim :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> IO (Ptr C'THCudaLongTensor)
+
+-- | c_newExpand :  state tensor size -> THCTensor *
+foreign import ccall "THCTensor.h THCudaLongTensor_newExpand"
+  c_newExpand :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THLongStorage -> IO (Ptr C'THCudaLongTensor)
+
+-- | c_expand :  state r tensor sizes -> void
+foreign import ccall "THCTensor.h THCudaLongTensor_expand"
+  c_expand :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> Ptr C'THLongStorage -> IO ()
+
+-- | c_expandNd :  state rets ops count -> void
+foreign import ccall "THCTensor.h THCudaLongTensor_expandNd"
+  c_expandNd :: Ptr C'THCState -> Ptr (Ptr C'THCudaLongTensor) -> Ptr (Ptr C'THCudaLongTensor) -> CInt -> IO ()
+
+-- | c_resize :  state tensor size stride -> void
+foreign import ccall "THCTensor.h THCudaLongTensor_resize"
+  c_resize :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THLongStorage -> Ptr C'THLongStorage -> IO ()
+
+-- | c_resizeAs :  state tensor src -> void
+foreign import ccall "THCTensor.h THCudaLongTensor_resizeAs"
+  c_resizeAs :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> IO ()
+
+-- | c_resize1d :  state tensor size0_ -> void
+foreign import ccall "THCTensor.h THCudaLongTensor_resize1d"
+  c_resize1d :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> CLLong -> IO ()
+
+-- | c_resize2d :  state tensor size0_ size1_ -> void
+foreign import ccall "THCTensor.h THCudaLongTensor_resize2d"
+  c_resize2d :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> CLLong -> CLLong -> IO ()
+
+-- | c_resize3d :  state tensor size0_ size1_ size2_ -> void
+foreign import ccall "THCTensor.h THCudaLongTensor_resize3d"
+  c_resize3d :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> CLLong -> CLLong -> CLLong -> IO ()
+
+-- | c_resize4d :  state tensor size0_ size1_ size2_ size3_ -> void
+foreign import ccall "THCTensor.h THCudaLongTensor_resize4d"
+  c_resize4d :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> CLLong -> CLLong -> CLLong -> CLLong -> IO ()
+
+-- | c_resize5d :  state tensor size0_ size1_ size2_ size3_ size4_ -> void
+foreign import ccall "THCTensor.h THCudaLongTensor_resize5d"
+  c_resize5d :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> IO ()
+
+-- | c_resizeNd :  state tensor nDimension size stride -> void
+foreign import ccall "THCTensor.h THCudaLongTensor_resizeNd"
+  c_resizeNd :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> CInt -> Ptr CLLong -> Ptr CLLong -> IO ()
+
+-- | c_set :  state self src -> void
+foreign import ccall "THCTensor.h THCudaLongTensor_set"
+  c_set :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> IO ()
+
+-- | c_setStorage :  state self storage_ storageOffset_ size_ stride_ -> void
+foreign import ccall "THCTensor.h THCudaLongTensor_setStorage"
+  c_setStorage :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCLongStorage -> CPtrdiff -> Ptr C'THLongStorage -> Ptr C'THLongStorage -> IO ()
+
+-- | c_setStorageNd :  state self storage storageOffset nDimension size stride -> void
+foreign import ccall "THCTensor.h THCudaLongTensor_setStorageNd"
+  c_setStorageNd :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCLongStorage -> CPtrdiff -> CInt -> Ptr CLLong -> Ptr CLLong -> IO ()
+
+-- | c_setStorage1d :  state self storage_ storageOffset_ size0_ stride0_ -> void
+foreign import ccall "THCTensor.h THCudaLongTensor_setStorage1d"
+  c_setStorage1d :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCLongStorage -> CPtrdiff -> CLLong -> CLLong -> IO ()
+
+-- | c_setStorage2d :  state self storage_ storageOffset_ size0_ stride0_ size1_ stride1_ -> void
+foreign import ccall "THCTensor.h THCudaLongTensor_setStorage2d"
+  c_setStorage2d :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCLongStorage -> CPtrdiff -> CLLong -> CLLong -> CLLong -> CLLong -> IO ()
+
+-- | c_setStorage3d :  state self storage_ storageOffset_ size0_ stride0_ size1_ stride1_ size2_ stride2_ -> void
+foreign import ccall "THCTensor.h THCudaLongTensor_setStorage3d"
+  c_setStorage3d :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCLongStorage -> CPtrdiff -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> IO ()
+
+-- | c_setStorage4d :  state self storage_ storageOffset_ size0_ stride0_ size1_ stride1_ size2_ stride2_ size3_ stride3_ -> void
+foreign import ccall "THCTensor.h THCudaLongTensor_setStorage4d"
+  c_setStorage4d :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCLongStorage -> CPtrdiff -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> IO ()
+
+-- | c_narrow :  state self src dimension_ firstIndex_ size_ -> void
+foreign import ccall "THCTensor.h THCudaLongTensor_narrow"
+  c_narrow :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> CInt -> CLLong -> CLLong -> IO ()
+
+-- | c_select :  state self src dimension_ sliceIndex_ -> void
+foreign import ccall "THCTensor.h THCudaLongTensor_select"
+  c_select :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> CInt -> CLLong -> IO ()
+
+-- | c_transpose :  state self src dimension1_ dimension2_ -> void
+foreign import ccall "THCTensor.h THCudaLongTensor_transpose"
+  c_transpose :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> CInt -> CInt -> IO ()
+
+-- | c_unfold :  state self src dimension_ size_ step_ -> void
+foreign import ccall "THCTensor.h THCudaLongTensor_unfold"
+  c_unfold :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> CInt -> CLLong -> CLLong -> IO ()
+
+-- | c_squeeze :  state self src -> void
+foreign import ccall "THCTensor.h THCudaLongTensor_squeeze"
+  c_squeeze :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> IO ()
+
+-- | c_squeeze1d :  state self src dimension_ -> void
+foreign import ccall "THCTensor.h THCudaLongTensor_squeeze1d"
+  c_squeeze1d :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> CInt -> IO ()
+
+-- | c_unsqueeze1d :  state self src dimension_ -> void
+foreign import ccall "THCTensor.h THCudaLongTensor_unsqueeze1d"
+  c_unsqueeze1d :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> CInt -> IO ()
+
+-- | c_isContiguous :  state self -> int
+foreign import ccall "THCTensor.h THCudaLongTensor_isContiguous"
+  c_isContiguous :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> IO CInt
+
+-- | c_isSameSizeAs :  state self src -> int
+foreign import ccall "THCTensor.h THCudaLongTensor_isSameSizeAs"
+  c_isSameSizeAs :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> IO CInt
+
+-- | c_isSetTo :  state self src -> int
+foreign import ccall "THCTensor.h THCudaLongTensor_isSetTo"
+  c_isSetTo :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> IO CInt
+
+-- | c_isSize :  state self dims -> int
+foreign import ccall "THCTensor.h THCudaLongTensor_isSize"
+  c_isSize :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THLongStorage -> IO CInt
+
+-- | c_nElement :  state self -> ptrdiff_t
+foreign import ccall "THCTensor.h THCudaLongTensor_nElement"
+  c_nElement :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> IO CPtrdiff
+
+-- | c_retain :  state self -> void
+foreign import ccall "THCTensor.h THCudaLongTensor_retain"
+  c_retain :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> IO ()
+
+-- | c_free :  state self -> void
+foreign import ccall "THCTensor.h THCudaLongTensor_free"
+  c_free :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> IO ()
+
+-- | c_freeCopyTo :  state self dst -> void
+foreign import ccall "THCTensor.h THCudaLongTensor_freeCopyTo"
+  c_freeCopyTo :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> IO ()
+
+-- | c_set1d :  state tensor x0 value -> void
+foreign import ccall "THCTensor.h THCudaLongTensor_set1d"
+  c_set1d :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> CLLong -> CLong -> IO ()
+
+-- | c_set2d :  state tensor x0 x1 value -> void
+foreign import ccall "THCTensor.h THCudaLongTensor_set2d"
+  c_set2d :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> CLLong -> CLLong -> CLong -> IO ()
+
+-- | c_set3d :  state tensor x0 x1 x2 value -> void
+foreign import ccall "THCTensor.h THCudaLongTensor_set3d"
+  c_set3d :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> CLLong -> CLLong -> CLLong -> CLong -> IO ()
+
+-- | c_set4d :  state tensor x0 x1 x2 x3 value -> void
+foreign import ccall "THCTensor.h THCudaLongTensor_set4d"
+  c_set4d :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> CLLong -> CLLong -> CLLong -> CLLong -> CLong -> IO ()
+
+-- | c_get1d :  state tensor x0 -> real
+foreign import ccall "THCTensor.h THCudaLongTensor_get1d"
+  c_get1d :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> CLLong -> IO CLong
+
+-- | c_get2d :  state tensor x0 x1 -> real
+foreign import ccall "THCTensor.h THCudaLongTensor_get2d"
+  c_get2d :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> CLLong -> CLLong -> IO CLong
+
+-- | c_get3d :  state tensor x0 x1 x2 -> real
+foreign import ccall "THCTensor.h THCudaLongTensor_get3d"
+  c_get3d :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> CLLong -> CLLong -> CLLong -> IO CLong
+
+-- | c_get4d :  state tensor x0 x1 x2 x3 -> real
+foreign import ccall "THCTensor.h THCudaLongTensor_get4d"
+  c_get4d :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> CLLong -> CLLong -> CLLong -> CLLong -> IO CLong
+
+-- | c_getDevice :  state self -> int
+foreign import ccall "THCTensor.h THCudaLongTensor_getDevice"
+  c_getDevice :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> IO CInt
+
+-- | c_sizeDesc :  state tensor -> THCDescBuff
+foreign import ccall "THCTensor.h THCudaLongTensor_sizeDesc"
+  c_sizeDesc :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> IO (Ptr C'THCDescBuff)
+
+-- | p_storage : Pointer to function : state self -> THCStorage *
+foreign import ccall "THCTensor.h &THCudaLongTensor_storage"
+  p_storage :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> IO (Ptr C'THCLongStorage))
+
+-- | p_storageOffset : Pointer to function : state self -> ptrdiff_t
+foreign import ccall "THCTensor.h &THCudaLongTensor_storageOffset"
+  p_storageOffset :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> IO CPtrdiff)
+
+-- | p_nDimension : Pointer to function : state self -> int
+foreign import ccall "THCTensor.h &THCudaLongTensor_nDimension"
+  p_nDimension :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> IO CInt)
+
+-- | p_size : Pointer to function : state self dim -> int64_t
+foreign import ccall "THCTensor.h &THCudaLongTensor_size"
+  p_size :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> CInt -> IO CLLong)
+
+-- | p_stride : Pointer to function : state self dim -> int64_t
+foreign import ccall "THCTensor.h &THCudaLongTensor_stride"
+  p_stride :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> CInt -> IO CLLong)
+
+-- | p_newSizeOf : Pointer to function : state self -> THLongStorage *
+foreign import ccall "THCTensor.h &THCudaLongTensor_newSizeOf"
+  p_newSizeOf :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> IO (Ptr C'THLongStorage))
+
+-- | p_newStrideOf : Pointer to function : state self -> THLongStorage *
+foreign import ccall "THCTensor.h &THCudaLongTensor_newStrideOf"
+  p_newStrideOf :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> IO (Ptr C'THLongStorage))
+
+-- | p_data : Pointer to function : state self -> real *
+foreign import ccall "THCTensor.h &THCudaLongTensor_data"
+  p_data :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> IO (Ptr CLong))
+
+-- | p_setFlag : Pointer to function : state self flag -> void
+foreign import ccall "THCTensor.h &THCudaLongTensor_setFlag"
+  p_setFlag :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> CChar -> IO ())
+
+-- | p_clearFlag : Pointer to function : state self flag -> void
+foreign import ccall "THCTensor.h &THCudaLongTensor_clearFlag"
+  p_clearFlag :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> CChar -> IO ())
+
+-- | p_new : Pointer to function : state -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaLongTensor_new"
+  p_new :: FunPtr (Ptr C'THCState -> IO (Ptr C'THCudaLongTensor))
+
+-- | p_newWithTensor : Pointer to function : state tensor -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaLongTensor_newWithTensor"
+  p_newWithTensor :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> IO (Ptr C'THCudaLongTensor))
+
+-- | p_newWithStorage : Pointer to function : state storage_ storageOffset_ size_ stride_ -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaLongTensor_newWithStorage"
+  p_newWithStorage :: FunPtr (Ptr C'THCState -> Ptr C'THCLongStorage -> CPtrdiff -> Ptr C'THLongStorage -> Ptr C'THLongStorage -> IO (Ptr C'THCudaLongTensor))
+
+-- | p_newWithStorage1d : Pointer to function : state storage_ storageOffset_ size0_ stride0_ -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaLongTensor_newWithStorage1d"
+  p_newWithStorage1d :: FunPtr (Ptr C'THCState -> Ptr C'THCLongStorage -> CPtrdiff -> CLLong -> CLLong -> IO (Ptr C'THCudaLongTensor))
+
+-- | p_newWithStorage2d : Pointer to function : state storage_ storageOffset_ size0_ stride0_ size1_ stride1_ -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaLongTensor_newWithStorage2d"
+  p_newWithStorage2d :: FunPtr (Ptr C'THCState -> Ptr C'THCLongStorage -> CPtrdiff -> CLLong -> CLLong -> CLLong -> CLLong -> IO (Ptr C'THCudaLongTensor))
+
+-- | p_newWithStorage3d : Pointer to function : state storage_ storageOffset_ size0_ stride0_ size1_ stride1_ size2_ stride2_ -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaLongTensor_newWithStorage3d"
+  p_newWithStorage3d :: FunPtr (Ptr C'THCState -> Ptr C'THCLongStorage -> CPtrdiff -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> IO (Ptr C'THCudaLongTensor))
+
+-- | p_newWithStorage4d : Pointer to function : state storage_ storageOffset_ size0_ stride0_ size1_ stride1_ size2_ stride2_ size3_ stride3_ -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaLongTensor_newWithStorage4d"
+  p_newWithStorage4d :: FunPtr (Ptr C'THCState -> Ptr C'THCLongStorage -> CPtrdiff -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> IO (Ptr C'THCudaLongTensor))
+
+-- | p_newWithSize : Pointer to function : state size_ stride_ -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaLongTensor_newWithSize"
+  p_newWithSize :: FunPtr (Ptr C'THCState -> Ptr C'THLongStorage -> Ptr C'THLongStorage -> IO (Ptr C'THCudaLongTensor))
+
+-- | p_newWithSize1d : Pointer to function : state size0_ -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaLongTensor_newWithSize1d"
+  p_newWithSize1d :: FunPtr (Ptr C'THCState -> CLLong -> IO (Ptr C'THCudaLongTensor))
+
+-- | p_newWithSize2d : Pointer to function : state size0_ size1_ -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaLongTensor_newWithSize2d"
+  p_newWithSize2d :: FunPtr (Ptr C'THCState -> CLLong -> CLLong -> IO (Ptr C'THCudaLongTensor))
+
+-- | p_newWithSize3d : Pointer to function : state size0_ size1_ size2_ -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaLongTensor_newWithSize3d"
+  p_newWithSize3d :: FunPtr (Ptr C'THCState -> CLLong -> CLLong -> CLLong -> IO (Ptr C'THCudaLongTensor))
+
+-- | p_newWithSize4d : Pointer to function : state size0_ size1_ size2_ size3_ -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaLongTensor_newWithSize4d"
+  p_newWithSize4d :: FunPtr (Ptr C'THCState -> CLLong -> CLLong -> CLLong -> CLLong -> IO (Ptr C'THCudaLongTensor))
+
+-- | p_newClone : Pointer to function : state self -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaLongTensor_newClone"
+  p_newClone :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> IO (Ptr C'THCudaLongTensor))
+
+-- | p_newContiguous : Pointer to function : state tensor -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaLongTensor_newContiguous"
+  p_newContiguous :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> IO (Ptr C'THCudaLongTensor))
+
+-- | p_newSelect : Pointer to function : state tensor dimension_ sliceIndex_ -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaLongTensor_newSelect"
+  p_newSelect :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> CInt -> CLLong -> IO (Ptr C'THCudaLongTensor))
+
+-- | p_newNarrow : Pointer to function : state tensor dimension_ firstIndex_ size_ -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaLongTensor_newNarrow"
+  p_newNarrow :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> CInt -> CLLong -> CLLong -> IO (Ptr C'THCudaLongTensor))
+
+-- | p_newTranspose : Pointer to function : state tensor dimension1_ dimension2_ -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaLongTensor_newTranspose"
+  p_newTranspose :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> CInt -> CInt -> IO (Ptr C'THCudaLongTensor))
+
+-- | p_newUnfold : Pointer to function : state tensor dimension_ size_ step_ -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaLongTensor_newUnfold"
+  p_newUnfold :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> CInt -> CLLong -> CLLong -> IO (Ptr C'THCudaLongTensor))
+
+-- | p_newView : Pointer to function : state tensor size -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaLongTensor_newView"
+  p_newView :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THLongStorage -> IO (Ptr C'THCudaLongTensor))
+
+-- | p_newFoldBatchDim : Pointer to function : state input -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaLongTensor_newFoldBatchDim"
+  p_newFoldBatchDim :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> IO (Ptr C'THCudaLongTensor))
+
+-- | p_newExpand : Pointer to function : state tensor size -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaLongTensor_newExpand"
+  p_newExpand :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THLongStorage -> IO (Ptr C'THCudaLongTensor))
+
+-- | p_expand : Pointer to function : state r tensor sizes -> void
+foreign import ccall "THCTensor.h &THCudaLongTensor_expand"
+  p_expand :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> Ptr C'THLongStorage -> IO ())
+
+-- | p_expandNd : Pointer to function : state rets ops count -> void
+foreign import ccall "THCTensor.h &THCudaLongTensor_expandNd"
+  p_expandNd :: FunPtr (Ptr C'THCState -> Ptr (Ptr C'THCudaLongTensor) -> Ptr (Ptr C'THCudaLongTensor) -> CInt -> IO ())
+
+-- | p_resize : Pointer to function : state tensor size stride -> void
+foreign import ccall "THCTensor.h &THCudaLongTensor_resize"
+  p_resize :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THLongStorage -> Ptr C'THLongStorage -> IO ())
+
+-- | p_resizeAs : Pointer to function : state tensor src -> void
+foreign import ccall "THCTensor.h &THCudaLongTensor_resizeAs"
+  p_resizeAs :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> IO ())
+
+-- | p_resize1d : Pointer to function : state tensor size0_ -> void
+foreign import ccall "THCTensor.h &THCudaLongTensor_resize1d"
+  p_resize1d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> CLLong -> IO ())
+
+-- | p_resize2d : Pointer to function : state tensor size0_ size1_ -> void
+foreign import ccall "THCTensor.h &THCudaLongTensor_resize2d"
+  p_resize2d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> CLLong -> CLLong -> IO ())
+
+-- | p_resize3d : Pointer to function : state tensor size0_ size1_ size2_ -> void
+foreign import ccall "THCTensor.h &THCudaLongTensor_resize3d"
+  p_resize3d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> CLLong -> CLLong -> CLLong -> IO ())
+
+-- | p_resize4d : Pointer to function : state tensor size0_ size1_ size2_ size3_ -> void
+foreign import ccall "THCTensor.h &THCudaLongTensor_resize4d"
+  p_resize4d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> CLLong -> CLLong -> CLLong -> CLLong -> IO ())
+
+-- | p_resize5d : Pointer to function : state tensor size0_ size1_ size2_ size3_ size4_ -> void
+foreign import ccall "THCTensor.h &THCudaLongTensor_resize5d"
+  p_resize5d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> IO ())
+
+-- | p_resizeNd : Pointer to function : state tensor nDimension size stride -> void
+foreign import ccall "THCTensor.h &THCudaLongTensor_resizeNd"
+  p_resizeNd :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> CInt -> Ptr CLLong -> Ptr CLLong -> IO ())
+
+-- | p_set : Pointer to function : state self src -> void
+foreign import ccall "THCTensor.h &THCudaLongTensor_set"
+  p_set :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> IO ())
+
+-- | p_setStorage : Pointer to function : state self storage_ storageOffset_ size_ stride_ -> void
+foreign import ccall "THCTensor.h &THCudaLongTensor_setStorage"
+  p_setStorage :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCLongStorage -> CPtrdiff -> Ptr C'THLongStorage -> Ptr C'THLongStorage -> IO ())
+
+-- | p_setStorageNd : Pointer to function : state self storage storageOffset nDimension size stride -> void
+foreign import ccall "THCTensor.h &THCudaLongTensor_setStorageNd"
+  p_setStorageNd :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCLongStorage -> CPtrdiff -> CInt -> Ptr CLLong -> Ptr CLLong -> IO ())
+
+-- | p_setStorage1d : Pointer to function : state self storage_ storageOffset_ size0_ stride0_ -> void
+foreign import ccall "THCTensor.h &THCudaLongTensor_setStorage1d"
+  p_setStorage1d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCLongStorage -> CPtrdiff -> CLLong -> CLLong -> IO ())
+
+-- | p_setStorage2d : Pointer to function : state self storage_ storageOffset_ size0_ stride0_ size1_ stride1_ -> void
+foreign import ccall "THCTensor.h &THCudaLongTensor_setStorage2d"
+  p_setStorage2d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCLongStorage -> CPtrdiff -> CLLong -> CLLong -> CLLong -> CLLong -> IO ())
+
+-- | p_setStorage3d : Pointer to function : state self storage_ storageOffset_ size0_ stride0_ size1_ stride1_ size2_ stride2_ -> void
+foreign import ccall "THCTensor.h &THCudaLongTensor_setStorage3d"
+  p_setStorage3d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCLongStorage -> CPtrdiff -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> IO ())
+
+-- | p_setStorage4d : Pointer to function : state self storage_ storageOffset_ size0_ stride0_ size1_ stride1_ size2_ stride2_ size3_ stride3_ -> void
+foreign import ccall "THCTensor.h &THCudaLongTensor_setStorage4d"
+  p_setStorage4d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCLongStorage -> CPtrdiff -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> IO ())
+
+-- | p_narrow : Pointer to function : state self src dimension_ firstIndex_ size_ -> void
+foreign import ccall "THCTensor.h &THCudaLongTensor_narrow"
+  p_narrow :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> CInt -> CLLong -> CLLong -> IO ())
+
+-- | p_select : Pointer to function : state self src dimension_ sliceIndex_ -> void
+foreign import ccall "THCTensor.h &THCudaLongTensor_select"
+  p_select :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> CInt -> CLLong -> IO ())
+
+-- | p_transpose : Pointer to function : state self src dimension1_ dimension2_ -> void
+foreign import ccall "THCTensor.h &THCudaLongTensor_transpose"
+  p_transpose :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> CInt -> CInt -> IO ())
+
+-- | p_unfold : Pointer to function : state self src dimension_ size_ step_ -> void
+foreign import ccall "THCTensor.h &THCudaLongTensor_unfold"
+  p_unfold :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> CInt -> CLLong -> CLLong -> IO ())
+
+-- | p_squeeze : Pointer to function : state self src -> void
+foreign import ccall "THCTensor.h &THCudaLongTensor_squeeze"
+  p_squeeze :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> IO ())
+
+-- | p_squeeze1d : Pointer to function : state self src dimension_ -> void
+foreign import ccall "THCTensor.h &THCudaLongTensor_squeeze1d"
+  p_squeeze1d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> CInt -> IO ())
+
+-- | p_unsqueeze1d : Pointer to function : state self src dimension_ -> void
+foreign import ccall "THCTensor.h &THCudaLongTensor_unsqueeze1d"
+  p_unsqueeze1d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> CInt -> IO ())
+
+-- | p_isContiguous : Pointer to function : state self -> int
+foreign import ccall "THCTensor.h &THCudaLongTensor_isContiguous"
+  p_isContiguous :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> IO CInt)
+
+-- | p_isSameSizeAs : Pointer to function : state self src -> int
+foreign import ccall "THCTensor.h &THCudaLongTensor_isSameSizeAs"
+  p_isSameSizeAs :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> IO CInt)
+
+-- | p_isSetTo : Pointer to function : state self src -> int
+foreign import ccall "THCTensor.h &THCudaLongTensor_isSetTo"
+  p_isSetTo :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> IO CInt)
+
+-- | p_isSize : Pointer to function : state self dims -> int
+foreign import ccall "THCTensor.h &THCudaLongTensor_isSize"
+  p_isSize :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THLongStorage -> IO CInt)
+
+-- | p_nElement : Pointer to function : state self -> ptrdiff_t
+foreign import ccall "THCTensor.h &THCudaLongTensor_nElement"
+  p_nElement :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> IO CPtrdiff)
+
+-- | p_retain : Pointer to function : state self -> void
+foreign import ccall "THCTensor.h &THCudaLongTensor_retain"
+  p_retain :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> IO ())
+
+-- | p_free : Pointer to function : state self -> void
+foreign import ccall "THCTensor.h &THCudaLongTensor_free"
+  p_free :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> IO ())
+
+-- | p_freeCopyTo : Pointer to function : state self dst -> void
+foreign import ccall "THCTensor.h &THCudaLongTensor_freeCopyTo"
+  p_freeCopyTo :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> IO ())
+
+-- | p_set1d : Pointer to function : state tensor x0 value -> void
+foreign import ccall "THCTensor.h &THCudaLongTensor_set1d"
+  p_set1d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> CLLong -> CLong -> IO ())
+
+-- | p_set2d : Pointer to function : state tensor x0 x1 value -> void
+foreign import ccall "THCTensor.h &THCudaLongTensor_set2d"
+  p_set2d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> CLLong -> CLLong -> CLong -> IO ())
+
+-- | p_set3d : Pointer to function : state tensor x0 x1 x2 value -> void
+foreign import ccall "THCTensor.h &THCudaLongTensor_set3d"
+  p_set3d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> CLLong -> CLLong -> CLLong -> CLong -> IO ())
+
+-- | p_set4d : Pointer to function : state tensor x0 x1 x2 x3 value -> void
+foreign import ccall "THCTensor.h &THCudaLongTensor_set4d"
+  p_set4d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> CLLong -> CLLong -> CLLong -> CLLong -> CLong -> IO ())
+
+-- | p_get1d : Pointer to function : state tensor x0 -> real
+foreign import ccall "THCTensor.h &THCudaLongTensor_get1d"
+  p_get1d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> CLLong -> IO CLong)
+
+-- | p_get2d : Pointer to function : state tensor x0 x1 -> real
+foreign import ccall "THCTensor.h &THCudaLongTensor_get2d"
+  p_get2d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> CLLong -> CLLong -> IO CLong)
+
+-- | p_get3d : Pointer to function : state tensor x0 x1 x2 -> real
+foreign import ccall "THCTensor.h &THCudaLongTensor_get3d"
+  p_get3d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> CLLong -> CLLong -> CLLong -> IO CLong)
+
+-- | p_get4d : Pointer to function : state tensor x0 x1 x2 x3 -> real
+foreign import ccall "THCTensor.h &THCudaLongTensor_get4d"
+  p_get4d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> CLLong -> CLLong -> CLLong -> CLLong -> IO CLong)
+
+-- | p_getDevice : Pointer to function : state self -> int
+foreign import ccall "THCTensor.h &THCudaLongTensor_getDevice"
+  p_getDevice :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> IO CInt)
+
+-- | p_sizeDesc : Pointer to function : state tensor -> THCDescBuff
+foreign import ccall "THCTensor.h &THCudaLongTensor_sizeDesc"
+  p_sizeDesc :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> IO (Ptr C'THCDescBuff))
diff --git a/src/Torch/FFI/THC/Long/TensorCopy.hs b/src/Torch/FFI/THC/Long/TensorCopy.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Long/TensorCopy.hs
@@ -0,0 +1,177 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Long.TensorCopy where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_copy :  state self src -> void
+foreign import ccall "THCTensorCopy.h THCudaLongTensor_copy"
+  c_copy :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> IO ()
+
+-- | c_copyIgnoringOverlaps :  state self src -> void
+foreign import ccall "THCTensorCopy.h THCudaLongTensor_copyIgnoringOverlaps"
+  c_copyIgnoringOverlaps :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> IO ()
+
+-- | c_copyByte :  state self src -> void
+foreign import ccall "THCTensorCopy.h THCudaLongTensor_copyByte"
+  c_copyByte :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THByteTensor -> IO ()
+
+-- | c_copyChar :  state self src -> void
+foreign import ccall "THCTensorCopy.h THCudaLongTensor_copyChar"
+  c_copyChar :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCharTensor -> IO ()
+
+-- | c_copyShort :  state self src -> void
+foreign import ccall "THCTensorCopy.h THCudaLongTensor_copyShort"
+  c_copyShort :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THShortTensor -> IO ()
+
+-- | c_copyInt :  state self src -> void
+foreign import ccall "THCTensorCopy.h THCudaLongTensor_copyInt"
+  c_copyInt :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THIntTensor -> IO ()
+
+-- | c_copyLong :  state self src -> void
+foreign import ccall "THCTensorCopy.h THCudaLongTensor_copyLong"
+  c_copyLong :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THLongTensor -> IO ()
+
+-- | c_copyFloat :  state self src -> void
+foreign import ccall "THCTensorCopy.h THCudaLongTensor_copyFloat"
+  c_copyFloat :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THFloatTensor -> IO ()
+
+-- | c_copyDouble :  state self src -> void
+foreign import ccall "THCTensorCopy.h THCudaLongTensor_copyDouble"
+  c_copyDouble :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THDoubleTensor -> IO ()
+
+-- | c_copyHalf :  state self src -> void
+foreign import ccall "THCTensorCopy.h THCudaLongTensor_copyHalf"
+  c_copyHalf :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THHalfTensor -> IO ()
+
+-- | c_copyCudaByte :  state dst src -> void
+foreign import ccall "THCTensorCopy.h THCudaLongTensor_copyCudaByte"
+  c_copyCudaByte :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaByteTensor -> IO ()
+
+-- | c_copyCudaChar :  state dst src -> void
+foreign import ccall "THCTensorCopy.h THCudaLongTensor_copyCudaChar"
+  c_copyCudaChar :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaCharTensor -> IO ()
+
+-- | c_copyCudaShort :  state dst src -> void
+foreign import ccall "THCTensorCopy.h THCudaLongTensor_copyCudaShort"
+  c_copyCudaShort :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaShortTensor -> IO ()
+
+-- | c_copyCudaInt :  state dst src -> void
+foreign import ccall "THCTensorCopy.h THCudaLongTensor_copyCudaInt"
+  c_copyCudaInt :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaIntTensor -> IO ()
+
+-- | c_copyCudaLong :  state dst src -> void
+foreign import ccall "THCTensorCopy.h THCudaLongTensor_copyCudaLong"
+  c_copyCudaLong :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> IO ()
+
+-- | c_copyCudaDouble :  state dst src -> void
+foreign import ccall "THCTensorCopy.h THCudaLongTensor_copyCudaDouble"
+  c_copyCudaDouble :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_copyCuda :  state self src -> void
+foreign import ccall "THCTensorCopy.h THCudaLongTensor_copyCuda"
+  c_copyCuda :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> IO ()
+
+-- | c_thCopyCuda :  state self src -> void
+foreign import ccall "THCTensorCopy.h THLongTensor_copyCuda"
+  c_thCopyCuda :: Ptr C'THCState -> Ptr C'THLongTensor -> Ptr C'THCudaLongTensor -> IO ()
+
+-- | c_copyCPU :  state self src -> void
+foreign import ccall "THCTensorCopy.h THCudaLongTensor_copyCPU"
+  c_copyCPU :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THLongTensor -> IO ()
+
+-- | c_copyAsyncCPU :  state self src -> void
+foreign import ccall "THCTensorCopy.h THCudaLongTensor_copyAsyncCPU"
+  c_copyAsyncCPU :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THLongTensor -> IO ()
+
+-- | c_thCopyAsyncCuda :  state self src -> void
+foreign import ccall "THCTensorCopy.h THLongTensor_copyAsyncCuda"
+  c_thCopyAsyncCuda :: Ptr C'THCState -> Ptr C'THLongTensor -> Ptr C'THCudaLongTensor -> IO ()
+
+-- | p_copy : Pointer to function : state self src -> void
+foreign import ccall "THCTensorCopy.h &THCudaLongTensor_copy"
+  p_copy :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> IO ())
+
+-- | p_copyIgnoringOverlaps : Pointer to function : state self src -> void
+foreign import ccall "THCTensorCopy.h &THCudaLongTensor_copyIgnoringOverlaps"
+  p_copyIgnoringOverlaps :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> IO ())
+
+-- | p_copyByte : Pointer to function : state self src -> void
+foreign import ccall "THCTensorCopy.h &THCudaLongTensor_copyByte"
+  p_copyByte :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THByteTensor -> IO ())
+
+-- | p_copyChar : Pointer to function : state self src -> void
+foreign import ccall "THCTensorCopy.h &THCudaLongTensor_copyChar"
+  p_copyChar :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCharTensor -> IO ())
+
+-- | p_copyShort : Pointer to function : state self src -> void
+foreign import ccall "THCTensorCopy.h &THCudaLongTensor_copyShort"
+  p_copyShort :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THShortTensor -> IO ())
+
+-- | p_copyInt : Pointer to function : state self src -> void
+foreign import ccall "THCTensorCopy.h &THCudaLongTensor_copyInt"
+  p_copyInt :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THIntTensor -> IO ())
+
+-- | p_copyLong : Pointer to function : state self src -> void
+foreign import ccall "THCTensorCopy.h &THCudaLongTensor_copyLong"
+  p_copyLong :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THLongTensor -> IO ())
+
+-- | p_copyFloat : Pointer to function : state self src -> void
+foreign import ccall "THCTensorCopy.h &THCudaLongTensor_copyFloat"
+  p_copyFloat :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THFloatTensor -> IO ())
+
+-- | p_copyDouble : Pointer to function : state self src -> void
+foreign import ccall "THCTensorCopy.h &THCudaLongTensor_copyDouble"
+  p_copyDouble :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THDoubleTensor -> IO ())
+
+-- | p_copyHalf : Pointer to function : state self src -> void
+foreign import ccall "THCTensorCopy.h &THCudaLongTensor_copyHalf"
+  p_copyHalf :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THHalfTensor -> IO ())
+
+-- | p_copyCudaByte : Pointer to function : state dst src -> void
+foreign import ccall "THCTensorCopy.h &THCudaLongTensor_copyCudaByte"
+  p_copyCudaByte :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaByteTensor -> IO ())
+
+-- | p_copyCudaChar : Pointer to function : state dst src -> void
+foreign import ccall "THCTensorCopy.h &THCudaLongTensor_copyCudaChar"
+  p_copyCudaChar :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaCharTensor -> IO ())
+
+-- | p_copyCudaShort : Pointer to function : state dst src -> void
+foreign import ccall "THCTensorCopy.h &THCudaLongTensor_copyCudaShort"
+  p_copyCudaShort :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaShortTensor -> IO ())
+
+-- | p_copyCudaInt : Pointer to function : state dst src -> void
+foreign import ccall "THCTensorCopy.h &THCudaLongTensor_copyCudaInt"
+  p_copyCudaInt :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaIntTensor -> IO ())
+
+-- | p_copyCudaLong : Pointer to function : state dst src -> void
+foreign import ccall "THCTensorCopy.h &THCudaLongTensor_copyCudaLong"
+  p_copyCudaLong :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> IO ())
+
+-- | p_copyCudaDouble : Pointer to function : state dst src -> void
+foreign import ccall "THCTensorCopy.h &THCudaLongTensor_copyCudaDouble"
+  p_copyCudaDouble :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_copyCuda : Pointer to function : state self src -> void
+foreign import ccall "THCTensorCopy.h &THCudaLongTensor_copyCuda"
+  p_copyCuda :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> IO ())
+
+-- | p_thCopyCuda : Pointer to function : state self src -> void
+foreign import ccall "THCTensorCopy.h &THLongTensor_copyCuda"
+  p_thCopyCuda :: FunPtr (Ptr C'THCState -> Ptr C'THLongTensor -> Ptr C'THCudaLongTensor -> IO ())
+
+-- | p_copyCPU : Pointer to function : state self src -> void
+foreign import ccall "THCTensorCopy.h &THCudaLongTensor_copyCPU"
+  p_copyCPU :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THLongTensor -> IO ())
+
+-- | p_copyAsyncCPU : Pointer to function : state self src -> void
+foreign import ccall "THCTensorCopy.h &THCudaLongTensor_copyAsyncCPU"
+  p_copyAsyncCPU :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THLongTensor -> IO ())
+
+-- | p_thCopyAsyncCuda : Pointer to function : state self src -> void
+foreign import ccall "THCTensorCopy.h &THLongTensor_copyAsyncCuda"
+  p_thCopyAsyncCuda :: FunPtr (Ptr C'THCState -> Ptr C'THLongTensor -> Ptr C'THCudaLongTensor -> IO ())
diff --git a/src/Torch/FFI/THC/Long/TensorIndex.hs b/src/Torch/FFI/THC/Long/TensorIndex.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Long/TensorIndex.hs
@@ -0,0 +1,97 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Long.TensorIndex where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_indexCopy :  state res_ dim indices src -> void
+foreign import ccall "THCTensorIndex.h THCudaLongTensor_indexCopy"
+  c_indexCopy :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> CInt -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> IO ()
+
+-- | c_indexAdd :  state res_ dim indices src -> void
+foreign import ccall "THCTensorIndex.h THCudaLongTensor_indexAdd"
+  c_indexAdd :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> CInt -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> IO ()
+
+-- | c_indexFill :  state tensor dim index val -> void
+foreign import ccall "THCTensorIndex.h THCudaLongTensor_indexFill"
+  c_indexFill :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> CInt -> Ptr C'THCudaLongTensor -> CLong -> IO ()
+
+-- | c_indexSelect :  state tensor src dim index -> void
+foreign import ccall "THCTensorIndex.h THCudaLongTensor_indexSelect"
+  c_indexSelect :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> CInt -> Ptr C'THCudaLongTensor -> IO ()
+
+-- | c_take :  state res_ src index -> void
+foreign import ccall "THCTensorIndex.h THCudaLongTensor_take"
+  c_take :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> IO ()
+
+-- | c_put :  state res_ indices src accumulate -> void
+foreign import ccall "THCTensorIndex.h THCudaLongTensor_put"
+  c_put :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> CInt -> IO ()
+
+-- | c_indexCopy_long :  state res_ dim indices src -> void
+foreign import ccall "THCTensorIndex.h THCudaLongTensor_indexCopy_long"
+  c_indexCopy_long :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> CInt -> Ptr C'THLongTensor -> Ptr C'THCudaLongTensor -> IO ()
+
+-- | c_indexAdd_long :  state res_ dim indices src -> void
+foreign import ccall "THCTensorIndex.h THCudaLongTensor_indexAdd_long"
+  c_indexAdd_long :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> CInt -> Ptr C'THLongTensor -> Ptr C'THCudaLongTensor -> IO ()
+
+-- | c_indexFill_long :  state tensor dim index val -> void
+foreign import ccall "THCTensorIndex.h THCudaLongTensor_indexFill_long"
+  c_indexFill_long :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> CInt -> Ptr C'THLongTensor -> CLong -> IO ()
+
+-- | c_indexSelect_long :  state tensor src dim index -> void
+foreign import ccall "THCTensorIndex.h THCudaLongTensor_indexSelect_long"
+  c_indexSelect_long :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> CInt -> Ptr C'THLongTensor -> IO ()
+
+-- | c_calculateAdvancedIndexingOffsets :  state output indexed baseOffset indexers -> void
+foreign import ccall "THCTensorIndex.h THCudaLongTensor_calculateAdvancedIndexingOffsets"
+  c_calculateAdvancedIndexingOffsets :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> CPtrdiff -> Ptr (Ptr C'THCudaLongTensor) -> IO ()
+
+-- | p_indexCopy : Pointer to function : state res_ dim indices src -> void
+foreign import ccall "THCTensorIndex.h &THCudaLongTensor_indexCopy"
+  p_indexCopy :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> CInt -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> IO ())
+
+-- | p_indexAdd : Pointer to function : state res_ dim indices src -> void
+foreign import ccall "THCTensorIndex.h &THCudaLongTensor_indexAdd"
+  p_indexAdd :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> CInt -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> IO ())
+
+-- | p_indexFill : Pointer to function : state tensor dim index val -> void
+foreign import ccall "THCTensorIndex.h &THCudaLongTensor_indexFill"
+  p_indexFill :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> CInt -> Ptr C'THCudaLongTensor -> CLong -> IO ())
+
+-- | p_indexSelect : Pointer to function : state tensor src dim index -> void
+foreign import ccall "THCTensorIndex.h &THCudaLongTensor_indexSelect"
+  p_indexSelect :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> CInt -> Ptr C'THCudaLongTensor -> IO ())
+
+-- | p_take : Pointer to function : state res_ src index -> void
+foreign import ccall "THCTensorIndex.h &THCudaLongTensor_take"
+  p_take :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> IO ())
+
+-- | p_put : Pointer to function : state res_ indices src accumulate -> void
+foreign import ccall "THCTensorIndex.h &THCudaLongTensor_put"
+  p_put :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> CInt -> IO ())
+
+-- | p_indexCopy_long : Pointer to function : state res_ dim indices src -> void
+foreign import ccall "THCTensorIndex.h &THCudaLongTensor_indexCopy_long"
+  p_indexCopy_long :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> CInt -> Ptr C'THLongTensor -> Ptr C'THCudaLongTensor -> IO ())
+
+-- | p_indexAdd_long : Pointer to function : state res_ dim indices src -> void
+foreign import ccall "THCTensorIndex.h &THCudaLongTensor_indexAdd_long"
+  p_indexAdd_long :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> CInt -> Ptr C'THLongTensor -> Ptr C'THCudaLongTensor -> IO ())
+
+-- | p_indexFill_long : Pointer to function : state tensor dim index val -> void
+foreign import ccall "THCTensorIndex.h &THCudaLongTensor_indexFill_long"
+  p_indexFill_long :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> CInt -> Ptr C'THLongTensor -> CLong -> IO ())
+
+-- | p_indexSelect_long : Pointer to function : state tensor src dim index -> void
+foreign import ccall "THCTensorIndex.h &THCudaLongTensor_indexSelect_long"
+  p_indexSelect_long :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> CInt -> Ptr C'THLongTensor -> IO ())
+
+-- | p_calculateAdvancedIndexingOffsets : Pointer to function : state output indexed baseOffset indexers -> void
+foreign import ccall "THCTensorIndex.h &THCudaLongTensor_calculateAdvancedIndexingOffsets"
+  p_calculateAdvancedIndexingOffsets :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> CPtrdiff -> Ptr (Ptr C'THCudaLongTensor) -> IO ())
diff --git a/src/Torch/FFI/THC/Long/TensorMasked.hs b/src/Torch/FFI/THC/Long/TensorMasked.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Long/TensorMasked.hs
@@ -0,0 +1,57 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Long.TensorMasked where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_maskedFill :  state tensor mask value -> void
+foreign import ccall "THCTensorMasked.h THCudaLongTensor_maskedFill"
+  c_maskedFill :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaByteTensor -> CLong -> IO ()
+
+-- | c_maskedFillByte :  state tensor mask value -> void
+foreign import ccall "THCTensorMasked.h THCudaLongTensor_maskedFillByte"
+  c_maskedFillByte :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THByteTensor -> CLong -> IO ()
+
+-- | c_maskedCopy :  state tensor mask src -> void
+foreign import ccall "THCTensorMasked.h THCudaLongTensor_maskedCopy"
+  c_maskedCopy :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaByteTensor -> Ptr C'THCudaLongTensor -> IO ()
+
+-- | c_maskedCopyByte :  state tensor mask src -> void
+foreign import ccall "THCTensorMasked.h THCudaLongTensor_maskedCopyByte"
+  c_maskedCopyByte :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THByteTensor -> Ptr C'THCudaLongTensor -> IO ()
+
+-- | c_maskedSelect :  state tensor src mask -> void
+foreign import ccall "THCTensorMasked.h THCudaLongTensor_maskedSelect"
+  c_maskedSelect :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaByteTensor -> IO ()
+
+-- | c_maskedSelectByte :  state tensor src mask -> void
+foreign import ccall "THCTensorMasked.h THCudaLongTensor_maskedSelectByte"
+  c_maskedSelectByte :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> Ptr C'THByteTensor -> IO ()
+
+-- | p_maskedFill : Pointer to function : state tensor mask value -> void
+foreign import ccall "THCTensorMasked.h &THCudaLongTensor_maskedFill"
+  p_maskedFill :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaByteTensor -> CLong -> IO ())
+
+-- | p_maskedFillByte : Pointer to function : state tensor mask value -> void
+foreign import ccall "THCTensorMasked.h &THCudaLongTensor_maskedFillByte"
+  p_maskedFillByte :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THByteTensor -> CLong -> IO ())
+
+-- | p_maskedCopy : Pointer to function : state tensor mask src -> void
+foreign import ccall "THCTensorMasked.h &THCudaLongTensor_maskedCopy"
+  p_maskedCopy :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaByteTensor -> Ptr C'THCudaLongTensor -> IO ())
+
+-- | p_maskedCopyByte : Pointer to function : state tensor mask src -> void
+foreign import ccall "THCTensorMasked.h &THCudaLongTensor_maskedCopyByte"
+  p_maskedCopyByte :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THByteTensor -> Ptr C'THCudaLongTensor -> IO ())
+
+-- | p_maskedSelect : Pointer to function : state tensor src mask -> void
+foreign import ccall "THCTensorMasked.h &THCudaLongTensor_maskedSelect"
+  p_maskedSelect :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaByteTensor -> IO ())
+
+-- | p_maskedSelectByte : Pointer to function : state tensor src mask -> void
+foreign import ccall "THCTensorMasked.h &THCudaLongTensor_maskedSelectByte"
+  p_maskedSelectByte :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> Ptr C'THByteTensor -> IO ())
diff --git a/src/Torch/FFI/THC/Long/TensorMath.hs b/src/Torch/FFI/THC/Long/TensorMath.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Long/TensorMath.hs
@@ -0,0 +1,153 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Long.TensorMath where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_fill :  state self value -> void
+foreign import ccall "THCTensorMath.h THCudaLongTensor_fill"
+  c_fill :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> CLong -> IO ()
+
+-- | c_zero :  state self -> void
+foreign import ccall "THCTensorMath.h THCudaLongTensor_zero"
+  c_zero :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> IO ()
+
+-- | c_zeros :  state r_ size -> void
+foreign import ccall "THCTensorMath.h THCudaLongTensor_zeros"
+  c_zeros :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THLongStorage -> IO ()
+
+-- | c_zerosLike :  state r_ input -> void
+foreign import ccall "THCTensorMath.h THCudaLongTensor_zerosLike"
+  c_zerosLike :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> IO ()
+
+-- | c_ones :  state r_ size -> void
+foreign import ccall "THCTensorMath.h THCudaLongTensor_ones"
+  c_ones :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THLongStorage -> IO ()
+
+-- | c_onesLike :  state r_ input -> void
+foreign import ccall "THCTensorMath.h THCudaLongTensor_onesLike"
+  c_onesLike :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> IO ()
+
+-- | c_reshape :  state r_ t size -> void
+foreign import ccall "THCTensorMath.h THCudaLongTensor_reshape"
+  c_reshape :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> Ptr C'THLongStorage -> IO ()
+
+-- | c_numel :  state t -> ptrdiff_t
+foreign import ccall "THCTensorMath.h THCudaLongTensor_numel"
+  c_numel :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> IO CPtrdiff
+
+-- | c_cat :  state result ta tb dimension -> void
+foreign import ccall "THCTensorMath.h THCudaLongTensor_cat"
+  c_cat :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> CInt -> IO ()
+
+-- | c_catArray :  state result inputs numInputs dimension -> void
+foreign import ccall "THCTensorMath.h THCudaLongTensor_catArray"
+  c_catArray :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr (Ptr C'THCudaLongTensor) -> CInt -> CInt -> IO ()
+
+-- | c_nonzero :  state tensor self -> void
+foreign import ccall "THCTensorMath.h THCudaLongTensor_nonzero"
+  c_nonzero :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> IO ()
+
+-- | c_tril :  state self src k -> void
+foreign import ccall "THCTensorMath.h THCudaLongTensor_tril"
+  c_tril :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> CLLong -> IO ()
+
+-- | c_triu :  state self src k -> void
+foreign import ccall "THCTensorMath.h THCudaLongTensor_triu"
+  c_triu :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> CLLong -> IO ()
+
+-- | c_diag :  state self src k -> void
+foreign import ccall "THCTensorMath.h THCudaLongTensor_diag"
+  c_diag :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> CLLong -> IO ()
+
+-- | c_eye :  state self n k -> void
+foreign import ccall "THCTensorMath.h THCudaLongTensor_eye"
+  c_eye :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> CLLong -> CLLong -> IO ()
+
+-- | c_trace :  state self -> accreal
+foreign import ccall "THCTensorMath.h THCudaLongTensor_trace"
+  c_trace :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> IO CLong
+
+-- | c_range :  state r_ xmin xmax step -> void
+foreign import ccall "THCTensorMath.h THCudaLongTensor_range"
+  c_range :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> CLong -> CLong -> CLong -> IO ()
+
+-- | c_arange :  state r_ xmin xmax step -> void
+foreign import ccall "THCTensorMath.h THCudaLongTensor_arange"
+  c_arange :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> CLong -> CLong -> CLong -> IO ()
+
+-- | p_fill : Pointer to function : state self value -> void
+foreign import ccall "THCTensorMath.h &THCudaLongTensor_fill"
+  p_fill :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> CLong -> IO ())
+
+-- | p_zero : Pointer to function : state self -> void
+foreign import ccall "THCTensorMath.h &THCudaLongTensor_zero"
+  p_zero :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> IO ())
+
+-- | p_zeros : Pointer to function : state r_ size -> void
+foreign import ccall "THCTensorMath.h &THCudaLongTensor_zeros"
+  p_zeros :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THLongStorage -> IO ())
+
+-- | p_zerosLike : Pointer to function : state r_ input -> void
+foreign import ccall "THCTensorMath.h &THCudaLongTensor_zerosLike"
+  p_zerosLike :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> IO ())
+
+-- | p_ones : Pointer to function : state r_ size -> void
+foreign import ccall "THCTensorMath.h &THCudaLongTensor_ones"
+  p_ones :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THLongStorage -> IO ())
+
+-- | p_onesLike : Pointer to function : state r_ input -> void
+foreign import ccall "THCTensorMath.h &THCudaLongTensor_onesLike"
+  p_onesLike :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> IO ())
+
+-- | p_reshape : Pointer to function : state r_ t size -> void
+foreign import ccall "THCTensorMath.h &THCudaLongTensor_reshape"
+  p_reshape :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> Ptr C'THLongStorage -> IO ())
+
+-- | p_numel : Pointer to function : state t -> ptrdiff_t
+foreign import ccall "THCTensorMath.h &THCudaLongTensor_numel"
+  p_numel :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> IO CPtrdiff)
+
+-- | p_cat : Pointer to function : state result ta tb dimension -> void
+foreign import ccall "THCTensorMath.h &THCudaLongTensor_cat"
+  p_cat :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> CInt -> IO ())
+
+-- | p_catArray : Pointer to function : state result inputs numInputs dimension -> void
+foreign import ccall "THCTensorMath.h &THCudaLongTensor_catArray"
+  p_catArray :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr (Ptr C'THCudaLongTensor) -> CInt -> CInt -> IO ())
+
+-- | p_nonzero : Pointer to function : state tensor self -> void
+foreign import ccall "THCTensorMath.h &THCudaLongTensor_nonzero"
+  p_nonzero :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> IO ())
+
+-- | p_tril : Pointer to function : state self src k -> void
+foreign import ccall "THCTensorMath.h &THCudaLongTensor_tril"
+  p_tril :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> CLLong -> IO ())
+
+-- | p_triu : Pointer to function : state self src k -> void
+foreign import ccall "THCTensorMath.h &THCudaLongTensor_triu"
+  p_triu :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> CLLong -> IO ())
+
+-- | p_diag : Pointer to function : state self src k -> void
+foreign import ccall "THCTensorMath.h &THCudaLongTensor_diag"
+  p_diag :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> CLLong -> IO ())
+
+-- | p_eye : Pointer to function : state self n k -> void
+foreign import ccall "THCTensorMath.h &THCudaLongTensor_eye"
+  p_eye :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> CLLong -> CLLong -> IO ())
+
+-- | p_trace : Pointer to function : state self -> accreal
+foreign import ccall "THCTensorMath.h &THCudaLongTensor_trace"
+  p_trace :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> IO CLong)
+
+-- | p_range : Pointer to function : state r_ xmin xmax step -> void
+foreign import ccall "THCTensorMath.h &THCudaLongTensor_range"
+  p_range :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> CLong -> CLong -> CLong -> IO ())
+
+-- | p_arange : Pointer to function : state r_ xmin xmax step -> void
+foreign import ccall "THCTensorMath.h &THCudaLongTensor_arange"
+  p_arange :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> CLong -> CLong -> CLong -> IO ())
diff --git a/src/Torch/FFI/THC/Long/TensorMathCompare.hs b/src/Torch/FFI/THC/Long/TensorMathCompare.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Long/TensorMathCompare.hs
@@ -0,0 +1,105 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Long.TensorMathCompare where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_ltValue :  state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h THCudaLongTensor_ltValue"
+  c_ltValue :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaLongTensor -> CLong -> IO ()
+
+-- | c_gtValue :  state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h THCudaLongTensor_gtValue"
+  c_gtValue :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaLongTensor -> CLong -> IO ()
+
+-- | c_leValue :  state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h THCudaLongTensor_leValue"
+  c_leValue :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaLongTensor -> CLong -> IO ()
+
+-- | c_geValue :  state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h THCudaLongTensor_geValue"
+  c_geValue :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaLongTensor -> CLong -> IO ()
+
+-- | c_eqValue :  state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h THCudaLongTensor_eqValue"
+  c_eqValue :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaLongTensor -> CLong -> IO ()
+
+-- | c_neValue :  state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h THCudaLongTensor_neValue"
+  c_neValue :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaLongTensor -> CLong -> IO ()
+
+-- | c_ltValueT :  state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h THCudaLongTensor_ltValueT"
+  c_ltValueT :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> CLong -> IO ()
+
+-- | c_gtValueT :  state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h THCudaLongTensor_gtValueT"
+  c_gtValueT :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> CLong -> IO ()
+
+-- | c_leValueT :  state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h THCudaLongTensor_leValueT"
+  c_leValueT :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> CLong -> IO ()
+
+-- | c_geValueT :  state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h THCudaLongTensor_geValueT"
+  c_geValueT :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> CLong -> IO ()
+
+-- | c_eqValueT :  state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h THCudaLongTensor_eqValueT"
+  c_eqValueT :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> CLong -> IO ()
+
+-- | c_neValueT :  state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h THCudaLongTensor_neValueT"
+  c_neValueT :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> CLong -> IO ()
+
+-- | p_ltValue : Pointer to function : state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h &THCudaLongTensor_ltValue"
+  p_ltValue :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaLongTensor -> CLong -> IO ())
+
+-- | p_gtValue : Pointer to function : state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h &THCudaLongTensor_gtValue"
+  p_gtValue :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaLongTensor -> CLong -> IO ())
+
+-- | p_leValue : Pointer to function : state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h &THCudaLongTensor_leValue"
+  p_leValue :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaLongTensor -> CLong -> IO ())
+
+-- | p_geValue : Pointer to function : state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h &THCudaLongTensor_geValue"
+  p_geValue :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaLongTensor -> CLong -> IO ())
+
+-- | p_eqValue : Pointer to function : state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h &THCudaLongTensor_eqValue"
+  p_eqValue :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaLongTensor -> CLong -> IO ())
+
+-- | p_neValue : Pointer to function : state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h &THCudaLongTensor_neValue"
+  p_neValue :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaLongTensor -> CLong -> IO ())
+
+-- | p_ltValueT : Pointer to function : state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h &THCudaLongTensor_ltValueT"
+  p_ltValueT :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> CLong -> IO ())
+
+-- | p_gtValueT : Pointer to function : state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h &THCudaLongTensor_gtValueT"
+  p_gtValueT :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> CLong -> IO ())
+
+-- | p_leValueT : Pointer to function : state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h &THCudaLongTensor_leValueT"
+  p_leValueT :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> CLong -> IO ())
+
+-- | p_geValueT : Pointer to function : state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h &THCudaLongTensor_geValueT"
+  p_geValueT :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> CLong -> IO ())
+
+-- | p_eqValueT : Pointer to function : state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h &THCudaLongTensor_eqValueT"
+  p_eqValueT :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> CLong -> IO ())
+
+-- | p_neValueT : Pointer to function : state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h &THCudaLongTensor_neValueT"
+  p_neValueT :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> CLong -> IO ())
diff --git a/src/Torch/FFI/THC/Long/TensorMathCompareT.hs b/src/Torch/FFI/THC/Long/TensorMathCompareT.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Long/TensorMathCompareT.hs
@@ -0,0 +1,105 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Long.TensorMathCompareT where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_ltTensor :  state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h THCudaLongTensor_ltTensor"
+  c_ltTensor :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> IO ()
+
+-- | c_gtTensor :  state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h THCudaLongTensor_gtTensor"
+  c_gtTensor :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> IO ()
+
+-- | c_leTensor :  state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h THCudaLongTensor_leTensor"
+  c_leTensor :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> IO ()
+
+-- | c_geTensor :  state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h THCudaLongTensor_geTensor"
+  c_geTensor :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> IO ()
+
+-- | c_eqTensor :  state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h THCudaLongTensor_eqTensor"
+  c_eqTensor :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> IO ()
+
+-- | c_neTensor :  state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h THCudaLongTensor_neTensor"
+  c_neTensor :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> IO ()
+
+-- | c_ltTensorT :  state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h THCudaLongTensor_ltTensorT"
+  c_ltTensorT :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> IO ()
+
+-- | c_gtTensorT :  state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h THCudaLongTensor_gtTensorT"
+  c_gtTensorT :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> IO ()
+
+-- | c_leTensorT :  state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h THCudaLongTensor_leTensorT"
+  c_leTensorT :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> IO ()
+
+-- | c_geTensorT :  state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h THCudaLongTensor_geTensorT"
+  c_geTensorT :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> IO ()
+
+-- | c_eqTensorT :  state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h THCudaLongTensor_eqTensorT"
+  c_eqTensorT :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> IO ()
+
+-- | c_neTensorT :  state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h THCudaLongTensor_neTensorT"
+  c_neTensorT :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> IO ()
+
+-- | p_ltTensor : Pointer to function : state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h &THCudaLongTensor_ltTensor"
+  p_ltTensor :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> IO ())
+
+-- | p_gtTensor : Pointer to function : state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h &THCudaLongTensor_gtTensor"
+  p_gtTensor :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> IO ())
+
+-- | p_leTensor : Pointer to function : state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h &THCudaLongTensor_leTensor"
+  p_leTensor :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> IO ())
+
+-- | p_geTensor : Pointer to function : state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h &THCudaLongTensor_geTensor"
+  p_geTensor :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> IO ())
+
+-- | p_eqTensor : Pointer to function : state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h &THCudaLongTensor_eqTensor"
+  p_eqTensor :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> IO ())
+
+-- | p_neTensor : Pointer to function : state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h &THCudaLongTensor_neTensor"
+  p_neTensor :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> IO ())
+
+-- | p_ltTensorT : Pointer to function : state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h &THCudaLongTensor_ltTensorT"
+  p_ltTensorT :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> IO ())
+
+-- | p_gtTensorT : Pointer to function : state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h &THCudaLongTensor_gtTensorT"
+  p_gtTensorT :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> IO ())
+
+-- | p_leTensorT : Pointer to function : state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h &THCudaLongTensor_leTensorT"
+  p_leTensorT :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> IO ())
+
+-- | p_geTensorT : Pointer to function : state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h &THCudaLongTensor_geTensorT"
+  p_geTensorT :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> IO ())
+
+-- | p_eqTensorT : Pointer to function : state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h &THCudaLongTensor_eqTensorT"
+  p_eqTensorT :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> IO ())
+
+-- | p_neTensorT : Pointer to function : state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h &THCudaLongTensor_neTensorT"
+  p_neTensorT :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> IO ())
diff --git a/src/Torch/FFI/THC/Long/TensorMathPairwise.hs b/src/Torch/FFI/THC/Long/TensorMathPairwise.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Long/TensorMathPairwise.hs
@@ -0,0 +1,121 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Long.TensorMathPairwise where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_add :  state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h THCudaLongTensor_add"
+  c_add :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> CLong -> IO ()
+
+-- | c_sub :  state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h THCudaLongTensor_sub"
+  c_sub :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> CLong -> IO ()
+
+-- | c_add_scaled :  state self src value alpha -> void
+foreign import ccall "THCTensorMathPairwise.h THCudaLongTensor_add_scaled"
+  c_add_scaled :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> CLong -> CLong -> IO ()
+
+-- | c_sub_scaled :  state self src value alpha -> void
+foreign import ccall "THCTensorMathPairwise.h THCudaLongTensor_sub_scaled"
+  c_sub_scaled :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> CLong -> CLong -> IO ()
+
+-- | c_mul :  state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h THCudaLongTensor_mul"
+  c_mul :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> CLong -> IO ()
+
+-- | c_div :  state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h THCudaLongTensor_div"
+  c_div :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> CLong -> IO ()
+
+-- | c_lshift :  state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h THCudaLongTensor_lshift"
+  c_lshift :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> CLong -> IO ()
+
+-- | c_rshift :  state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h THCudaLongTensor_rshift"
+  c_rshift :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> CLong -> IO ()
+
+-- | c_fmod :  state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h THCudaLongTensor_fmod"
+  c_fmod :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> CLong -> IO ()
+
+-- | c_remainder :  state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h THCudaLongTensor_remainder"
+  c_remainder :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> CLong -> IO ()
+
+-- | c_bitand :  state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h THCudaLongTensor_bitand"
+  c_bitand :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> CLong -> IO ()
+
+-- | c_bitor :  state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h THCudaLongTensor_bitor"
+  c_bitor :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> CLong -> IO ()
+
+-- | c_bitxor :  state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h THCudaLongTensor_bitxor"
+  c_bitxor :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> CLong -> IO ()
+
+-- | c_equal :  state self src -> int
+foreign import ccall "THCTensorMathPairwise.h THCudaLongTensor_equal"
+  c_equal :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> IO CInt
+
+-- | p_add : Pointer to function : state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h &THCudaLongTensor_add"
+  p_add :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> CLong -> IO ())
+
+-- | p_sub : Pointer to function : state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h &THCudaLongTensor_sub"
+  p_sub :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> CLong -> IO ())
+
+-- | p_add_scaled : Pointer to function : state self src value alpha -> void
+foreign import ccall "THCTensorMathPairwise.h &THCudaLongTensor_add_scaled"
+  p_add_scaled :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> CLong -> CLong -> IO ())
+
+-- | p_sub_scaled : Pointer to function : state self src value alpha -> void
+foreign import ccall "THCTensorMathPairwise.h &THCudaLongTensor_sub_scaled"
+  p_sub_scaled :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> CLong -> CLong -> IO ())
+
+-- | p_mul : Pointer to function : state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h &THCudaLongTensor_mul"
+  p_mul :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> CLong -> IO ())
+
+-- | p_div : Pointer to function : state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h &THCudaLongTensor_div"
+  p_div :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> CLong -> IO ())
+
+-- | p_lshift : Pointer to function : state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h &THCudaLongTensor_lshift"
+  p_lshift :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> CLong -> IO ())
+
+-- | p_rshift : Pointer to function : state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h &THCudaLongTensor_rshift"
+  p_rshift :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> CLong -> IO ())
+
+-- | p_fmod : Pointer to function : state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h &THCudaLongTensor_fmod"
+  p_fmod :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> CLong -> IO ())
+
+-- | p_remainder : Pointer to function : state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h &THCudaLongTensor_remainder"
+  p_remainder :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> CLong -> IO ())
+
+-- | p_bitand : Pointer to function : state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h &THCudaLongTensor_bitand"
+  p_bitand :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> CLong -> IO ())
+
+-- | p_bitor : Pointer to function : state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h &THCudaLongTensor_bitor"
+  p_bitor :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> CLong -> IO ())
+
+-- | p_bitxor : Pointer to function : state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h &THCudaLongTensor_bitxor"
+  p_bitxor :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> CLong -> IO ())
+
+-- | p_equal : Pointer to function : state self src -> int
+foreign import ccall "THCTensorMathPairwise.h &THCudaLongTensor_equal"
+  p_equal :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> IO CInt)
diff --git a/src/Torch/FFI/THC/Long/TensorMathPointwise.hs b/src/Torch/FFI/THC/Long/TensorMathPointwise.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Long/TensorMathPointwise.hs
@@ -0,0 +1,193 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Long.TensorMathPointwise where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_neg :  state self src -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaLongTensor_neg"
+  c_neg :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> IO ()
+
+-- | c_abs :  state self src -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaLongTensor_abs"
+  c_abs :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> IO ()
+
+-- | c_sign :  state self src -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaLongTensor_sign"
+  c_sign :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> IO ()
+
+-- | c_clamp :  state self src min_value max_value -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaLongTensor_clamp"
+  c_clamp :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> CLong -> CLong -> IO ()
+
+-- | c_cross :  state self src1 src2 dimension -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaLongTensor_cross"
+  c_cross :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> CInt -> IO ()
+
+-- | c_cadd :  state self src1 value src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaLongTensor_cadd"
+  c_cadd :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> CLong -> Ptr C'THCudaLongTensor -> IO ()
+
+-- | c_csub :  state self src1 value src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaLongTensor_csub"
+  c_csub :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> CLong -> Ptr C'THCudaLongTensor -> IO ()
+
+-- | c_cmul :  state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaLongTensor_cmul"
+  c_cmul :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> IO ()
+
+-- | c_cpow :  state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaLongTensor_cpow"
+  c_cpow :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> IO ()
+
+-- | c_cdiv :  state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaLongTensor_cdiv"
+  c_cdiv :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> IO ()
+
+-- | c_clshift :  state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaLongTensor_clshift"
+  c_clshift :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> IO ()
+
+-- | c_crshift :  state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaLongTensor_crshift"
+  c_crshift :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> IO ()
+
+-- | c_cmax :  state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaLongTensor_cmax"
+  c_cmax :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> IO ()
+
+-- | c_cmin :  state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaLongTensor_cmin"
+  c_cmin :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> IO ()
+
+-- | c_cfmod :  state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaLongTensor_cfmod"
+  c_cfmod :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> IO ()
+
+-- | c_cremainder :  state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaLongTensor_cremainder"
+  c_cremainder :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> IO ()
+
+-- | c_cmaxValue :  state self src value -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaLongTensor_cmaxValue"
+  c_cmaxValue :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> CLong -> IO ()
+
+-- | c_cminValue :  state self src value -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaLongTensor_cminValue"
+  c_cminValue :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> CLong -> IO ()
+
+-- | c_cbitand :  state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaLongTensor_cbitand"
+  c_cbitand :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> IO ()
+
+-- | c_cbitor :  state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaLongTensor_cbitor"
+  c_cbitor :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> IO ()
+
+-- | c_cbitxor :  state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaLongTensor_cbitxor"
+  c_cbitxor :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> IO ()
+
+-- | c_addcmul :  state self t value src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaLongTensor_addcmul"
+  c_addcmul :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> CLong -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> IO ()
+
+-- | c_addcdiv :  state self t value src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaLongTensor_addcdiv"
+  c_addcdiv :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> CLong -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> IO ()
+
+-- | p_neg : Pointer to function : state self src -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaLongTensor_neg"
+  p_neg :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> IO ())
+
+-- | p_abs : Pointer to function : state self src -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaLongTensor_abs"
+  p_abs :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> IO ())
+
+-- | p_sign : Pointer to function : state self src -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaLongTensor_sign"
+  p_sign :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> IO ())
+
+-- | p_clamp : Pointer to function : state self src min_value max_value -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaLongTensor_clamp"
+  p_clamp :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> CLong -> CLong -> IO ())
+
+-- | p_cross : Pointer to function : state self src1 src2 dimension -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaLongTensor_cross"
+  p_cross :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> CInt -> IO ())
+
+-- | p_cadd : Pointer to function : state self src1 value src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaLongTensor_cadd"
+  p_cadd :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> CLong -> Ptr C'THCudaLongTensor -> IO ())
+
+-- | p_csub : Pointer to function : state self src1 value src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaLongTensor_csub"
+  p_csub :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> CLong -> Ptr C'THCudaLongTensor -> IO ())
+
+-- | p_cmul : Pointer to function : state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaLongTensor_cmul"
+  p_cmul :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> IO ())
+
+-- | p_cpow : Pointer to function : state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaLongTensor_cpow"
+  p_cpow :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> IO ())
+
+-- | p_cdiv : Pointer to function : state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaLongTensor_cdiv"
+  p_cdiv :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> IO ())
+
+-- | p_clshift : Pointer to function : state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaLongTensor_clshift"
+  p_clshift :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> IO ())
+
+-- | p_crshift : Pointer to function : state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaLongTensor_crshift"
+  p_crshift :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> IO ())
+
+-- | p_cmax : Pointer to function : state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaLongTensor_cmax"
+  p_cmax :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> IO ())
+
+-- | p_cmin : Pointer to function : state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaLongTensor_cmin"
+  p_cmin :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> IO ())
+
+-- | p_cfmod : Pointer to function : state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaLongTensor_cfmod"
+  p_cfmod :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> IO ())
+
+-- | p_cremainder : Pointer to function : state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaLongTensor_cremainder"
+  p_cremainder :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> IO ())
+
+-- | p_cmaxValue : Pointer to function : state self src value -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaLongTensor_cmaxValue"
+  p_cmaxValue :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> CLong -> IO ())
+
+-- | p_cminValue : Pointer to function : state self src value -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaLongTensor_cminValue"
+  p_cminValue :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> CLong -> IO ())
+
+-- | p_cbitand : Pointer to function : state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaLongTensor_cbitand"
+  p_cbitand :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> IO ())
+
+-- | p_cbitor : Pointer to function : state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaLongTensor_cbitor"
+  p_cbitor :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> IO ())
+
+-- | p_cbitxor : Pointer to function : state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaLongTensor_cbitxor"
+  p_cbitxor :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> IO ())
+
+-- | p_addcmul : Pointer to function : state self t value src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaLongTensor_addcmul"
+  p_addcmul :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> CLong -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> IO ())
+
+-- | p_addcdiv : Pointer to function : state self t value src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaLongTensor_addcdiv"
+  p_addcdiv :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> CLong -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> IO ())
diff --git a/src/Torch/FFI/THC/Long/TensorMathReduce.hs b/src/Torch/FFI/THC/Long/TensorMathReduce.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Long/TensorMathReduce.hs
@@ -0,0 +1,89 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Long.TensorMathReduce where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_sum :  state self src dim keepdim -> void
+foreign import ccall "THCTensorMathReduce.h THCudaLongTensor_sum"
+  c_sum :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> CInt -> CInt -> IO ()
+
+-- | c_prod :  state self src dim keepdim -> void
+foreign import ccall "THCTensorMathReduce.h THCudaLongTensor_prod"
+  c_prod :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> CInt -> CInt -> IO ()
+
+-- | c_sumall :  state self -> accreal
+foreign import ccall "THCTensorMathReduce.h THCudaLongTensor_sumall"
+  c_sumall :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> IO CLong
+
+-- | c_prodall :  state self -> accreal
+foreign import ccall "THCTensorMathReduce.h THCudaLongTensor_prodall"
+  c_prodall :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> IO CLong
+
+-- | c_min :  state values indices src dim keepdim -> void
+foreign import ccall "THCTensorMathReduce.h THCudaLongTensor_min"
+  c_min :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> CInt -> CInt -> IO ()
+
+-- | c_max :  state values indices src dim keepdim -> void
+foreign import ccall "THCTensorMathReduce.h THCudaLongTensor_max"
+  c_max :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> CInt -> CInt -> IO ()
+
+-- | c_minall :  state self -> real
+foreign import ccall "THCTensorMathReduce.h THCudaLongTensor_minall"
+  c_minall :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> IO CLong
+
+-- | c_maxall :  state self -> real
+foreign import ccall "THCTensorMathReduce.h THCudaLongTensor_maxall"
+  c_maxall :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> IO CLong
+
+-- | c_medianall :  state self -> real
+foreign import ccall "THCTensorMathReduce.h THCudaLongTensor_medianall"
+  c_medianall :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> IO CLong
+
+-- | c_median :  state values indices src dim keepdim -> void
+foreign import ccall "THCTensorMathReduce.h THCudaLongTensor_median"
+  c_median :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> CInt -> CInt -> IO ()
+
+-- | p_sum : Pointer to function : state self src dim keepdim -> void
+foreign import ccall "THCTensorMathReduce.h &THCudaLongTensor_sum"
+  p_sum :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> CInt -> CInt -> IO ())
+
+-- | p_prod : Pointer to function : state self src dim keepdim -> void
+foreign import ccall "THCTensorMathReduce.h &THCudaLongTensor_prod"
+  p_prod :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> CInt -> CInt -> IO ())
+
+-- | p_sumall : Pointer to function : state self -> accreal
+foreign import ccall "THCTensorMathReduce.h &THCudaLongTensor_sumall"
+  p_sumall :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> IO CLong)
+
+-- | p_prodall : Pointer to function : state self -> accreal
+foreign import ccall "THCTensorMathReduce.h &THCudaLongTensor_prodall"
+  p_prodall :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> IO CLong)
+
+-- | p_min : Pointer to function : state values indices src dim keepdim -> void
+foreign import ccall "THCTensorMathReduce.h &THCudaLongTensor_min"
+  p_min :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> CInt -> CInt -> IO ())
+
+-- | p_max : Pointer to function : state values indices src dim keepdim -> void
+foreign import ccall "THCTensorMathReduce.h &THCudaLongTensor_max"
+  p_max :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> CInt -> CInt -> IO ())
+
+-- | p_minall : Pointer to function : state self -> real
+foreign import ccall "THCTensorMathReduce.h &THCudaLongTensor_minall"
+  p_minall :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> IO CLong)
+
+-- | p_maxall : Pointer to function : state self -> real
+foreign import ccall "THCTensorMathReduce.h &THCudaLongTensor_maxall"
+  p_maxall :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> IO CLong)
+
+-- | p_medianall : Pointer to function : state self -> real
+foreign import ccall "THCTensorMathReduce.h &THCudaLongTensor_medianall"
+  p_medianall :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> IO CLong)
+
+-- | p_median : Pointer to function : state values indices src dim keepdim -> void
+foreign import ccall "THCTensorMathReduce.h &THCudaLongTensor_median"
+  p_median :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> CInt -> CInt -> IO ())
diff --git a/src/Torch/FFI/THC/Long/TensorMathScan.hs b/src/Torch/FFI/THC/Long/TensorMathScan.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Long/TensorMathScan.hs
@@ -0,0 +1,25 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Long.TensorMathScan where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_cumsum :  state self src dim -> void
+foreign import ccall "THCTensorMathScan.h THCudaLongTensor_cumsum"
+  c_cumsum :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> CInt -> IO ()
+
+-- | c_cumprod :  state self src dim -> void
+foreign import ccall "THCTensorMathScan.h THCudaLongTensor_cumprod"
+  c_cumprod :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> CInt -> IO ()
+
+-- | p_cumsum : Pointer to function : state self src dim -> void
+foreign import ccall "THCTensorMathScan.h &THCudaLongTensor_cumsum"
+  p_cumsum :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> CInt -> IO ())
+
+-- | p_cumprod : Pointer to function : state self src dim -> void
+foreign import ccall "THCTensorMathScan.h &THCudaLongTensor_cumprod"
+  p_cumprod :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> CInt -> IO ())
diff --git a/src/Torch/FFI/THC/Long/TensorMode.hs b/src/Torch/FFI/THC/Long/TensorMode.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Long/TensorMode.hs
@@ -0,0 +1,17 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Long.TensorMode where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_mode :  state values indices input dimension keepdim -> void
+foreign import ccall "THCTensorMode.h THCudaLongTensor_mode"
+  c_mode :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> CInt -> CInt -> IO ()
+
+-- | p_mode : Pointer to function : state values indices input dimension keepdim -> void
+foreign import ccall "THCTensorMode.h &THCudaLongTensor_mode"
+  p_mode :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> CInt -> CInt -> IO ())
diff --git a/src/Torch/FFI/THC/Long/TensorRandom.hs b/src/Torch/FFI/THC/Long/TensorRandom.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Long/TensorRandom.hs
@@ -0,0 +1,57 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Long.TensorRandom where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_random :  state self -> void
+foreign import ccall "THCTensorRandom.h THCudaLongTensor_random"
+  c_random :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> IO ()
+
+-- | c_clampedRandom :  state self min max -> void
+foreign import ccall "THCTensorRandom.h THCudaLongTensor_clampedRandom"
+  c_clampedRandom :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> CLLong -> CLLong -> IO ()
+
+-- | c_cappedRandom :  state self max -> void
+foreign import ccall "THCTensorRandom.h THCudaLongTensor_cappedRandom"
+  c_cappedRandom :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> CLLong -> IO ()
+
+-- | c_bernoulli :  state self p -> void
+foreign import ccall "THCTensorRandom.h THCudaLongTensor_bernoulli"
+  c_bernoulli :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> CDouble -> IO ()
+
+-- | c_bernoulli_DoubleTensor :  state self p -> void
+foreign import ccall "THCTensorRandom.h THCudaLongTensor_bernoulli_DoubleTensor"
+  c_bernoulli_DoubleTensor :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_geometric :  state self p -> void
+foreign import ccall "THCTensorRandom.h THCudaLongTensor_geometric"
+  c_geometric :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> CDouble -> IO ()
+
+-- | p_random : Pointer to function : state self -> void
+foreign import ccall "THCTensorRandom.h &THCudaLongTensor_random"
+  p_random :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> IO ())
+
+-- | p_clampedRandom : Pointer to function : state self min max -> void
+foreign import ccall "THCTensorRandom.h &THCudaLongTensor_clampedRandom"
+  p_clampedRandom :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> CLLong -> CLLong -> IO ())
+
+-- | p_cappedRandom : Pointer to function : state self max -> void
+foreign import ccall "THCTensorRandom.h &THCudaLongTensor_cappedRandom"
+  p_cappedRandom :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> CLLong -> IO ())
+
+-- | p_bernoulli : Pointer to function : state self p -> void
+foreign import ccall "THCTensorRandom.h &THCudaLongTensor_bernoulli"
+  p_bernoulli :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> CDouble -> IO ())
+
+-- | p_bernoulli_DoubleTensor : Pointer to function : state self p -> void
+foreign import ccall "THCTensorRandom.h &THCudaLongTensor_bernoulli_DoubleTensor"
+  p_bernoulli_DoubleTensor :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_geometric : Pointer to function : state self p -> void
+foreign import ccall "THCTensorRandom.h &THCudaLongTensor_geometric"
+  p_geometric :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> CDouble -> IO ())
diff --git a/src/Torch/FFI/THC/Long/TensorScatterGather.hs b/src/Torch/FFI/THC/Long/TensorScatterGather.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Long/TensorScatterGather.hs
@@ -0,0 +1,41 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Long.TensorScatterGather where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_gather :  state tensor src dim index -> void
+foreign import ccall "THCTensorScatterGather.h THCudaLongTensor_gather"
+  c_gather :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> CInt -> Ptr C'THCudaLongTensor -> IO ()
+
+-- | c_scatter :  state tensor dim index src -> void
+foreign import ccall "THCTensorScatterGather.h THCudaLongTensor_scatter"
+  c_scatter :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> CInt -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> IO ()
+
+-- | c_scatterAdd :  state tensor dim index src -> void
+foreign import ccall "THCTensorScatterGather.h THCudaLongTensor_scatterAdd"
+  c_scatterAdd :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> CInt -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> IO ()
+
+-- | c_scatterFill :  state tensor dim index value -> void
+foreign import ccall "THCTensorScatterGather.h THCudaLongTensor_scatterFill"
+  c_scatterFill :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> CInt -> Ptr C'THCudaLongTensor -> CLong -> IO ()
+
+-- | p_gather : Pointer to function : state tensor src dim index -> void
+foreign import ccall "THCTensorScatterGather.h &THCudaLongTensor_gather"
+  p_gather :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> CInt -> Ptr C'THCudaLongTensor -> IO ())
+
+-- | p_scatter : Pointer to function : state tensor dim index src -> void
+foreign import ccall "THCTensorScatterGather.h &THCudaLongTensor_scatter"
+  p_scatter :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> CInt -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> IO ())
+
+-- | p_scatterAdd : Pointer to function : state tensor dim index src -> void
+foreign import ccall "THCTensorScatterGather.h &THCudaLongTensor_scatterAdd"
+  p_scatterAdd :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> CInt -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> IO ())
+
+-- | p_scatterFill : Pointer to function : state tensor dim index value -> void
+foreign import ccall "THCTensorScatterGather.h &THCudaLongTensor_scatterFill"
+  p_scatterFill :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> CInt -> Ptr C'THCudaLongTensor -> CLong -> IO ())
diff --git a/src/Torch/FFI/THC/Long/TensorSort.hs b/src/Torch/FFI/THC/Long/TensorSort.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Long/TensorSort.hs
@@ -0,0 +1,25 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Long.TensorSort where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_sortKeyValueInplace :  state keys values dim order -> void
+foreign import ccall "THCTensorSort.h THCudaLongTensor_sortKeyValueInplace"
+  c_sortKeyValueInplace :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> CInt -> CInt -> IO ()
+
+-- | c_sort :  state sorted indices input dim order -> void
+foreign import ccall "THCTensorSort.h THCudaLongTensor_sort"
+  c_sort :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> CInt -> CInt -> IO ()
+
+-- | p_sortKeyValueInplace : Pointer to function : state keys values dim order -> void
+foreign import ccall "THCTensorSort.h &THCudaLongTensor_sortKeyValueInplace"
+  p_sortKeyValueInplace :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> CInt -> CInt -> IO ())
+
+-- | p_sort : Pointer to function : state sorted indices input dim order -> void
+foreign import ccall "THCTensorSort.h &THCudaLongTensor_sort"
+  p_sort :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> CInt -> CInt -> IO ())
diff --git a/src/Torch/FFI/THC/Long/TensorTopK.hs b/src/Torch/FFI/THC/Long/TensorTopK.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Long/TensorTopK.hs
@@ -0,0 +1,17 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Long.TensorTopK where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_topk :  state topK indices input k dim dir sorted -> void
+foreign import ccall "THCTensorTopK.h THCudaLongTensor_topk"
+  c_topk :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> CLLong -> CInt -> CInt -> CInt -> IO ()
+
+-- | p_topk : Pointer to function : state topK indices input k dim dir sorted -> void
+foreign import ccall "THCTensorTopK.h &THCudaLongTensor_topk"
+  p_topk :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaLongTensor -> CLLong -> CInt -> CInt -> CInt -> IO ())
diff --git a/src/Torch/FFI/THC/Short/Storage.hs b/src/Torch/FFI/THC/Short/Storage.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Short/Storage.hs
@@ -0,0 +1,161 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Short.Storage where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_data :  state  -> real *
+foreign import ccall "THCStorage.h THCudaShortStorage_data"
+  c_data :: Ptr C'THCState -> Ptr C'THCShortStorage -> IO (Ptr CShort)
+
+-- | c_size :  state  -> ptrdiff_t
+foreign import ccall "THCStorage.h THCudaShortStorage_size"
+  c_size :: Ptr C'THCState -> Ptr C'THCShortStorage -> IO CPtrdiff
+
+-- | c_set :  state    -> void
+foreign import ccall "THCStorage.h THCudaShortStorage_set"
+  c_set :: Ptr C'THCState -> Ptr C'THCShortStorage -> CPtrdiff -> CShort -> IO ()
+
+-- | c_get :  state   -> real
+foreign import ccall "THCStorage.h THCudaShortStorage_get"
+  c_get :: Ptr C'THCState -> Ptr C'THCShortStorage -> CPtrdiff -> IO CShort
+
+-- | c_new :  state -> THCStorage *
+foreign import ccall "THCStorage.h THCudaShortStorage_new"
+  c_new :: Ptr C'THCState -> IO (Ptr C'THCShortStorage)
+
+-- | c_newWithSize :  state size -> THCStorage *
+foreign import ccall "THCStorage.h THCudaShortStorage_newWithSize"
+  c_newWithSize :: Ptr C'THCState -> CPtrdiff -> IO (Ptr C'THCShortStorage)
+
+-- | c_newWithSize1 :  state  -> THCStorage *
+foreign import ccall "THCStorage.h THCudaShortStorage_newWithSize1"
+  c_newWithSize1 :: Ptr C'THCState -> CShort -> IO (Ptr C'THCShortStorage)
+
+-- | c_newWithSize2 :  state   -> THCStorage *
+foreign import ccall "THCStorage.h THCudaShortStorage_newWithSize2"
+  c_newWithSize2 :: Ptr C'THCState -> CShort -> CShort -> IO (Ptr C'THCShortStorage)
+
+-- | c_newWithSize3 :  state    -> THCStorage *
+foreign import ccall "THCStorage.h THCudaShortStorage_newWithSize3"
+  c_newWithSize3 :: Ptr C'THCState -> CShort -> CShort -> CShort -> IO (Ptr C'THCShortStorage)
+
+-- | c_newWithSize4 :  state     -> THCStorage *
+foreign import ccall "THCStorage.h THCudaShortStorage_newWithSize4"
+  c_newWithSize4 :: Ptr C'THCState -> CShort -> CShort -> CShort -> CShort -> IO (Ptr C'THCShortStorage)
+
+-- | c_newWithMapping :  state filename size shared -> THCStorage *
+foreign import ccall "THCStorage.h THCudaShortStorage_newWithMapping"
+  c_newWithMapping :: Ptr C'THCState -> Ptr CChar -> CPtrdiff -> CInt -> IO (Ptr C'THCShortStorage)
+
+-- | c_newWithData :  state data size -> THCStorage *
+foreign import ccall "THCStorage.h THCudaShortStorage_newWithData"
+  c_newWithData :: Ptr C'THCState -> Ptr CShort -> CPtrdiff -> IO (Ptr C'THCShortStorage)
+
+-- | c_setFlag :  state storage flag -> void
+foreign import ccall "THCStorage.h THCudaShortStorage_setFlag"
+  c_setFlag :: Ptr C'THCState -> Ptr C'THCShortStorage -> CChar -> IO ()
+
+-- | c_clearFlag :  state storage flag -> void
+foreign import ccall "THCStorage.h THCudaShortStorage_clearFlag"
+  c_clearFlag :: Ptr C'THCState -> Ptr C'THCShortStorage -> CChar -> IO ()
+
+-- | c_retain :  state storage -> void
+foreign import ccall "THCStorage.h THCudaShortStorage_retain"
+  c_retain :: Ptr C'THCState -> Ptr C'THCShortStorage -> IO ()
+
+-- | c_free :  state storage -> void
+foreign import ccall "THCStorage.h THCudaShortStorage_free"
+  c_free :: Ptr C'THCState -> Ptr C'THCShortStorage -> IO ()
+
+-- | c_resize :  state storage size -> void
+foreign import ccall "THCStorage.h THCudaShortStorage_resize"
+  c_resize :: Ptr C'THCState -> Ptr C'THCShortStorage -> CPtrdiff -> IO ()
+
+-- | c_fill :  state storage value -> void
+foreign import ccall "THCStorage.h THCudaShortStorage_fill"
+  c_fill :: Ptr C'THCState -> Ptr C'THCShortStorage -> CShort -> IO ()
+
+-- | c_getDevice :  state storage -> int
+foreign import ccall "THCStorage.h THCudaShortStorage_getDevice"
+  c_getDevice :: Ptr C'THCState -> Ptr C'THCShortStorage -> IO CInt
+
+-- | p_data : Pointer to function : state  -> real *
+foreign import ccall "THCStorage.h &THCudaShortStorage_data"
+  p_data :: FunPtr (Ptr C'THCState -> Ptr C'THCShortStorage -> IO (Ptr CShort))
+
+-- | p_size : Pointer to function : state  -> ptrdiff_t
+foreign import ccall "THCStorage.h &THCudaShortStorage_size"
+  p_size :: FunPtr (Ptr C'THCState -> Ptr C'THCShortStorage -> IO CPtrdiff)
+
+-- | p_set : Pointer to function : state    -> void
+foreign import ccall "THCStorage.h &THCudaShortStorage_set"
+  p_set :: FunPtr (Ptr C'THCState -> Ptr C'THCShortStorage -> CPtrdiff -> CShort -> IO ())
+
+-- | p_get : Pointer to function : state   -> real
+foreign import ccall "THCStorage.h &THCudaShortStorage_get"
+  p_get :: FunPtr (Ptr C'THCState -> Ptr C'THCShortStorage -> CPtrdiff -> IO CShort)
+
+-- | p_new : Pointer to function : state -> THCStorage *
+foreign import ccall "THCStorage.h &THCudaShortStorage_new"
+  p_new :: FunPtr (Ptr C'THCState -> IO (Ptr C'THCShortStorage))
+
+-- | p_newWithSize : Pointer to function : state size -> THCStorage *
+foreign import ccall "THCStorage.h &THCudaShortStorage_newWithSize"
+  p_newWithSize :: FunPtr (Ptr C'THCState -> CPtrdiff -> IO (Ptr C'THCShortStorage))
+
+-- | p_newWithSize1 : Pointer to function : state  -> THCStorage *
+foreign import ccall "THCStorage.h &THCudaShortStorage_newWithSize1"
+  p_newWithSize1 :: FunPtr (Ptr C'THCState -> CShort -> IO (Ptr C'THCShortStorage))
+
+-- | p_newWithSize2 : Pointer to function : state   -> THCStorage *
+foreign import ccall "THCStorage.h &THCudaShortStorage_newWithSize2"
+  p_newWithSize2 :: FunPtr (Ptr C'THCState -> CShort -> CShort -> IO (Ptr C'THCShortStorage))
+
+-- | p_newWithSize3 : Pointer to function : state    -> THCStorage *
+foreign import ccall "THCStorage.h &THCudaShortStorage_newWithSize3"
+  p_newWithSize3 :: FunPtr (Ptr C'THCState -> CShort -> CShort -> CShort -> IO (Ptr C'THCShortStorage))
+
+-- | p_newWithSize4 : Pointer to function : state     -> THCStorage *
+foreign import ccall "THCStorage.h &THCudaShortStorage_newWithSize4"
+  p_newWithSize4 :: FunPtr (Ptr C'THCState -> CShort -> CShort -> CShort -> CShort -> IO (Ptr C'THCShortStorage))
+
+-- | p_newWithMapping : Pointer to function : state filename size shared -> THCStorage *
+foreign import ccall "THCStorage.h &THCudaShortStorage_newWithMapping"
+  p_newWithMapping :: FunPtr (Ptr C'THCState -> Ptr CChar -> CPtrdiff -> CInt -> IO (Ptr C'THCShortStorage))
+
+-- | p_newWithData : Pointer to function : state data size -> THCStorage *
+foreign import ccall "THCStorage.h &THCudaShortStorage_newWithData"
+  p_newWithData :: FunPtr (Ptr C'THCState -> Ptr CShort -> CPtrdiff -> IO (Ptr C'THCShortStorage))
+
+-- | p_setFlag : Pointer to function : state storage flag -> void
+foreign import ccall "THCStorage.h &THCudaShortStorage_setFlag"
+  p_setFlag :: FunPtr (Ptr C'THCState -> Ptr C'THCShortStorage -> CChar -> IO ())
+
+-- | p_clearFlag : Pointer to function : state storage flag -> void
+foreign import ccall "THCStorage.h &THCudaShortStorage_clearFlag"
+  p_clearFlag :: FunPtr (Ptr C'THCState -> Ptr C'THCShortStorage -> CChar -> IO ())
+
+-- | p_retain : Pointer to function : state storage -> void
+foreign import ccall "THCStorage.h &THCudaShortStorage_retain"
+  p_retain :: FunPtr (Ptr C'THCState -> Ptr C'THCShortStorage -> IO ())
+
+-- | p_free : Pointer to function : state storage -> void
+foreign import ccall "THCStorage.h &THCudaShortStorage_free"
+  p_free :: FunPtr (Ptr C'THCState -> Ptr C'THCShortStorage -> IO ())
+
+-- | p_resize : Pointer to function : state storage size -> void
+foreign import ccall "THCStorage.h &THCudaShortStorage_resize"
+  p_resize :: FunPtr (Ptr C'THCState -> Ptr C'THCShortStorage -> CPtrdiff -> IO ())
+
+-- | p_fill : Pointer to function : state storage value -> void
+foreign import ccall "THCStorage.h &THCudaShortStorage_fill"
+  p_fill :: FunPtr (Ptr C'THCState -> Ptr C'THCShortStorage -> CShort -> IO ())
+
+-- | p_getDevice : Pointer to function : state storage -> int
+foreign import ccall "THCStorage.h &THCudaShortStorage_getDevice"
+  p_getDevice :: FunPtr (Ptr C'THCState -> Ptr C'THCShortStorage -> IO CInt)
diff --git a/src/Torch/FFI/THC/Short/StorageCopy.hs b/src/Torch/FFI/THC/Short/StorageCopy.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Short/StorageCopy.hs
@@ -0,0 +1,113 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Short.StorageCopy where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_rawCopy :  state storage src -> void
+foreign import ccall "THCStorageCopy.h THCudaShortStorage_rawCopy"
+  c_rawCopy :: Ptr C'THCState -> Ptr C'THCShortStorage -> Ptr CShort -> IO ()
+
+-- | c_copy :  state storage src -> void
+foreign import ccall "THCStorageCopy.h THCudaShortStorage_copy"
+  c_copy :: Ptr C'THCState -> Ptr C'THCShortStorage -> Ptr C'THCShortStorage -> IO ()
+
+-- | c_copyByte :  state storage src -> void
+foreign import ccall "THCStorageCopy.h THCudaShortStorage_copyByte"
+  c_copyByte :: Ptr C'THCState -> Ptr C'THCShortStorage -> Ptr C'THByteStorage -> IO ()
+
+-- | c_copyChar :  state storage src -> void
+foreign import ccall "THCStorageCopy.h THCudaShortStorage_copyChar"
+  c_copyChar :: Ptr C'THCState -> Ptr C'THCShortStorage -> Ptr C'THCharStorage -> IO ()
+
+-- | c_copyShort :  state storage src -> void
+foreign import ccall "THCStorageCopy.h THCudaShortStorage_copyShort"
+  c_copyShort :: Ptr C'THCState -> Ptr C'THCShortStorage -> Ptr C'THShortStorage -> IO ()
+
+-- | c_copyInt :  state storage src -> void
+foreign import ccall "THCStorageCopy.h THCudaShortStorage_copyInt"
+  c_copyInt :: Ptr C'THCState -> Ptr C'THCShortStorage -> Ptr C'THIntStorage -> IO ()
+
+-- | c_copyLong :  state storage src -> void
+foreign import ccall "THCStorageCopy.h THCudaShortStorage_copyLong"
+  c_copyLong :: Ptr C'THCState -> Ptr C'THCShortStorage -> Ptr C'THLongStorage -> IO ()
+
+-- | c_copyFloat :  state storage src -> void
+foreign import ccall "THCStorageCopy.h THCudaShortStorage_copyFloat"
+  c_copyFloat :: Ptr C'THCState -> Ptr C'THCShortStorage -> Ptr C'THFloatStorage -> IO ()
+
+-- | c_copyDouble :  state storage src -> void
+foreign import ccall "THCStorageCopy.h THCudaShortStorage_copyDouble"
+  c_copyDouble :: Ptr C'THCState -> Ptr C'THCShortStorage -> Ptr C'THDoubleStorage -> IO ()
+
+-- | c_copyHalf :  state storage src -> void
+foreign import ccall "THCStorageCopy.h THCudaShortStorage_copyHalf"
+  c_copyHalf :: Ptr C'THCState -> Ptr C'THCShortStorage -> Ptr C'THHalfStorage -> IO ()
+
+-- | c_thCopyCuda :  state self src -> void
+foreign import ccall "THCStorageCopy.h THShortStorage_copyCuda"
+  c_thCopyCuda :: Ptr C'THCState -> Ptr C'THShortStorage -> Ptr C'THCShortStorage -> IO ()
+
+-- | c_copyCuda :  state self src -> void
+foreign import ccall "THCStorageCopy.h THCudaShortStorage_copyCuda"
+  c_copyCuda :: Ptr C'THCState -> Ptr C'THCShortStorage -> Ptr C'THCShortStorage -> IO ()
+
+-- | c_copyCPU :  state self src -> void
+foreign import ccall "THCStorageCopy.h THCudaShortStorage_copyCPU"
+  c_copyCPU :: Ptr C'THCState -> Ptr C'THCShortStorage -> Ptr C'THShortStorage -> IO ()
+
+-- | p_rawCopy : Pointer to function : state storage src -> void
+foreign import ccall "THCStorageCopy.h &THCudaShortStorage_rawCopy"
+  p_rawCopy :: FunPtr (Ptr C'THCState -> Ptr C'THCShortStorage -> Ptr CShort -> IO ())
+
+-- | p_copy : Pointer to function : state storage src -> void
+foreign import ccall "THCStorageCopy.h &THCudaShortStorage_copy"
+  p_copy :: FunPtr (Ptr C'THCState -> Ptr C'THCShortStorage -> Ptr C'THCShortStorage -> IO ())
+
+-- | p_copyByte : Pointer to function : state storage src -> void
+foreign import ccall "THCStorageCopy.h &THCudaShortStorage_copyByte"
+  p_copyByte :: FunPtr (Ptr C'THCState -> Ptr C'THCShortStorage -> Ptr C'THByteStorage -> IO ())
+
+-- | p_copyChar : Pointer to function : state storage src -> void
+foreign import ccall "THCStorageCopy.h &THCudaShortStorage_copyChar"
+  p_copyChar :: FunPtr (Ptr C'THCState -> Ptr C'THCShortStorage -> Ptr C'THCharStorage -> IO ())
+
+-- | p_copyShort : Pointer to function : state storage src -> void
+foreign import ccall "THCStorageCopy.h &THCudaShortStorage_copyShort"
+  p_copyShort :: FunPtr (Ptr C'THCState -> Ptr C'THCShortStorage -> Ptr C'THShortStorage -> IO ())
+
+-- | p_copyInt : Pointer to function : state storage src -> void
+foreign import ccall "THCStorageCopy.h &THCudaShortStorage_copyInt"
+  p_copyInt :: FunPtr (Ptr C'THCState -> Ptr C'THCShortStorage -> Ptr C'THIntStorage -> IO ())
+
+-- | p_copyLong : Pointer to function : state storage src -> void
+foreign import ccall "THCStorageCopy.h &THCudaShortStorage_copyLong"
+  p_copyLong :: FunPtr (Ptr C'THCState -> Ptr C'THCShortStorage -> Ptr C'THLongStorage -> IO ())
+
+-- | p_copyFloat : Pointer to function : state storage src -> void
+foreign import ccall "THCStorageCopy.h &THCudaShortStorage_copyFloat"
+  p_copyFloat :: FunPtr (Ptr C'THCState -> Ptr C'THCShortStorage -> Ptr C'THFloatStorage -> IO ())
+
+-- | p_copyDouble : Pointer to function : state storage src -> void
+foreign import ccall "THCStorageCopy.h &THCudaShortStorage_copyDouble"
+  p_copyDouble :: FunPtr (Ptr C'THCState -> Ptr C'THCShortStorage -> Ptr C'THDoubleStorage -> IO ())
+
+-- | p_copyHalf : Pointer to function : state storage src -> void
+foreign import ccall "THCStorageCopy.h &THCudaShortStorage_copyHalf"
+  p_copyHalf :: FunPtr (Ptr C'THCState -> Ptr C'THCShortStorage -> Ptr C'THHalfStorage -> IO ())
+
+-- | p_thCopyCuda : Pointer to function : state self src -> void
+foreign import ccall "THCStorageCopy.h &THShortStorage_copyCuda"
+  p_thCopyCuda :: FunPtr (Ptr C'THCState -> Ptr C'THShortStorage -> Ptr C'THCShortStorage -> IO ())
+
+-- | p_copyCuda : Pointer to function : state self src -> void
+foreign import ccall "THCStorageCopy.h &THCudaShortStorage_copyCuda"
+  p_copyCuda :: FunPtr (Ptr C'THCState -> Ptr C'THCShortStorage -> Ptr C'THCShortStorage -> IO ())
+
+-- | p_copyCPU : Pointer to function : state self src -> void
+foreign import ccall "THCStorageCopy.h &THCudaShortStorage_copyCPU"
+  p_copyCPU :: FunPtr (Ptr C'THCState -> Ptr C'THCShortStorage -> Ptr C'THShortStorage -> IO ())
diff --git a/src/Torch/FFI/THC/Short/Tensor.hs b/src/Torch/FFI/THC/Short/Tensor.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Short/Tensor.hs
@@ -0,0 +1,593 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Short.Tensor where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_storage :  state self -> THCStorage *
+foreign import ccall "THCTensor.h THCudaShortTensor_storage"
+  c_storage :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> IO (Ptr C'THCShortStorage)
+
+-- | c_storageOffset :  state self -> ptrdiff_t
+foreign import ccall "THCTensor.h THCudaShortTensor_storageOffset"
+  c_storageOffset :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> IO CPtrdiff
+
+-- | c_nDimension :  state self -> int
+foreign import ccall "THCTensor.h THCudaShortTensor_nDimension"
+  c_nDimension :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> IO CInt
+
+-- | c_size :  state self dim -> int64_t
+foreign import ccall "THCTensor.h THCudaShortTensor_size"
+  c_size :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> CInt -> IO CLLong
+
+-- | c_stride :  state self dim -> int64_t
+foreign import ccall "THCTensor.h THCudaShortTensor_stride"
+  c_stride :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> CInt -> IO CLLong
+
+-- | c_newSizeOf :  state self -> THLongStorage *
+foreign import ccall "THCTensor.h THCudaShortTensor_newSizeOf"
+  c_newSizeOf :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> IO (Ptr C'THLongStorage)
+
+-- | c_newStrideOf :  state self -> THLongStorage *
+foreign import ccall "THCTensor.h THCudaShortTensor_newStrideOf"
+  c_newStrideOf :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> IO (Ptr C'THLongStorage)
+
+-- | c_data :  state self -> real *
+foreign import ccall "THCTensor.h THCudaShortTensor_data"
+  c_data :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> IO (Ptr CShort)
+
+-- | c_setFlag :  state self flag -> void
+foreign import ccall "THCTensor.h THCudaShortTensor_setFlag"
+  c_setFlag :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> CChar -> IO ()
+
+-- | c_clearFlag :  state self flag -> void
+foreign import ccall "THCTensor.h THCudaShortTensor_clearFlag"
+  c_clearFlag :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> CChar -> IO ()
+
+-- | c_new :  state -> THCTensor *
+foreign import ccall "THCTensor.h THCudaShortTensor_new"
+  c_new :: Ptr C'THCState -> IO (Ptr C'THCudaShortTensor)
+
+-- | c_newWithTensor :  state tensor -> THCTensor *
+foreign import ccall "THCTensor.h THCudaShortTensor_newWithTensor"
+  c_newWithTensor :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> IO (Ptr C'THCudaShortTensor)
+
+-- | c_newWithStorage :  state storage_ storageOffset_ size_ stride_ -> THCTensor *
+foreign import ccall "THCTensor.h THCudaShortTensor_newWithStorage"
+  c_newWithStorage :: Ptr C'THCState -> Ptr C'THCShortStorage -> CPtrdiff -> Ptr C'THLongStorage -> Ptr C'THLongStorage -> IO (Ptr C'THCudaShortTensor)
+
+-- | c_newWithStorage1d :  state storage_ storageOffset_ size0_ stride0_ -> THCTensor *
+foreign import ccall "THCTensor.h THCudaShortTensor_newWithStorage1d"
+  c_newWithStorage1d :: Ptr C'THCState -> Ptr C'THCShortStorage -> CPtrdiff -> CLLong -> CLLong -> IO (Ptr C'THCudaShortTensor)
+
+-- | c_newWithStorage2d :  state storage_ storageOffset_ size0_ stride0_ size1_ stride1_ -> THCTensor *
+foreign import ccall "THCTensor.h THCudaShortTensor_newWithStorage2d"
+  c_newWithStorage2d :: Ptr C'THCState -> Ptr C'THCShortStorage -> CPtrdiff -> CLLong -> CLLong -> CLLong -> CLLong -> IO (Ptr C'THCudaShortTensor)
+
+-- | c_newWithStorage3d :  state storage_ storageOffset_ size0_ stride0_ size1_ stride1_ size2_ stride2_ -> THCTensor *
+foreign import ccall "THCTensor.h THCudaShortTensor_newWithStorage3d"
+  c_newWithStorage3d :: Ptr C'THCState -> Ptr C'THCShortStorage -> CPtrdiff -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> IO (Ptr C'THCudaShortTensor)
+
+-- | c_newWithStorage4d :  state storage_ storageOffset_ size0_ stride0_ size1_ stride1_ size2_ stride2_ size3_ stride3_ -> THCTensor *
+foreign import ccall "THCTensor.h THCudaShortTensor_newWithStorage4d"
+  c_newWithStorage4d :: Ptr C'THCState -> Ptr C'THCShortStorage -> CPtrdiff -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> IO (Ptr C'THCudaShortTensor)
+
+-- | c_newWithSize :  state size_ stride_ -> THCTensor *
+foreign import ccall "THCTensor.h THCudaShortTensor_newWithSize"
+  c_newWithSize :: Ptr C'THCState -> Ptr C'THLongStorage -> Ptr C'THLongStorage -> IO (Ptr C'THCudaShortTensor)
+
+-- | c_newWithSize1d :  state size0_ -> THCTensor *
+foreign import ccall "THCTensor.h THCudaShortTensor_newWithSize1d"
+  c_newWithSize1d :: Ptr C'THCState -> CLLong -> IO (Ptr C'THCudaShortTensor)
+
+-- | c_newWithSize2d :  state size0_ size1_ -> THCTensor *
+foreign import ccall "THCTensor.h THCudaShortTensor_newWithSize2d"
+  c_newWithSize2d :: Ptr C'THCState -> CLLong -> CLLong -> IO (Ptr C'THCudaShortTensor)
+
+-- | c_newWithSize3d :  state size0_ size1_ size2_ -> THCTensor *
+foreign import ccall "THCTensor.h THCudaShortTensor_newWithSize3d"
+  c_newWithSize3d :: Ptr C'THCState -> CLLong -> CLLong -> CLLong -> IO (Ptr C'THCudaShortTensor)
+
+-- | c_newWithSize4d :  state size0_ size1_ size2_ size3_ -> THCTensor *
+foreign import ccall "THCTensor.h THCudaShortTensor_newWithSize4d"
+  c_newWithSize4d :: Ptr C'THCState -> CLLong -> CLLong -> CLLong -> CLLong -> IO (Ptr C'THCudaShortTensor)
+
+-- | c_newClone :  state self -> THCTensor *
+foreign import ccall "THCTensor.h THCudaShortTensor_newClone"
+  c_newClone :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> IO (Ptr C'THCudaShortTensor)
+
+-- | c_newContiguous :  state tensor -> THCTensor *
+foreign import ccall "THCTensor.h THCudaShortTensor_newContiguous"
+  c_newContiguous :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> IO (Ptr C'THCudaShortTensor)
+
+-- | c_newSelect :  state tensor dimension_ sliceIndex_ -> THCTensor *
+foreign import ccall "THCTensor.h THCudaShortTensor_newSelect"
+  c_newSelect :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> CInt -> CLLong -> IO (Ptr C'THCudaShortTensor)
+
+-- | c_newNarrow :  state tensor dimension_ firstIndex_ size_ -> THCTensor *
+foreign import ccall "THCTensor.h THCudaShortTensor_newNarrow"
+  c_newNarrow :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> CInt -> CLLong -> CLLong -> IO (Ptr C'THCudaShortTensor)
+
+-- | c_newTranspose :  state tensor dimension1_ dimension2_ -> THCTensor *
+foreign import ccall "THCTensor.h THCudaShortTensor_newTranspose"
+  c_newTranspose :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> CInt -> CInt -> IO (Ptr C'THCudaShortTensor)
+
+-- | c_newUnfold :  state tensor dimension_ size_ step_ -> THCTensor *
+foreign import ccall "THCTensor.h THCudaShortTensor_newUnfold"
+  c_newUnfold :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> CInt -> CLLong -> CLLong -> IO (Ptr C'THCudaShortTensor)
+
+-- | c_newView :  state tensor size -> THCTensor *
+foreign import ccall "THCTensor.h THCudaShortTensor_newView"
+  c_newView :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THLongStorage -> IO (Ptr C'THCudaShortTensor)
+
+-- | c_newFoldBatchDim :  state input -> THCTensor *
+foreign import ccall "THCTensor.h THCudaShortTensor_newFoldBatchDim"
+  c_newFoldBatchDim :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> IO (Ptr C'THCudaShortTensor)
+
+-- | c_newExpand :  state tensor size -> THCTensor *
+foreign import ccall "THCTensor.h THCudaShortTensor_newExpand"
+  c_newExpand :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THLongStorage -> IO (Ptr C'THCudaShortTensor)
+
+-- | c_expand :  state r tensor sizes -> void
+foreign import ccall "THCTensor.h THCudaShortTensor_expand"
+  c_expand :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> Ptr C'THLongStorage -> IO ()
+
+-- | c_expandNd :  state rets ops count -> void
+foreign import ccall "THCTensor.h THCudaShortTensor_expandNd"
+  c_expandNd :: Ptr C'THCState -> Ptr (Ptr C'THCudaShortTensor) -> Ptr (Ptr C'THCudaShortTensor) -> CInt -> IO ()
+
+-- | c_resize :  state tensor size stride -> void
+foreign import ccall "THCTensor.h THCudaShortTensor_resize"
+  c_resize :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THLongStorage -> Ptr C'THLongStorage -> IO ()
+
+-- | c_resizeAs :  state tensor src -> void
+foreign import ccall "THCTensor.h THCudaShortTensor_resizeAs"
+  c_resizeAs :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> IO ()
+
+-- | c_resize1d :  state tensor size0_ -> void
+foreign import ccall "THCTensor.h THCudaShortTensor_resize1d"
+  c_resize1d :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> CLLong -> IO ()
+
+-- | c_resize2d :  state tensor size0_ size1_ -> void
+foreign import ccall "THCTensor.h THCudaShortTensor_resize2d"
+  c_resize2d :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> CLLong -> CLLong -> IO ()
+
+-- | c_resize3d :  state tensor size0_ size1_ size2_ -> void
+foreign import ccall "THCTensor.h THCudaShortTensor_resize3d"
+  c_resize3d :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> CLLong -> CLLong -> CLLong -> IO ()
+
+-- | c_resize4d :  state tensor size0_ size1_ size2_ size3_ -> void
+foreign import ccall "THCTensor.h THCudaShortTensor_resize4d"
+  c_resize4d :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> CLLong -> CLLong -> CLLong -> CLLong -> IO ()
+
+-- | c_resize5d :  state tensor size0_ size1_ size2_ size3_ size4_ -> void
+foreign import ccall "THCTensor.h THCudaShortTensor_resize5d"
+  c_resize5d :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> IO ()
+
+-- | c_resizeNd :  state tensor nDimension size stride -> void
+foreign import ccall "THCTensor.h THCudaShortTensor_resizeNd"
+  c_resizeNd :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> CInt -> Ptr CLLong -> Ptr CLLong -> IO ()
+
+-- | c_set :  state self src -> void
+foreign import ccall "THCTensor.h THCudaShortTensor_set"
+  c_set :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> IO ()
+
+-- | c_setStorage :  state self storage_ storageOffset_ size_ stride_ -> void
+foreign import ccall "THCTensor.h THCudaShortTensor_setStorage"
+  c_setStorage :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCShortStorage -> CPtrdiff -> Ptr C'THLongStorage -> Ptr C'THLongStorage -> IO ()
+
+-- | c_setStorageNd :  state self storage storageOffset nDimension size stride -> void
+foreign import ccall "THCTensor.h THCudaShortTensor_setStorageNd"
+  c_setStorageNd :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCShortStorage -> CPtrdiff -> CInt -> Ptr CLLong -> Ptr CLLong -> IO ()
+
+-- | c_setStorage1d :  state self storage_ storageOffset_ size0_ stride0_ -> void
+foreign import ccall "THCTensor.h THCudaShortTensor_setStorage1d"
+  c_setStorage1d :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCShortStorage -> CPtrdiff -> CLLong -> CLLong -> IO ()
+
+-- | c_setStorage2d :  state self storage_ storageOffset_ size0_ stride0_ size1_ stride1_ -> void
+foreign import ccall "THCTensor.h THCudaShortTensor_setStorage2d"
+  c_setStorage2d :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCShortStorage -> CPtrdiff -> CLLong -> CLLong -> CLLong -> CLLong -> IO ()
+
+-- | c_setStorage3d :  state self storage_ storageOffset_ size0_ stride0_ size1_ stride1_ size2_ stride2_ -> void
+foreign import ccall "THCTensor.h THCudaShortTensor_setStorage3d"
+  c_setStorage3d :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCShortStorage -> CPtrdiff -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> IO ()
+
+-- | c_setStorage4d :  state self storage_ storageOffset_ size0_ stride0_ size1_ stride1_ size2_ stride2_ size3_ stride3_ -> void
+foreign import ccall "THCTensor.h THCudaShortTensor_setStorage4d"
+  c_setStorage4d :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCShortStorage -> CPtrdiff -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> IO ()
+
+-- | c_narrow :  state self src dimension_ firstIndex_ size_ -> void
+foreign import ccall "THCTensor.h THCudaShortTensor_narrow"
+  c_narrow :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> CInt -> CLLong -> CLLong -> IO ()
+
+-- | c_select :  state self src dimension_ sliceIndex_ -> void
+foreign import ccall "THCTensor.h THCudaShortTensor_select"
+  c_select :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> CInt -> CLLong -> IO ()
+
+-- | c_transpose :  state self src dimension1_ dimension2_ -> void
+foreign import ccall "THCTensor.h THCudaShortTensor_transpose"
+  c_transpose :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> CInt -> CInt -> IO ()
+
+-- | c_unfold :  state self src dimension_ size_ step_ -> void
+foreign import ccall "THCTensor.h THCudaShortTensor_unfold"
+  c_unfold :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> CInt -> CLLong -> CLLong -> IO ()
+
+-- | c_squeeze :  state self src -> void
+foreign import ccall "THCTensor.h THCudaShortTensor_squeeze"
+  c_squeeze :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> IO ()
+
+-- | c_squeeze1d :  state self src dimension_ -> void
+foreign import ccall "THCTensor.h THCudaShortTensor_squeeze1d"
+  c_squeeze1d :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> CInt -> IO ()
+
+-- | c_unsqueeze1d :  state self src dimension_ -> void
+foreign import ccall "THCTensor.h THCudaShortTensor_unsqueeze1d"
+  c_unsqueeze1d :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> CInt -> IO ()
+
+-- | c_isContiguous :  state self -> int
+foreign import ccall "THCTensor.h THCudaShortTensor_isContiguous"
+  c_isContiguous :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> IO CInt
+
+-- | c_isSameSizeAs :  state self src -> int
+foreign import ccall "THCTensor.h THCudaShortTensor_isSameSizeAs"
+  c_isSameSizeAs :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> IO CInt
+
+-- | c_isSetTo :  state self src -> int
+foreign import ccall "THCTensor.h THCudaShortTensor_isSetTo"
+  c_isSetTo :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> IO CInt
+
+-- | c_isSize :  state self dims -> int
+foreign import ccall "THCTensor.h THCudaShortTensor_isSize"
+  c_isSize :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THLongStorage -> IO CInt
+
+-- | c_nElement :  state self -> ptrdiff_t
+foreign import ccall "THCTensor.h THCudaShortTensor_nElement"
+  c_nElement :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> IO CPtrdiff
+
+-- | c_retain :  state self -> void
+foreign import ccall "THCTensor.h THCudaShortTensor_retain"
+  c_retain :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> IO ()
+
+-- | c_free :  state self -> void
+foreign import ccall "THCTensor.h THCudaShortTensor_free"
+  c_free :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> IO ()
+
+-- | c_freeCopyTo :  state self dst -> void
+foreign import ccall "THCTensor.h THCudaShortTensor_freeCopyTo"
+  c_freeCopyTo :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> IO ()
+
+-- | c_set1d :  state tensor x0 value -> void
+foreign import ccall "THCTensor.h THCudaShortTensor_set1d"
+  c_set1d :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> CLLong -> CShort -> IO ()
+
+-- | c_set2d :  state tensor x0 x1 value -> void
+foreign import ccall "THCTensor.h THCudaShortTensor_set2d"
+  c_set2d :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> CLLong -> CLLong -> CShort -> IO ()
+
+-- | c_set3d :  state tensor x0 x1 x2 value -> void
+foreign import ccall "THCTensor.h THCudaShortTensor_set3d"
+  c_set3d :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> CLLong -> CLLong -> CLLong -> CShort -> IO ()
+
+-- | c_set4d :  state tensor x0 x1 x2 x3 value -> void
+foreign import ccall "THCTensor.h THCudaShortTensor_set4d"
+  c_set4d :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> CLLong -> CLLong -> CLLong -> CLLong -> CShort -> IO ()
+
+-- | c_get1d :  state tensor x0 -> real
+foreign import ccall "THCTensor.h THCudaShortTensor_get1d"
+  c_get1d :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> CLLong -> IO CShort
+
+-- | c_get2d :  state tensor x0 x1 -> real
+foreign import ccall "THCTensor.h THCudaShortTensor_get2d"
+  c_get2d :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> CLLong -> CLLong -> IO CShort
+
+-- | c_get3d :  state tensor x0 x1 x2 -> real
+foreign import ccall "THCTensor.h THCudaShortTensor_get3d"
+  c_get3d :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> CLLong -> CLLong -> CLLong -> IO CShort
+
+-- | c_get4d :  state tensor x0 x1 x2 x3 -> real
+foreign import ccall "THCTensor.h THCudaShortTensor_get4d"
+  c_get4d :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> CLLong -> CLLong -> CLLong -> CLLong -> IO CShort
+
+-- | c_getDevice :  state self -> int
+foreign import ccall "THCTensor.h THCudaShortTensor_getDevice"
+  c_getDevice :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> IO CInt
+
+-- | c_sizeDesc :  state tensor -> THCDescBuff
+foreign import ccall "THCTensor.h THCudaShortTensor_sizeDesc"
+  c_sizeDesc :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> IO (Ptr C'THCDescBuff)
+
+-- | p_storage : Pointer to function : state self -> THCStorage *
+foreign import ccall "THCTensor.h &THCudaShortTensor_storage"
+  p_storage :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> IO (Ptr C'THCShortStorage))
+
+-- | p_storageOffset : Pointer to function : state self -> ptrdiff_t
+foreign import ccall "THCTensor.h &THCudaShortTensor_storageOffset"
+  p_storageOffset :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> IO CPtrdiff)
+
+-- | p_nDimension : Pointer to function : state self -> int
+foreign import ccall "THCTensor.h &THCudaShortTensor_nDimension"
+  p_nDimension :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> IO CInt)
+
+-- | p_size : Pointer to function : state self dim -> int64_t
+foreign import ccall "THCTensor.h &THCudaShortTensor_size"
+  p_size :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> CInt -> IO CLLong)
+
+-- | p_stride : Pointer to function : state self dim -> int64_t
+foreign import ccall "THCTensor.h &THCudaShortTensor_stride"
+  p_stride :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> CInt -> IO CLLong)
+
+-- | p_newSizeOf : Pointer to function : state self -> THLongStorage *
+foreign import ccall "THCTensor.h &THCudaShortTensor_newSizeOf"
+  p_newSizeOf :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> IO (Ptr C'THLongStorage))
+
+-- | p_newStrideOf : Pointer to function : state self -> THLongStorage *
+foreign import ccall "THCTensor.h &THCudaShortTensor_newStrideOf"
+  p_newStrideOf :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> IO (Ptr C'THLongStorage))
+
+-- | p_data : Pointer to function : state self -> real *
+foreign import ccall "THCTensor.h &THCudaShortTensor_data"
+  p_data :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> IO (Ptr CShort))
+
+-- | p_setFlag : Pointer to function : state self flag -> void
+foreign import ccall "THCTensor.h &THCudaShortTensor_setFlag"
+  p_setFlag :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> CChar -> IO ())
+
+-- | p_clearFlag : Pointer to function : state self flag -> void
+foreign import ccall "THCTensor.h &THCudaShortTensor_clearFlag"
+  p_clearFlag :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> CChar -> IO ())
+
+-- | p_new : Pointer to function : state -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaShortTensor_new"
+  p_new :: FunPtr (Ptr C'THCState -> IO (Ptr C'THCudaShortTensor))
+
+-- | p_newWithTensor : Pointer to function : state tensor -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaShortTensor_newWithTensor"
+  p_newWithTensor :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> IO (Ptr C'THCudaShortTensor))
+
+-- | p_newWithStorage : Pointer to function : state storage_ storageOffset_ size_ stride_ -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaShortTensor_newWithStorage"
+  p_newWithStorage :: FunPtr (Ptr C'THCState -> Ptr C'THCShortStorage -> CPtrdiff -> Ptr C'THLongStorage -> Ptr C'THLongStorage -> IO (Ptr C'THCudaShortTensor))
+
+-- | p_newWithStorage1d : Pointer to function : state storage_ storageOffset_ size0_ stride0_ -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaShortTensor_newWithStorage1d"
+  p_newWithStorage1d :: FunPtr (Ptr C'THCState -> Ptr C'THCShortStorage -> CPtrdiff -> CLLong -> CLLong -> IO (Ptr C'THCudaShortTensor))
+
+-- | p_newWithStorage2d : Pointer to function : state storage_ storageOffset_ size0_ stride0_ size1_ stride1_ -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaShortTensor_newWithStorage2d"
+  p_newWithStorage2d :: FunPtr (Ptr C'THCState -> Ptr C'THCShortStorage -> CPtrdiff -> CLLong -> CLLong -> CLLong -> CLLong -> IO (Ptr C'THCudaShortTensor))
+
+-- | p_newWithStorage3d : Pointer to function : state storage_ storageOffset_ size0_ stride0_ size1_ stride1_ size2_ stride2_ -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaShortTensor_newWithStorage3d"
+  p_newWithStorage3d :: FunPtr (Ptr C'THCState -> Ptr C'THCShortStorage -> CPtrdiff -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> IO (Ptr C'THCudaShortTensor))
+
+-- | p_newWithStorage4d : Pointer to function : state storage_ storageOffset_ size0_ stride0_ size1_ stride1_ size2_ stride2_ size3_ stride3_ -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaShortTensor_newWithStorage4d"
+  p_newWithStorage4d :: FunPtr (Ptr C'THCState -> Ptr C'THCShortStorage -> CPtrdiff -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> IO (Ptr C'THCudaShortTensor))
+
+-- | p_newWithSize : Pointer to function : state size_ stride_ -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaShortTensor_newWithSize"
+  p_newWithSize :: FunPtr (Ptr C'THCState -> Ptr C'THLongStorage -> Ptr C'THLongStorage -> IO (Ptr C'THCudaShortTensor))
+
+-- | p_newWithSize1d : Pointer to function : state size0_ -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaShortTensor_newWithSize1d"
+  p_newWithSize1d :: FunPtr (Ptr C'THCState -> CLLong -> IO (Ptr C'THCudaShortTensor))
+
+-- | p_newWithSize2d : Pointer to function : state size0_ size1_ -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaShortTensor_newWithSize2d"
+  p_newWithSize2d :: FunPtr (Ptr C'THCState -> CLLong -> CLLong -> IO (Ptr C'THCudaShortTensor))
+
+-- | p_newWithSize3d : Pointer to function : state size0_ size1_ size2_ -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaShortTensor_newWithSize3d"
+  p_newWithSize3d :: FunPtr (Ptr C'THCState -> CLLong -> CLLong -> CLLong -> IO (Ptr C'THCudaShortTensor))
+
+-- | p_newWithSize4d : Pointer to function : state size0_ size1_ size2_ size3_ -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaShortTensor_newWithSize4d"
+  p_newWithSize4d :: FunPtr (Ptr C'THCState -> CLLong -> CLLong -> CLLong -> CLLong -> IO (Ptr C'THCudaShortTensor))
+
+-- | p_newClone : Pointer to function : state self -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaShortTensor_newClone"
+  p_newClone :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> IO (Ptr C'THCudaShortTensor))
+
+-- | p_newContiguous : Pointer to function : state tensor -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaShortTensor_newContiguous"
+  p_newContiguous :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> IO (Ptr C'THCudaShortTensor))
+
+-- | p_newSelect : Pointer to function : state tensor dimension_ sliceIndex_ -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaShortTensor_newSelect"
+  p_newSelect :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> CInt -> CLLong -> IO (Ptr C'THCudaShortTensor))
+
+-- | p_newNarrow : Pointer to function : state tensor dimension_ firstIndex_ size_ -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaShortTensor_newNarrow"
+  p_newNarrow :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> CInt -> CLLong -> CLLong -> IO (Ptr C'THCudaShortTensor))
+
+-- | p_newTranspose : Pointer to function : state tensor dimension1_ dimension2_ -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaShortTensor_newTranspose"
+  p_newTranspose :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> CInt -> CInt -> IO (Ptr C'THCudaShortTensor))
+
+-- | p_newUnfold : Pointer to function : state tensor dimension_ size_ step_ -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaShortTensor_newUnfold"
+  p_newUnfold :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> CInt -> CLLong -> CLLong -> IO (Ptr C'THCudaShortTensor))
+
+-- | p_newView : Pointer to function : state tensor size -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaShortTensor_newView"
+  p_newView :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THLongStorage -> IO (Ptr C'THCudaShortTensor))
+
+-- | p_newFoldBatchDim : Pointer to function : state input -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaShortTensor_newFoldBatchDim"
+  p_newFoldBatchDim :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> IO (Ptr C'THCudaShortTensor))
+
+-- | p_newExpand : Pointer to function : state tensor size -> THCTensor *
+foreign import ccall "THCTensor.h &THCudaShortTensor_newExpand"
+  p_newExpand :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THLongStorage -> IO (Ptr C'THCudaShortTensor))
+
+-- | p_expand : Pointer to function : state r tensor sizes -> void
+foreign import ccall "THCTensor.h &THCudaShortTensor_expand"
+  p_expand :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> Ptr C'THLongStorage -> IO ())
+
+-- | p_expandNd : Pointer to function : state rets ops count -> void
+foreign import ccall "THCTensor.h &THCudaShortTensor_expandNd"
+  p_expandNd :: FunPtr (Ptr C'THCState -> Ptr (Ptr C'THCudaShortTensor) -> Ptr (Ptr C'THCudaShortTensor) -> CInt -> IO ())
+
+-- | p_resize : Pointer to function : state tensor size stride -> void
+foreign import ccall "THCTensor.h &THCudaShortTensor_resize"
+  p_resize :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THLongStorage -> Ptr C'THLongStorage -> IO ())
+
+-- | p_resizeAs : Pointer to function : state tensor src -> void
+foreign import ccall "THCTensor.h &THCudaShortTensor_resizeAs"
+  p_resizeAs :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> IO ())
+
+-- | p_resize1d : Pointer to function : state tensor size0_ -> void
+foreign import ccall "THCTensor.h &THCudaShortTensor_resize1d"
+  p_resize1d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> CLLong -> IO ())
+
+-- | p_resize2d : Pointer to function : state tensor size0_ size1_ -> void
+foreign import ccall "THCTensor.h &THCudaShortTensor_resize2d"
+  p_resize2d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> CLLong -> CLLong -> IO ())
+
+-- | p_resize3d : Pointer to function : state tensor size0_ size1_ size2_ -> void
+foreign import ccall "THCTensor.h &THCudaShortTensor_resize3d"
+  p_resize3d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> CLLong -> CLLong -> CLLong -> IO ())
+
+-- | p_resize4d : Pointer to function : state tensor size0_ size1_ size2_ size3_ -> void
+foreign import ccall "THCTensor.h &THCudaShortTensor_resize4d"
+  p_resize4d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> CLLong -> CLLong -> CLLong -> CLLong -> IO ())
+
+-- | p_resize5d : Pointer to function : state tensor size0_ size1_ size2_ size3_ size4_ -> void
+foreign import ccall "THCTensor.h &THCudaShortTensor_resize5d"
+  p_resize5d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> IO ())
+
+-- | p_resizeNd : Pointer to function : state tensor nDimension size stride -> void
+foreign import ccall "THCTensor.h &THCudaShortTensor_resizeNd"
+  p_resizeNd :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> CInt -> Ptr CLLong -> Ptr CLLong -> IO ())
+
+-- | p_set : Pointer to function : state self src -> void
+foreign import ccall "THCTensor.h &THCudaShortTensor_set"
+  p_set :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> IO ())
+
+-- | p_setStorage : Pointer to function : state self storage_ storageOffset_ size_ stride_ -> void
+foreign import ccall "THCTensor.h &THCudaShortTensor_setStorage"
+  p_setStorage :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCShortStorage -> CPtrdiff -> Ptr C'THLongStorage -> Ptr C'THLongStorage -> IO ())
+
+-- | p_setStorageNd : Pointer to function : state self storage storageOffset nDimension size stride -> void
+foreign import ccall "THCTensor.h &THCudaShortTensor_setStorageNd"
+  p_setStorageNd :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCShortStorage -> CPtrdiff -> CInt -> Ptr CLLong -> Ptr CLLong -> IO ())
+
+-- | p_setStorage1d : Pointer to function : state self storage_ storageOffset_ size0_ stride0_ -> void
+foreign import ccall "THCTensor.h &THCudaShortTensor_setStorage1d"
+  p_setStorage1d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCShortStorage -> CPtrdiff -> CLLong -> CLLong -> IO ())
+
+-- | p_setStorage2d : Pointer to function : state self storage_ storageOffset_ size0_ stride0_ size1_ stride1_ -> void
+foreign import ccall "THCTensor.h &THCudaShortTensor_setStorage2d"
+  p_setStorage2d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCShortStorage -> CPtrdiff -> CLLong -> CLLong -> CLLong -> CLLong -> IO ())
+
+-- | p_setStorage3d : Pointer to function : state self storage_ storageOffset_ size0_ stride0_ size1_ stride1_ size2_ stride2_ -> void
+foreign import ccall "THCTensor.h &THCudaShortTensor_setStorage3d"
+  p_setStorage3d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCShortStorage -> CPtrdiff -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> IO ())
+
+-- | p_setStorage4d : Pointer to function : state self storage_ storageOffset_ size0_ stride0_ size1_ stride1_ size2_ stride2_ size3_ stride3_ -> void
+foreign import ccall "THCTensor.h &THCudaShortTensor_setStorage4d"
+  p_setStorage4d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCShortStorage -> CPtrdiff -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> CLLong -> IO ())
+
+-- | p_narrow : Pointer to function : state self src dimension_ firstIndex_ size_ -> void
+foreign import ccall "THCTensor.h &THCudaShortTensor_narrow"
+  p_narrow :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> CInt -> CLLong -> CLLong -> IO ())
+
+-- | p_select : Pointer to function : state self src dimension_ sliceIndex_ -> void
+foreign import ccall "THCTensor.h &THCudaShortTensor_select"
+  p_select :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> CInt -> CLLong -> IO ())
+
+-- | p_transpose : Pointer to function : state self src dimension1_ dimension2_ -> void
+foreign import ccall "THCTensor.h &THCudaShortTensor_transpose"
+  p_transpose :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> CInt -> CInt -> IO ())
+
+-- | p_unfold : Pointer to function : state self src dimension_ size_ step_ -> void
+foreign import ccall "THCTensor.h &THCudaShortTensor_unfold"
+  p_unfold :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> CInt -> CLLong -> CLLong -> IO ())
+
+-- | p_squeeze : Pointer to function : state self src -> void
+foreign import ccall "THCTensor.h &THCudaShortTensor_squeeze"
+  p_squeeze :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> IO ())
+
+-- | p_squeeze1d : Pointer to function : state self src dimension_ -> void
+foreign import ccall "THCTensor.h &THCudaShortTensor_squeeze1d"
+  p_squeeze1d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> CInt -> IO ())
+
+-- | p_unsqueeze1d : Pointer to function : state self src dimension_ -> void
+foreign import ccall "THCTensor.h &THCudaShortTensor_unsqueeze1d"
+  p_unsqueeze1d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> CInt -> IO ())
+
+-- | p_isContiguous : Pointer to function : state self -> int
+foreign import ccall "THCTensor.h &THCudaShortTensor_isContiguous"
+  p_isContiguous :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> IO CInt)
+
+-- | p_isSameSizeAs : Pointer to function : state self src -> int
+foreign import ccall "THCTensor.h &THCudaShortTensor_isSameSizeAs"
+  p_isSameSizeAs :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> IO CInt)
+
+-- | p_isSetTo : Pointer to function : state self src -> int
+foreign import ccall "THCTensor.h &THCudaShortTensor_isSetTo"
+  p_isSetTo :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> IO CInt)
+
+-- | p_isSize : Pointer to function : state self dims -> int
+foreign import ccall "THCTensor.h &THCudaShortTensor_isSize"
+  p_isSize :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THLongStorage -> IO CInt)
+
+-- | p_nElement : Pointer to function : state self -> ptrdiff_t
+foreign import ccall "THCTensor.h &THCudaShortTensor_nElement"
+  p_nElement :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> IO CPtrdiff)
+
+-- | p_retain : Pointer to function : state self -> void
+foreign import ccall "THCTensor.h &THCudaShortTensor_retain"
+  p_retain :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> IO ())
+
+-- | p_free : Pointer to function : state self -> void
+foreign import ccall "THCTensor.h &THCudaShortTensor_free"
+  p_free :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> IO ())
+
+-- | p_freeCopyTo : Pointer to function : state self dst -> void
+foreign import ccall "THCTensor.h &THCudaShortTensor_freeCopyTo"
+  p_freeCopyTo :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> IO ())
+
+-- | p_set1d : Pointer to function : state tensor x0 value -> void
+foreign import ccall "THCTensor.h &THCudaShortTensor_set1d"
+  p_set1d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> CLLong -> CShort -> IO ())
+
+-- | p_set2d : Pointer to function : state tensor x0 x1 value -> void
+foreign import ccall "THCTensor.h &THCudaShortTensor_set2d"
+  p_set2d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> CLLong -> CLLong -> CShort -> IO ())
+
+-- | p_set3d : Pointer to function : state tensor x0 x1 x2 value -> void
+foreign import ccall "THCTensor.h &THCudaShortTensor_set3d"
+  p_set3d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> CLLong -> CLLong -> CLLong -> CShort -> IO ())
+
+-- | p_set4d : Pointer to function : state tensor x0 x1 x2 x3 value -> void
+foreign import ccall "THCTensor.h &THCudaShortTensor_set4d"
+  p_set4d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> CLLong -> CLLong -> CLLong -> CLLong -> CShort -> IO ())
+
+-- | p_get1d : Pointer to function : state tensor x0 -> real
+foreign import ccall "THCTensor.h &THCudaShortTensor_get1d"
+  p_get1d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> CLLong -> IO CShort)
+
+-- | p_get2d : Pointer to function : state tensor x0 x1 -> real
+foreign import ccall "THCTensor.h &THCudaShortTensor_get2d"
+  p_get2d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> CLLong -> CLLong -> IO CShort)
+
+-- | p_get3d : Pointer to function : state tensor x0 x1 x2 -> real
+foreign import ccall "THCTensor.h &THCudaShortTensor_get3d"
+  p_get3d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> CLLong -> CLLong -> CLLong -> IO CShort)
+
+-- | p_get4d : Pointer to function : state tensor x0 x1 x2 x3 -> real
+foreign import ccall "THCTensor.h &THCudaShortTensor_get4d"
+  p_get4d :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> CLLong -> CLLong -> CLLong -> CLLong -> IO CShort)
+
+-- | p_getDevice : Pointer to function : state self -> int
+foreign import ccall "THCTensor.h &THCudaShortTensor_getDevice"
+  p_getDevice :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> IO CInt)
+
+-- | p_sizeDesc : Pointer to function : state tensor -> THCDescBuff
+foreign import ccall "THCTensor.h &THCudaShortTensor_sizeDesc"
+  p_sizeDesc :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> IO (Ptr C'THCDescBuff))
diff --git a/src/Torch/FFI/THC/Short/TensorCopy.hs b/src/Torch/FFI/THC/Short/TensorCopy.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Short/TensorCopy.hs
@@ -0,0 +1,177 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Short.TensorCopy where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_copy :  state self src -> void
+foreign import ccall "THCTensorCopy.h THCudaShortTensor_copy"
+  c_copy :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> IO ()
+
+-- | c_copyIgnoringOverlaps :  state self src -> void
+foreign import ccall "THCTensorCopy.h THCudaShortTensor_copyIgnoringOverlaps"
+  c_copyIgnoringOverlaps :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> IO ()
+
+-- | c_copyByte :  state self src -> void
+foreign import ccall "THCTensorCopy.h THCudaShortTensor_copyByte"
+  c_copyByte :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THByteTensor -> IO ()
+
+-- | c_copyChar :  state self src -> void
+foreign import ccall "THCTensorCopy.h THCudaShortTensor_copyChar"
+  c_copyChar :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCharTensor -> IO ()
+
+-- | c_copyShort :  state self src -> void
+foreign import ccall "THCTensorCopy.h THCudaShortTensor_copyShort"
+  c_copyShort :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THShortTensor -> IO ()
+
+-- | c_copyInt :  state self src -> void
+foreign import ccall "THCTensorCopy.h THCudaShortTensor_copyInt"
+  c_copyInt :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THIntTensor -> IO ()
+
+-- | c_copyLong :  state self src -> void
+foreign import ccall "THCTensorCopy.h THCudaShortTensor_copyLong"
+  c_copyLong :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THLongTensor -> IO ()
+
+-- | c_copyFloat :  state self src -> void
+foreign import ccall "THCTensorCopy.h THCudaShortTensor_copyFloat"
+  c_copyFloat :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THFloatTensor -> IO ()
+
+-- | c_copyDouble :  state self src -> void
+foreign import ccall "THCTensorCopy.h THCudaShortTensor_copyDouble"
+  c_copyDouble :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THDoubleTensor -> IO ()
+
+-- | c_copyHalf :  state self src -> void
+foreign import ccall "THCTensorCopy.h THCudaShortTensor_copyHalf"
+  c_copyHalf :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THHalfTensor -> IO ()
+
+-- | c_copyCudaByte :  state dst src -> void
+foreign import ccall "THCTensorCopy.h THCudaShortTensor_copyCudaByte"
+  c_copyCudaByte :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaByteTensor -> IO ()
+
+-- | c_copyCudaChar :  state dst src -> void
+foreign import ccall "THCTensorCopy.h THCudaShortTensor_copyCudaChar"
+  c_copyCudaChar :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaCharTensor -> IO ()
+
+-- | c_copyCudaShort :  state dst src -> void
+foreign import ccall "THCTensorCopy.h THCudaShortTensor_copyCudaShort"
+  c_copyCudaShort :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> IO ()
+
+-- | c_copyCudaInt :  state dst src -> void
+foreign import ccall "THCTensorCopy.h THCudaShortTensor_copyCudaInt"
+  c_copyCudaInt :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaIntTensor -> IO ()
+
+-- | c_copyCudaLong :  state dst src -> void
+foreign import ccall "THCTensorCopy.h THCudaShortTensor_copyCudaLong"
+  c_copyCudaLong :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaLongTensor -> IO ()
+
+-- | c_copyCudaDouble :  state dst src -> void
+foreign import ccall "THCTensorCopy.h THCudaShortTensor_copyCudaDouble"
+  c_copyCudaDouble :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_copyCuda :  state self src -> void
+foreign import ccall "THCTensorCopy.h THCudaShortTensor_copyCuda"
+  c_copyCuda :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> IO ()
+
+-- | c_thCopyCuda :  state self src -> void
+foreign import ccall "THCTensorCopy.h THShortTensor_copyCuda"
+  c_thCopyCuda :: Ptr C'THCState -> Ptr C'THShortTensor -> Ptr C'THCudaShortTensor -> IO ()
+
+-- | c_copyCPU :  state self src -> void
+foreign import ccall "THCTensorCopy.h THCudaShortTensor_copyCPU"
+  c_copyCPU :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THShortTensor -> IO ()
+
+-- | c_copyAsyncCPU :  state self src -> void
+foreign import ccall "THCTensorCopy.h THCudaShortTensor_copyAsyncCPU"
+  c_copyAsyncCPU :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THShortTensor -> IO ()
+
+-- | c_thCopyAsyncCuda :  state self src -> void
+foreign import ccall "THCTensorCopy.h THShortTensor_copyAsyncCuda"
+  c_thCopyAsyncCuda :: Ptr C'THCState -> Ptr C'THShortTensor -> Ptr C'THCudaShortTensor -> IO ()
+
+-- | p_copy : Pointer to function : state self src -> void
+foreign import ccall "THCTensorCopy.h &THCudaShortTensor_copy"
+  p_copy :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> IO ())
+
+-- | p_copyIgnoringOverlaps : Pointer to function : state self src -> void
+foreign import ccall "THCTensorCopy.h &THCudaShortTensor_copyIgnoringOverlaps"
+  p_copyIgnoringOverlaps :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> IO ())
+
+-- | p_copyByte : Pointer to function : state self src -> void
+foreign import ccall "THCTensorCopy.h &THCudaShortTensor_copyByte"
+  p_copyByte :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THByteTensor -> IO ())
+
+-- | p_copyChar : Pointer to function : state self src -> void
+foreign import ccall "THCTensorCopy.h &THCudaShortTensor_copyChar"
+  p_copyChar :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCharTensor -> IO ())
+
+-- | p_copyShort : Pointer to function : state self src -> void
+foreign import ccall "THCTensorCopy.h &THCudaShortTensor_copyShort"
+  p_copyShort :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THShortTensor -> IO ())
+
+-- | p_copyInt : Pointer to function : state self src -> void
+foreign import ccall "THCTensorCopy.h &THCudaShortTensor_copyInt"
+  p_copyInt :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THIntTensor -> IO ())
+
+-- | p_copyLong : Pointer to function : state self src -> void
+foreign import ccall "THCTensorCopy.h &THCudaShortTensor_copyLong"
+  p_copyLong :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THLongTensor -> IO ())
+
+-- | p_copyFloat : Pointer to function : state self src -> void
+foreign import ccall "THCTensorCopy.h &THCudaShortTensor_copyFloat"
+  p_copyFloat :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THFloatTensor -> IO ())
+
+-- | p_copyDouble : Pointer to function : state self src -> void
+foreign import ccall "THCTensorCopy.h &THCudaShortTensor_copyDouble"
+  p_copyDouble :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THDoubleTensor -> IO ())
+
+-- | p_copyHalf : Pointer to function : state self src -> void
+foreign import ccall "THCTensorCopy.h &THCudaShortTensor_copyHalf"
+  p_copyHalf :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THHalfTensor -> IO ())
+
+-- | p_copyCudaByte : Pointer to function : state dst src -> void
+foreign import ccall "THCTensorCopy.h &THCudaShortTensor_copyCudaByte"
+  p_copyCudaByte :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaByteTensor -> IO ())
+
+-- | p_copyCudaChar : Pointer to function : state dst src -> void
+foreign import ccall "THCTensorCopy.h &THCudaShortTensor_copyCudaChar"
+  p_copyCudaChar :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaCharTensor -> IO ())
+
+-- | p_copyCudaShort : Pointer to function : state dst src -> void
+foreign import ccall "THCTensorCopy.h &THCudaShortTensor_copyCudaShort"
+  p_copyCudaShort :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> IO ())
+
+-- | p_copyCudaInt : Pointer to function : state dst src -> void
+foreign import ccall "THCTensorCopy.h &THCudaShortTensor_copyCudaInt"
+  p_copyCudaInt :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaIntTensor -> IO ())
+
+-- | p_copyCudaLong : Pointer to function : state dst src -> void
+foreign import ccall "THCTensorCopy.h &THCudaShortTensor_copyCudaLong"
+  p_copyCudaLong :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaLongTensor -> IO ())
+
+-- | p_copyCudaDouble : Pointer to function : state dst src -> void
+foreign import ccall "THCTensorCopy.h &THCudaShortTensor_copyCudaDouble"
+  p_copyCudaDouble :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_copyCuda : Pointer to function : state self src -> void
+foreign import ccall "THCTensorCopy.h &THCudaShortTensor_copyCuda"
+  p_copyCuda :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> IO ())
+
+-- | p_thCopyCuda : Pointer to function : state self src -> void
+foreign import ccall "THCTensorCopy.h &THShortTensor_copyCuda"
+  p_thCopyCuda :: FunPtr (Ptr C'THCState -> Ptr C'THShortTensor -> Ptr C'THCudaShortTensor -> IO ())
+
+-- | p_copyCPU : Pointer to function : state self src -> void
+foreign import ccall "THCTensorCopy.h &THCudaShortTensor_copyCPU"
+  p_copyCPU :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THShortTensor -> IO ())
+
+-- | p_copyAsyncCPU : Pointer to function : state self src -> void
+foreign import ccall "THCTensorCopy.h &THCudaShortTensor_copyAsyncCPU"
+  p_copyAsyncCPU :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THShortTensor -> IO ())
+
+-- | p_thCopyAsyncCuda : Pointer to function : state self src -> void
+foreign import ccall "THCTensorCopy.h &THShortTensor_copyAsyncCuda"
+  p_thCopyAsyncCuda :: FunPtr (Ptr C'THCState -> Ptr C'THShortTensor -> Ptr C'THCudaShortTensor -> IO ())
diff --git a/src/Torch/FFI/THC/Short/TensorIndex.hs b/src/Torch/FFI/THC/Short/TensorIndex.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Short/TensorIndex.hs
@@ -0,0 +1,97 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Short.TensorIndex where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_indexCopy :  state res_ dim indices src -> void
+foreign import ccall "THCTensorIndex.h THCudaShortTensor_indexCopy"
+  c_indexCopy :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> CInt -> Ptr C'THCudaLongTensor -> Ptr C'THCudaShortTensor -> IO ()
+
+-- | c_indexAdd :  state res_ dim indices src -> void
+foreign import ccall "THCTensorIndex.h THCudaShortTensor_indexAdd"
+  c_indexAdd :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> CInt -> Ptr C'THCudaLongTensor -> Ptr C'THCudaShortTensor -> IO ()
+
+-- | c_indexFill :  state tensor dim index val -> void
+foreign import ccall "THCTensorIndex.h THCudaShortTensor_indexFill"
+  c_indexFill :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> CInt -> Ptr C'THCudaLongTensor -> CShort -> IO ()
+
+-- | c_indexSelect :  state tensor src dim index -> void
+foreign import ccall "THCTensorIndex.h THCudaShortTensor_indexSelect"
+  c_indexSelect :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> CInt -> Ptr C'THCudaLongTensor -> IO ()
+
+-- | c_take :  state res_ src index -> void
+foreign import ccall "THCTensorIndex.h THCudaShortTensor_take"
+  c_take :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> Ptr C'THCudaLongTensor -> IO ()
+
+-- | c_put :  state res_ indices src accumulate -> void
+foreign import ccall "THCTensorIndex.h THCudaShortTensor_put"
+  c_put :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaShortTensor -> CInt -> IO ()
+
+-- | c_indexCopy_long :  state res_ dim indices src -> void
+foreign import ccall "THCTensorIndex.h THCudaShortTensor_indexCopy_long"
+  c_indexCopy_long :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> CInt -> Ptr C'THLongTensor -> Ptr C'THCudaShortTensor -> IO ()
+
+-- | c_indexAdd_long :  state res_ dim indices src -> void
+foreign import ccall "THCTensorIndex.h THCudaShortTensor_indexAdd_long"
+  c_indexAdd_long :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> CInt -> Ptr C'THLongTensor -> Ptr C'THCudaShortTensor -> IO ()
+
+-- | c_indexFill_long :  state tensor dim index val -> void
+foreign import ccall "THCTensorIndex.h THCudaShortTensor_indexFill_long"
+  c_indexFill_long :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> CInt -> Ptr C'THLongTensor -> CShort -> IO ()
+
+-- | c_indexSelect_long :  state tensor src dim index -> void
+foreign import ccall "THCTensorIndex.h THCudaShortTensor_indexSelect_long"
+  c_indexSelect_long :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> CInt -> Ptr C'THLongTensor -> IO ()
+
+-- | c_calculateAdvancedIndexingOffsets :  state output indexed baseOffset indexers -> void
+foreign import ccall "THCTensorIndex.h THCudaShortTensor_calculateAdvancedIndexingOffsets"
+  c_calculateAdvancedIndexingOffsets :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaShortTensor -> CPtrdiff -> Ptr (Ptr C'THCudaLongTensor) -> IO ()
+
+-- | p_indexCopy : Pointer to function : state res_ dim indices src -> void
+foreign import ccall "THCTensorIndex.h &THCudaShortTensor_indexCopy"
+  p_indexCopy :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> CInt -> Ptr C'THCudaLongTensor -> Ptr C'THCudaShortTensor -> IO ())
+
+-- | p_indexAdd : Pointer to function : state res_ dim indices src -> void
+foreign import ccall "THCTensorIndex.h &THCudaShortTensor_indexAdd"
+  p_indexAdd :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> CInt -> Ptr C'THCudaLongTensor -> Ptr C'THCudaShortTensor -> IO ())
+
+-- | p_indexFill : Pointer to function : state tensor dim index val -> void
+foreign import ccall "THCTensorIndex.h &THCudaShortTensor_indexFill"
+  p_indexFill :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> CInt -> Ptr C'THCudaLongTensor -> CShort -> IO ())
+
+-- | p_indexSelect : Pointer to function : state tensor src dim index -> void
+foreign import ccall "THCTensorIndex.h &THCudaShortTensor_indexSelect"
+  p_indexSelect :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> CInt -> Ptr C'THCudaLongTensor -> IO ())
+
+-- | p_take : Pointer to function : state res_ src index -> void
+foreign import ccall "THCTensorIndex.h &THCudaShortTensor_take"
+  p_take :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> Ptr C'THCudaLongTensor -> IO ())
+
+-- | p_put : Pointer to function : state res_ indices src accumulate -> void
+foreign import ccall "THCTensorIndex.h &THCudaShortTensor_put"
+  p_put :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaShortTensor -> CInt -> IO ())
+
+-- | p_indexCopy_long : Pointer to function : state res_ dim indices src -> void
+foreign import ccall "THCTensorIndex.h &THCudaShortTensor_indexCopy_long"
+  p_indexCopy_long :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> CInt -> Ptr C'THLongTensor -> Ptr C'THCudaShortTensor -> IO ())
+
+-- | p_indexAdd_long : Pointer to function : state res_ dim indices src -> void
+foreign import ccall "THCTensorIndex.h &THCudaShortTensor_indexAdd_long"
+  p_indexAdd_long :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> CInt -> Ptr C'THLongTensor -> Ptr C'THCudaShortTensor -> IO ())
+
+-- | p_indexFill_long : Pointer to function : state tensor dim index val -> void
+foreign import ccall "THCTensorIndex.h &THCudaShortTensor_indexFill_long"
+  p_indexFill_long :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> CInt -> Ptr C'THLongTensor -> CShort -> IO ())
+
+-- | p_indexSelect_long : Pointer to function : state tensor src dim index -> void
+foreign import ccall "THCTensorIndex.h &THCudaShortTensor_indexSelect_long"
+  p_indexSelect_long :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> CInt -> Ptr C'THLongTensor -> IO ())
+
+-- | p_calculateAdvancedIndexingOffsets : Pointer to function : state output indexed baseOffset indexers -> void
+foreign import ccall "THCTensorIndex.h &THCudaShortTensor_calculateAdvancedIndexingOffsets"
+  p_calculateAdvancedIndexingOffsets :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaShortTensor -> CPtrdiff -> Ptr (Ptr C'THCudaLongTensor) -> IO ())
diff --git a/src/Torch/FFI/THC/Short/TensorMasked.hs b/src/Torch/FFI/THC/Short/TensorMasked.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Short/TensorMasked.hs
@@ -0,0 +1,57 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Short.TensorMasked where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_maskedFill :  state tensor mask value -> void
+foreign import ccall "THCTensorMasked.h THCudaShortTensor_maskedFill"
+  c_maskedFill :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaByteTensor -> CShort -> IO ()
+
+-- | c_maskedFillByte :  state tensor mask value -> void
+foreign import ccall "THCTensorMasked.h THCudaShortTensor_maskedFillByte"
+  c_maskedFillByte :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THByteTensor -> CShort -> IO ()
+
+-- | c_maskedCopy :  state tensor mask src -> void
+foreign import ccall "THCTensorMasked.h THCudaShortTensor_maskedCopy"
+  c_maskedCopy :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaByteTensor -> Ptr C'THCudaShortTensor -> IO ()
+
+-- | c_maskedCopyByte :  state tensor mask src -> void
+foreign import ccall "THCTensorMasked.h THCudaShortTensor_maskedCopyByte"
+  c_maskedCopyByte :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THByteTensor -> Ptr C'THCudaShortTensor -> IO ()
+
+-- | c_maskedSelect :  state tensor src mask -> void
+foreign import ccall "THCTensorMasked.h THCudaShortTensor_maskedSelect"
+  c_maskedSelect :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> Ptr C'THCudaByteTensor -> IO ()
+
+-- | c_maskedSelectByte :  state tensor src mask -> void
+foreign import ccall "THCTensorMasked.h THCudaShortTensor_maskedSelectByte"
+  c_maskedSelectByte :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> Ptr C'THByteTensor -> IO ()
+
+-- | p_maskedFill : Pointer to function : state tensor mask value -> void
+foreign import ccall "THCTensorMasked.h &THCudaShortTensor_maskedFill"
+  p_maskedFill :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaByteTensor -> CShort -> IO ())
+
+-- | p_maskedFillByte : Pointer to function : state tensor mask value -> void
+foreign import ccall "THCTensorMasked.h &THCudaShortTensor_maskedFillByte"
+  p_maskedFillByte :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THByteTensor -> CShort -> IO ())
+
+-- | p_maskedCopy : Pointer to function : state tensor mask src -> void
+foreign import ccall "THCTensorMasked.h &THCudaShortTensor_maskedCopy"
+  p_maskedCopy :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaByteTensor -> Ptr C'THCudaShortTensor -> IO ())
+
+-- | p_maskedCopyByte : Pointer to function : state tensor mask src -> void
+foreign import ccall "THCTensorMasked.h &THCudaShortTensor_maskedCopyByte"
+  p_maskedCopyByte :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THByteTensor -> Ptr C'THCudaShortTensor -> IO ())
+
+-- | p_maskedSelect : Pointer to function : state tensor src mask -> void
+foreign import ccall "THCTensorMasked.h &THCudaShortTensor_maskedSelect"
+  p_maskedSelect :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> Ptr C'THCudaByteTensor -> IO ())
+
+-- | p_maskedSelectByte : Pointer to function : state tensor src mask -> void
+foreign import ccall "THCTensorMasked.h &THCudaShortTensor_maskedSelectByte"
+  p_maskedSelectByte :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> Ptr C'THByteTensor -> IO ())
diff --git a/src/Torch/FFI/THC/Short/TensorMath.hs b/src/Torch/FFI/THC/Short/TensorMath.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Short/TensorMath.hs
@@ -0,0 +1,153 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Short.TensorMath where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_fill :  state self value -> void
+foreign import ccall "THCTensorMath.h THCudaShortTensor_fill"
+  c_fill :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> CShort -> IO ()
+
+-- | c_zero :  state self -> void
+foreign import ccall "THCTensorMath.h THCudaShortTensor_zero"
+  c_zero :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> IO ()
+
+-- | c_zeros :  state r_ size -> void
+foreign import ccall "THCTensorMath.h THCudaShortTensor_zeros"
+  c_zeros :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THLongStorage -> IO ()
+
+-- | c_zerosLike :  state r_ input -> void
+foreign import ccall "THCTensorMath.h THCudaShortTensor_zerosLike"
+  c_zerosLike :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> IO ()
+
+-- | c_ones :  state r_ size -> void
+foreign import ccall "THCTensorMath.h THCudaShortTensor_ones"
+  c_ones :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THLongStorage -> IO ()
+
+-- | c_onesLike :  state r_ input -> void
+foreign import ccall "THCTensorMath.h THCudaShortTensor_onesLike"
+  c_onesLike :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> IO ()
+
+-- | c_reshape :  state r_ t size -> void
+foreign import ccall "THCTensorMath.h THCudaShortTensor_reshape"
+  c_reshape :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> Ptr C'THLongStorage -> IO ()
+
+-- | c_numel :  state t -> ptrdiff_t
+foreign import ccall "THCTensorMath.h THCudaShortTensor_numel"
+  c_numel :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> IO CPtrdiff
+
+-- | c_cat :  state result ta tb dimension -> void
+foreign import ccall "THCTensorMath.h THCudaShortTensor_cat"
+  c_cat :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> CInt -> IO ()
+
+-- | c_catArray :  state result inputs numInputs dimension -> void
+foreign import ccall "THCTensorMath.h THCudaShortTensor_catArray"
+  c_catArray :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr (Ptr C'THCudaShortTensor) -> CInt -> CInt -> IO ()
+
+-- | c_nonzero :  state tensor self -> void
+foreign import ccall "THCTensorMath.h THCudaShortTensor_nonzero"
+  c_nonzero :: Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaShortTensor -> IO ()
+
+-- | c_tril :  state self src k -> void
+foreign import ccall "THCTensorMath.h THCudaShortTensor_tril"
+  c_tril :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> CLLong -> IO ()
+
+-- | c_triu :  state self src k -> void
+foreign import ccall "THCTensorMath.h THCudaShortTensor_triu"
+  c_triu :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> CLLong -> IO ()
+
+-- | c_diag :  state self src k -> void
+foreign import ccall "THCTensorMath.h THCudaShortTensor_diag"
+  c_diag :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> CLLong -> IO ()
+
+-- | c_eye :  state self n k -> void
+foreign import ccall "THCTensorMath.h THCudaShortTensor_eye"
+  c_eye :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> CLLong -> CLLong -> IO ()
+
+-- | c_trace :  state self -> accreal
+foreign import ccall "THCTensorMath.h THCudaShortTensor_trace"
+  c_trace :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> IO CLong
+
+-- | c_range :  state r_ xmin xmax step -> void
+foreign import ccall "THCTensorMath.h THCudaShortTensor_range"
+  c_range :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> CLong -> CLong -> CLong -> IO ()
+
+-- | c_arange :  state r_ xmin xmax step -> void
+foreign import ccall "THCTensorMath.h THCudaShortTensor_arange"
+  c_arange :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> CLong -> CLong -> CLong -> IO ()
+
+-- | p_fill : Pointer to function : state self value -> void
+foreign import ccall "THCTensorMath.h &THCudaShortTensor_fill"
+  p_fill :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> CShort -> IO ())
+
+-- | p_zero : Pointer to function : state self -> void
+foreign import ccall "THCTensorMath.h &THCudaShortTensor_zero"
+  p_zero :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> IO ())
+
+-- | p_zeros : Pointer to function : state r_ size -> void
+foreign import ccall "THCTensorMath.h &THCudaShortTensor_zeros"
+  p_zeros :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THLongStorage -> IO ())
+
+-- | p_zerosLike : Pointer to function : state r_ input -> void
+foreign import ccall "THCTensorMath.h &THCudaShortTensor_zerosLike"
+  p_zerosLike :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> IO ())
+
+-- | p_ones : Pointer to function : state r_ size -> void
+foreign import ccall "THCTensorMath.h &THCudaShortTensor_ones"
+  p_ones :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THLongStorage -> IO ())
+
+-- | p_onesLike : Pointer to function : state r_ input -> void
+foreign import ccall "THCTensorMath.h &THCudaShortTensor_onesLike"
+  p_onesLike :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> IO ())
+
+-- | p_reshape : Pointer to function : state r_ t size -> void
+foreign import ccall "THCTensorMath.h &THCudaShortTensor_reshape"
+  p_reshape :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> Ptr C'THLongStorage -> IO ())
+
+-- | p_numel : Pointer to function : state t -> ptrdiff_t
+foreign import ccall "THCTensorMath.h &THCudaShortTensor_numel"
+  p_numel :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> IO CPtrdiff)
+
+-- | p_cat : Pointer to function : state result ta tb dimension -> void
+foreign import ccall "THCTensorMath.h &THCudaShortTensor_cat"
+  p_cat :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> CInt -> IO ())
+
+-- | p_catArray : Pointer to function : state result inputs numInputs dimension -> void
+foreign import ccall "THCTensorMath.h &THCudaShortTensor_catArray"
+  p_catArray :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr (Ptr C'THCudaShortTensor) -> CInt -> CInt -> IO ())
+
+-- | p_nonzero : Pointer to function : state tensor self -> void
+foreign import ccall "THCTensorMath.h &THCudaShortTensor_nonzero"
+  p_nonzero :: FunPtr (Ptr C'THCState -> Ptr C'THCudaLongTensor -> Ptr C'THCudaShortTensor -> IO ())
+
+-- | p_tril : Pointer to function : state self src k -> void
+foreign import ccall "THCTensorMath.h &THCudaShortTensor_tril"
+  p_tril :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> CLLong -> IO ())
+
+-- | p_triu : Pointer to function : state self src k -> void
+foreign import ccall "THCTensorMath.h &THCudaShortTensor_triu"
+  p_triu :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> CLLong -> IO ())
+
+-- | p_diag : Pointer to function : state self src k -> void
+foreign import ccall "THCTensorMath.h &THCudaShortTensor_diag"
+  p_diag :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> CLLong -> IO ())
+
+-- | p_eye : Pointer to function : state self n k -> void
+foreign import ccall "THCTensorMath.h &THCudaShortTensor_eye"
+  p_eye :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> CLLong -> CLLong -> IO ())
+
+-- | p_trace : Pointer to function : state self -> accreal
+foreign import ccall "THCTensorMath.h &THCudaShortTensor_trace"
+  p_trace :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> IO CLong)
+
+-- | p_range : Pointer to function : state r_ xmin xmax step -> void
+foreign import ccall "THCTensorMath.h &THCudaShortTensor_range"
+  p_range :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> CLong -> CLong -> CLong -> IO ())
+
+-- | p_arange : Pointer to function : state r_ xmin xmax step -> void
+foreign import ccall "THCTensorMath.h &THCudaShortTensor_arange"
+  p_arange :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> CLong -> CLong -> CLong -> IO ())
diff --git a/src/Torch/FFI/THC/Short/TensorMathCompare.hs b/src/Torch/FFI/THC/Short/TensorMathCompare.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Short/TensorMathCompare.hs
@@ -0,0 +1,105 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Short.TensorMathCompare where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_ltValue :  state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h THCudaShortTensor_ltValue"
+  c_ltValue :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaShortTensor -> CShort -> IO ()
+
+-- | c_gtValue :  state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h THCudaShortTensor_gtValue"
+  c_gtValue :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaShortTensor -> CShort -> IO ()
+
+-- | c_leValue :  state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h THCudaShortTensor_leValue"
+  c_leValue :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaShortTensor -> CShort -> IO ()
+
+-- | c_geValue :  state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h THCudaShortTensor_geValue"
+  c_geValue :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaShortTensor -> CShort -> IO ()
+
+-- | c_eqValue :  state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h THCudaShortTensor_eqValue"
+  c_eqValue :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaShortTensor -> CShort -> IO ()
+
+-- | c_neValue :  state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h THCudaShortTensor_neValue"
+  c_neValue :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaShortTensor -> CShort -> IO ()
+
+-- | c_ltValueT :  state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h THCudaShortTensor_ltValueT"
+  c_ltValueT :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> CShort -> IO ()
+
+-- | c_gtValueT :  state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h THCudaShortTensor_gtValueT"
+  c_gtValueT :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> CShort -> IO ()
+
+-- | c_leValueT :  state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h THCudaShortTensor_leValueT"
+  c_leValueT :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> CShort -> IO ()
+
+-- | c_geValueT :  state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h THCudaShortTensor_geValueT"
+  c_geValueT :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> CShort -> IO ()
+
+-- | c_eqValueT :  state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h THCudaShortTensor_eqValueT"
+  c_eqValueT :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> CShort -> IO ()
+
+-- | c_neValueT :  state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h THCudaShortTensor_neValueT"
+  c_neValueT :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> CShort -> IO ()
+
+-- | p_ltValue : Pointer to function : state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h &THCudaShortTensor_ltValue"
+  p_ltValue :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaShortTensor -> CShort -> IO ())
+
+-- | p_gtValue : Pointer to function : state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h &THCudaShortTensor_gtValue"
+  p_gtValue :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaShortTensor -> CShort -> IO ())
+
+-- | p_leValue : Pointer to function : state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h &THCudaShortTensor_leValue"
+  p_leValue :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaShortTensor -> CShort -> IO ())
+
+-- | p_geValue : Pointer to function : state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h &THCudaShortTensor_geValue"
+  p_geValue :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaShortTensor -> CShort -> IO ())
+
+-- | p_eqValue : Pointer to function : state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h &THCudaShortTensor_eqValue"
+  p_eqValue :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaShortTensor -> CShort -> IO ())
+
+-- | p_neValue : Pointer to function : state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h &THCudaShortTensor_neValue"
+  p_neValue :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaShortTensor -> CShort -> IO ())
+
+-- | p_ltValueT : Pointer to function : state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h &THCudaShortTensor_ltValueT"
+  p_ltValueT :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> CShort -> IO ())
+
+-- | p_gtValueT : Pointer to function : state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h &THCudaShortTensor_gtValueT"
+  p_gtValueT :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> CShort -> IO ())
+
+-- | p_leValueT : Pointer to function : state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h &THCudaShortTensor_leValueT"
+  p_leValueT :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> CShort -> IO ())
+
+-- | p_geValueT : Pointer to function : state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h &THCudaShortTensor_geValueT"
+  p_geValueT :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> CShort -> IO ())
+
+-- | p_eqValueT : Pointer to function : state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h &THCudaShortTensor_eqValueT"
+  p_eqValueT :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> CShort -> IO ())
+
+-- | p_neValueT : Pointer to function : state self_ src value -> void
+foreign import ccall "THCTensorMathCompare.h &THCudaShortTensor_neValueT"
+  p_neValueT :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> CShort -> IO ())
diff --git a/src/Torch/FFI/THC/Short/TensorMathCompareT.hs b/src/Torch/FFI/THC/Short/TensorMathCompareT.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Short/TensorMathCompareT.hs
@@ -0,0 +1,105 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Short.TensorMathCompareT where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_ltTensor :  state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h THCudaShortTensor_ltTensor"
+  c_ltTensor :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> IO ()
+
+-- | c_gtTensor :  state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h THCudaShortTensor_gtTensor"
+  c_gtTensor :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> IO ()
+
+-- | c_leTensor :  state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h THCudaShortTensor_leTensor"
+  c_leTensor :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> IO ()
+
+-- | c_geTensor :  state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h THCudaShortTensor_geTensor"
+  c_geTensor :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> IO ()
+
+-- | c_eqTensor :  state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h THCudaShortTensor_eqTensor"
+  c_eqTensor :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> IO ()
+
+-- | c_neTensor :  state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h THCudaShortTensor_neTensor"
+  c_neTensor :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> IO ()
+
+-- | c_ltTensorT :  state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h THCudaShortTensor_ltTensorT"
+  c_ltTensorT :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> IO ()
+
+-- | c_gtTensorT :  state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h THCudaShortTensor_gtTensorT"
+  c_gtTensorT :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> IO ()
+
+-- | c_leTensorT :  state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h THCudaShortTensor_leTensorT"
+  c_leTensorT :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> IO ()
+
+-- | c_geTensorT :  state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h THCudaShortTensor_geTensorT"
+  c_geTensorT :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> IO ()
+
+-- | c_eqTensorT :  state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h THCudaShortTensor_eqTensorT"
+  c_eqTensorT :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> IO ()
+
+-- | c_neTensorT :  state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h THCudaShortTensor_neTensorT"
+  c_neTensorT :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> IO ()
+
+-- | p_ltTensor : Pointer to function : state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h &THCudaShortTensor_ltTensor"
+  p_ltTensor :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> IO ())
+
+-- | p_gtTensor : Pointer to function : state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h &THCudaShortTensor_gtTensor"
+  p_gtTensor :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> IO ())
+
+-- | p_leTensor : Pointer to function : state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h &THCudaShortTensor_leTensor"
+  p_leTensor :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> IO ())
+
+-- | p_geTensor : Pointer to function : state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h &THCudaShortTensor_geTensor"
+  p_geTensor :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> IO ())
+
+-- | p_eqTensor : Pointer to function : state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h &THCudaShortTensor_eqTensor"
+  p_eqTensor :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> IO ())
+
+-- | p_neTensor : Pointer to function : state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h &THCudaShortTensor_neTensor"
+  p_neTensor :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> IO ())
+
+-- | p_ltTensorT : Pointer to function : state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h &THCudaShortTensor_ltTensorT"
+  p_ltTensorT :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> IO ())
+
+-- | p_gtTensorT : Pointer to function : state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h &THCudaShortTensor_gtTensorT"
+  p_gtTensorT :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> IO ())
+
+-- | p_leTensorT : Pointer to function : state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h &THCudaShortTensor_leTensorT"
+  p_leTensorT :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> IO ())
+
+-- | p_geTensorT : Pointer to function : state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h &THCudaShortTensor_geTensorT"
+  p_geTensorT :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> IO ())
+
+-- | p_eqTensorT : Pointer to function : state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h &THCudaShortTensor_eqTensorT"
+  p_eqTensorT :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> IO ())
+
+-- | p_neTensorT : Pointer to function : state self_ src1 src2 -> void
+foreign import ccall "THCTensorMathCompareT.h &THCudaShortTensor_neTensorT"
+  p_neTensorT :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> IO ())
diff --git a/src/Torch/FFI/THC/Short/TensorMathPairwise.hs b/src/Torch/FFI/THC/Short/TensorMathPairwise.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Short/TensorMathPairwise.hs
@@ -0,0 +1,121 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Short.TensorMathPairwise where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_add :  state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h THCudaShortTensor_add"
+  c_add :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> CShort -> IO ()
+
+-- | c_sub :  state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h THCudaShortTensor_sub"
+  c_sub :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> CShort -> IO ()
+
+-- | c_add_scaled :  state self src value alpha -> void
+foreign import ccall "THCTensorMathPairwise.h THCudaShortTensor_add_scaled"
+  c_add_scaled :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> CShort -> CShort -> IO ()
+
+-- | c_sub_scaled :  state self src value alpha -> void
+foreign import ccall "THCTensorMathPairwise.h THCudaShortTensor_sub_scaled"
+  c_sub_scaled :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> CShort -> CShort -> IO ()
+
+-- | c_mul :  state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h THCudaShortTensor_mul"
+  c_mul :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> CShort -> IO ()
+
+-- | c_div :  state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h THCudaShortTensor_div"
+  c_div :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> CShort -> IO ()
+
+-- | c_lshift :  state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h THCudaShortTensor_lshift"
+  c_lshift :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> CShort -> IO ()
+
+-- | c_rshift :  state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h THCudaShortTensor_rshift"
+  c_rshift :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> CShort -> IO ()
+
+-- | c_fmod :  state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h THCudaShortTensor_fmod"
+  c_fmod :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> CShort -> IO ()
+
+-- | c_remainder :  state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h THCudaShortTensor_remainder"
+  c_remainder :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> CShort -> IO ()
+
+-- | c_bitand :  state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h THCudaShortTensor_bitand"
+  c_bitand :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> CShort -> IO ()
+
+-- | c_bitor :  state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h THCudaShortTensor_bitor"
+  c_bitor :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> CShort -> IO ()
+
+-- | c_bitxor :  state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h THCudaShortTensor_bitxor"
+  c_bitxor :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> CShort -> IO ()
+
+-- | c_equal :  state self src -> int
+foreign import ccall "THCTensorMathPairwise.h THCudaShortTensor_equal"
+  c_equal :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> IO CInt
+
+-- | p_add : Pointer to function : state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h &THCudaShortTensor_add"
+  p_add :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> CShort -> IO ())
+
+-- | p_sub : Pointer to function : state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h &THCudaShortTensor_sub"
+  p_sub :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> CShort -> IO ())
+
+-- | p_add_scaled : Pointer to function : state self src value alpha -> void
+foreign import ccall "THCTensorMathPairwise.h &THCudaShortTensor_add_scaled"
+  p_add_scaled :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> CShort -> CShort -> IO ())
+
+-- | p_sub_scaled : Pointer to function : state self src value alpha -> void
+foreign import ccall "THCTensorMathPairwise.h &THCudaShortTensor_sub_scaled"
+  p_sub_scaled :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> CShort -> CShort -> IO ())
+
+-- | p_mul : Pointer to function : state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h &THCudaShortTensor_mul"
+  p_mul :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> CShort -> IO ())
+
+-- | p_div : Pointer to function : state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h &THCudaShortTensor_div"
+  p_div :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> CShort -> IO ())
+
+-- | p_lshift : Pointer to function : state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h &THCudaShortTensor_lshift"
+  p_lshift :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> CShort -> IO ())
+
+-- | p_rshift : Pointer to function : state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h &THCudaShortTensor_rshift"
+  p_rshift :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> CShort -> IO ())
+
+-- | p_fmod : Pointer to function : state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h &THCudaShortTensor_fmod"
+  p_fmod :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> CShort -> IO ())
+
+-- | p_remainder : Pointer to function : state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h &THCudaShortTensor_remainder"
+  p_remainder :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> CShort -> IO ())
+
+-- | p_bitand : Pointer to function : state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h &THCudaShortTensor_bitand"
+  p_bitand :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> CShort -> IO ())
+
+-- | p_bitor : Pointer to function : state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h &THCudaShortTensor_bitor"
+  p_bitor :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> CShort -> IO ())
+
+-- | p_bitxor : Pointer to function : state self src value -> void
+foreign import ccall "THCTensorMathPairwise.h &THCudaShortTensor_bitxor"
+  p_bitxor :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> CShort -> IO ())
+
+-- | p_equal : Pointer to function : state self src -> int
+foreign import ccall "THCTensorMathPairwise.h &THCudaShortTensor_equal"
+  p_equal :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> IO CInt)
diff --git a/src/Torch/FFI/THC/Short/TensorMathPointwise.hs b/src/Torch/FFI/THC/Short/TensorMathPointwise.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Short/TensorMathPointwise.hs
@@ -0,0 +1,193 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Short.TensorMathPointwise where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_neg :  state self src -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaShortTensor_neg"
+  c_neg :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> IO ()
+
+-- | c_abs :  state self src -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaShortTensor_abs"
+  c_abs :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> IO ()
+
+-- | c_sign :  state self src -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaShortTensor_sign"
+  c_sign :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> IO ()
+
+-- | c_clamp :  state self src min_value max_value -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaShortTensor_clamp"
+  c_clamp :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> CShort -> CShort -> IO ()
+
+-- | c_cross :  state self src1 src2 dimension -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaShortTensor_cross"
+  c_cross :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> CInt -> IO ()
+
+-- | c_cadd :  state self src1 value src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaShortTensor_cadd"
+  c_cadd :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> CShort -> Ptr C'THCudaShortTensor -> IO ()
+
+-- | c_csub :  state self src1 value src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaShortTensor_csub"
+  c_csub :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> CShort -> Ptr C'THCudaShortTensor -> IO ()
+
+-- | c_cmul :  state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaShortTensor_cmul"
+  c_cmul :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> IO ()
+
+-- | c_cpow :  state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaShortTensor_cpow"
+  c_cpow :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> IO ()
+
+-- | c_cdiv :  state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaShortTensor_cdiv"
+  c_cdiv :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> IO ()
+
+-- | c_clshift :  state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaShortTensor_clshift"
+  c_clshift :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> IO ()
+
+-- | c_crshift :  state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaShortTensor_crshift"
+  c_crshift :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> IO ()
+
+-- | c_cmax :  state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaShortTensor_cmax"
+  c_cmax :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> IO ()
+
+-- | c_cmin :  state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaShortTensor_cmin"
+  c_cmin :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> IO ()
+
+-- | c_cfmod :  state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaShortTensor_cfmod"
+  c_cfmod :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> IO ()
+
+-- | c_cremainder :  state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaShortTensor_cremainder"
+  c_cremainder :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> IO ()
+
+-- | c_cmaxValue :  state self src value -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaShortTensor_cmaxValue"
+  c_cmaxValue :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> CShort -> IO ()
+
+-- | c_cminValue :  state self src value -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaShortTensor_cminValue"
+  c_cminValue :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> CShort -> IO ()
+
+-- | c_cbitand :  state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaShortTensor_cbitand"
+  c_cbitand :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> IO ()
+
+-- | c_cbitor :  state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaShortTensor_cbitor"
+  c_cbitor :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> IO ()
+
+-- | c_cbitxor :  state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaShortTensor_cbitxor"
+  c_cbitxor :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> IO ()
+
+-- | c_addcmul :  state self t value src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaShortTensor_addcmul"
+  c_addcmul :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> CShort -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> IO ()
+
+-- | c_addcdiv :  state self t value src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h THCudaShortTensor_addcdiv"
+  c_addcdiv :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> CShort -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> IO ()
+
+-- | p_neg : Pointer to function : state self src -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaShortTensor_neg"
+  p_neg :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> IO ())
+
+-- | p_abs : Pointer to function : state self src -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaShortTensor_abs"
+  p_abs :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> IO ())
+
+-- | p_sign : Pointer to function : state self src -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaShortTensor_sign"
+  p_sign :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> IO ())
+
+-- | p_clamp : Pointer to function : state self src min_value max_value -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaShortTensor_clamp"
+  p_clamp :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> CShort -> CShort -> IO ())
+
+-- | p_cross : Pointer to function : state self src1 src2 dimension -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaShortTensor_cross"
+  p_cross :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> CInt -> IO ())
+
+-- | p_cadd : Pointer to function : state self src1 value src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaShortTensor_cadd"
+  p_cadd :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> CShort -> Ptr C'THCudaShortTensor -> IO ())
+
+-- | p_csub : Pointer to function : state self src1 value src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaShortTensor_csub"
+  p_csub :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> CShort -> Ptr C'THCudaShortTensor -> IO ())
+
+-- | p_cmul : Pointer to function : state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaShortTensor_cmul"
+  p_cmul :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> IO ())
+
+-- | p_cpow : Pointer to function : state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaShortTensor_cpow"
+  p_cpow :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> IO ())
+
+-- | p_cdiv : Pointer to function : state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaShortTensor_cdiv"
+  p_cdiv :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> IO ())
+
+-- | p_clshift : Pointer to function : state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaShortTensor_clshift"
+  p_clshift :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> IO ())
+
+-- | p_crshift : Pointer to function : state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaShortTensor_crshift"
+  p_crshift :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> IO ())
+
+-- | p_cmax : Pointer to function : state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaShortTensor_cmax"
+  p_cmax :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> IO ())
+
+-- | p_cmin : Pointer to function : state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaShortTensor_cmin"
+  p_cmin :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> IO ())
+
+-- | p_cfmod : Pointer to function : state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaShortTensor_cfmod"
+  p_cfmod :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> IO ())
+
+-- | p_cremainder : Pointer to function : state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaShortTensor_cremainder"
+  p_cremainder :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> IO ())
+
+-- | p_cmaxValue : Pointer to function : state self src value -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaShortTensor_cmaxValue"
+  p_cmaxValue :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> CShort -> IO ())
+
+-- | p_cminValue : Pointer to function : state self src value -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaShortTensor_cminValue"
+  p_cminValue :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> CShort -> IO ())
+
+-- | p_cbitand : Pointer to function : state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaShortTensor_cbitand"
+  p_cbitand :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> IO ())
+
+-- | p_cbitor : Pointer to function : state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaShortTensor_cbitor"
+  p_cbitor :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> IO ())
+
+-- | p_cbitxor : Pointer to function : state self src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaShortTensor_cbitxor"
+  p_cbitxor :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> IO ())
+
+-- | p_addcmul : Pointer to function : state self t value src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaShortTensor_addcmul"
+  p_addcmul :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> CShort -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> IO ())
+
+-- | p_addcdiv : Pointer to function : state self t value src1 src2 -> void
+foreign import ccall "THCTensorMathPointwise.h &THCudaShortTensor_addcdiv"
+  p_addcdiv :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> CShort -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> IO ())
diff --git a/src/Torch/FFI/THC/Short/TensorMathReduce.hs b/src/Torch/FFI/THC/Short/TensorMathReduce.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Short/TensorMathReduce.hs
@@ -0,0 +1,89 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Short.TensorMathReduce where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_sum :  state self src dim keepdim -> void
+foreign import ccall "THCTensorMathReduce.h THCudaShortTensor_sum"
+  c_sum :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> CInt -> CInt -> IO ()
+
+-- | c_prod :  state self src dim keepdim -> void
+foreign import ccall "THCTensorMathReduce.h THCudaShortTensor_prod"
+  c_prod :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> CInt -> CInt -> IO ()
+
+-- | c_sumall :  state self -> accreal
+foreign import ccall "THCTensorMathReduce.h THCudaShortTensor_sumall"
+  c_sumall :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> IO CLong
+
+-- | c_prodall :  state self -> accreal
+foreign import ccall "THCTensorMathReduce.h THCudaShortTensor_prodall"
+  c_prodall :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> IO CLong
+
+-- | c_min :  state values indices src dim keepdim -> void
+foreign import ccall "THCTensorMathReduce.h THCudaShortTensor_min"
+  c_min :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaShortTensor -> CInt -> CInt -> IO ()
+
+-- | c_max :  state values indices src dim keepdim -> void
+foreign import ccall "THCTensorMathReduce.h THCudaShortTensor_max"
+  c_max :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaShortTensor -> CInt -> CInt -> IO ()
+
+-- | c_minall :  state self -> real
+foreign import ccall "THCTensorMathReduce.h THCudaShortTensor_minall"
+  c_minall :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> IO CShort
+
+-- | c_maxall :  state self -> real
+foreign import ccall "THCTensorMathReduce.h THCudaShortTensor_maxall"
+  c_maxall :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> IO CShort
+
+-- | c_medianall :  state self -> real
+foreign import ccall "THCTensorMathReduce.h THCudaShortTensor_medianall"
+  c_medianall :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> IO CShort
+
+-- | c_median :  state values indices src dim keepdim -> void
+foreign import ccall "THCTensorMathReduce.h THCudaShortTensor_median"
+  c_median :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaShortTensor -> CInt -> CInt -> IO ()
+
+-- | p_sum : Pointer to function : state self src dim keepdim -> void
+foreign import ccall "THCTensorMathReduce.h &THCudaShortTensor_sum"
+  p_sum :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> CInt -> CInt -> IO ())
+
+-- | p_prod : Pointer to function : state self src dim keepdim -> void
+foreign import ccall "THCTensorMathReduce.h &THCudaShortTensor_prod"
+  p_prod :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> CInt -> CInt -> IO ())
+
+-- | p_sumall : Pointer to function : state self -> accreal
+foreign import ccall "THCTensorMathReduce.h &THCudaShortTensor_sumall"
+  p_sumall :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> IO CLong)
+
+-- | p_prodall : Pointer to function : state self -> accreal
+foreign import ccall "THCTensorMathReduce.h &THCudaShortTensor_prodall"
+  p_prodall :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> IO CLong)
+
+-- | p_min : Pointer to function : state values indices src dim keepdim -> void
+foreign import ccall "THCTensorMathReduce.h &THCudaShortTensor_min"
+  p_min :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaShortTensor -> CInt -> CInt -> IO ())
+
+-- | p_max : Pointer to function : state values indices src dim keepdim -> void
+foreign import ccall "THCTensorMathReduce.h &THCudaShortTensor_max"
+  p_max :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaShortTensor -> CInt -> CInt -> IO ())
+
+-- | p_minall : Pointer to function : state self -> real
+foreign import ccall "THCTensorMathReduce.h &THCudaShortTensor_minall"
+  p_minall :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> IO CShort)
+
+-- | p_maxall : Pointer to function : state self -> real
+foreign import ccall "THCTensorMathReduce.h &THCudaShortTensor_maxall"
+  p_maxall :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> IO CShort)
+
+-- | p_medianall : Pointer to function : state self -> real
+foreign import ccall "THCTensorMathReduce.h &THCudaShortTensor_medianall"
+  p_medianall :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> IO CShort)
+
+-- | p_median : Pointer to function : state values indices src dim keepdim -> void
+foreign import ccall "THCTensorMathReduce.h &THCudaShortTensor_median"
+  p_median :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaShortTensor -> CInt -> CInt -> IO ())
diff --git a/src/Torch/FFI/THC/Short/TensorMathScan.hs b/src/Torch/FFI/THC/Short/TensorMathScan.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Short/TensorMathScan.hs
@@ -0,0 +1,25 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Short.TensorMathScan where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_cumsum :  state self src dim -> void
+foreign import ccall "THCTensorMathScan.h THCudaShortTensor_cumsum"
+  c_cumsum :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> CInt -> IO ()
+
+-- | c_cumprod :  state self src dim -> void
+foreign import ccall "THCTensorMathScan.h THCudaShortTensor_cumprod"
+  c_cumprod :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> CInt -> IO ()
+
+-- | p_cumsum : Pointer to function : state self src dim -> void
+foreign import ccall "THCTensorMathScan.h &THCudaShortTensor_cumsum"
+  p_cumsum :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> CInt -> IO ())
+
+-- | p_cumprod : Pointer to function : state self src dim -> void
+foreign import ccall "THCTensorMathScan.h &THCudaShortTensor_cumprod"
+  p_cumprod :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> CInt -> IO ())
diff --git a/src/Torch/FFI/THC/Short/TensorMode.hs b/src/Torch/FFI/THC/Short/TensorMode.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Short/TensorMode.hs
@@ -0,0 +1,17 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Short.TensorMode where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_mode :  state values indices input dimension keepdim -> void
+foreign import ccall "THCTensorMode.h THCudaShortTensor_mode"
+  c_mode :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaShortTensor -> CInt -> CInt -> IO ()
+
+-- | p_mode : Pointer to function : state values indices input dimension keepdim -> void
+foreign import ccall "THCTensorMode.h &THCudaShortTensor_mode"
+  p_mode :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaShortTensor -> CInt -> CInt -> IO ())
diff --git a/src/Torch/FFI/THC/Short/TensorRandom.hs b/src/Torch/FFI/THC/Short/TensorRandom.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Short/TensorRandom.hs
@@ -0,0 +1,57 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Short.TensorRandom where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_random :  state self -> void
+foreign import ccall "THCTensorRandom.h THCudaShortTensor_random"
+  c_random :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> IO ()
+
+-- | c_clampedRandom :  state self min max -> void
+foreign import ccall "THCTensorRandom.h THCudaShortTensor_clampedRandom"
+  c_clampedRandom :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> CLLong -> CLLong -> IO ()
+
+-- | c_cappedRandom :  state self max -> void
+foreign import ccall "THCTensorRandom.h THCudaShortTensor_cappedRandom"
+  c_cappedRandom :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> CLLong -> IO ()
+
+-- | c_bernoulli :  state self p -> void
+foreign import ccall "THCTensorRandom.h THCudaShortTensor_bernoulli"
+  c_bernoulli :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> CDouble -> IO ()
+
+-- | c_bernoulli_DoubleTensor :  state self p -> void
+foreign import ccall "THCTensorRandom.h THCudaShortTensor_bernoulli_DoubleTensor"
+  c_bernoulli_DoubleTensor :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaDoubleTensor -> IO ()
+
+-- | c_geometric :  state self p -> void
+foreign import ccall "THCTensorRandom.h THCudaShortTensor_geometric"
+  c_geometric :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> CDouble -> IO ()
+
+-- | p_random : Pointer to function : state self -> void
+foreign import ccall "THCTensorRandom.h &THCudaShortTensor_random"
+  p_random :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> IO ())
+
+-- | p_clampedRandom : Pointer to function : state self min max -> void
+foreign import ccall "THCTensorRandom.h &THCudaShortTensor_clampedRandom"
+  p_clampedRandom :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> CLLong -> CLLong -> IO ())
+
+-- | p_cappedRandom : Pointer to function : state self max -> void
+foreign import ccall "THCTensorRandom.h &THCudaShortTensor_cappedRandom"
+  p_cappedRandom :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> CLLong -> IO ())
+
+-- | p_bernoulli : Pointer to function : state self p -> void
+foreign import ccall "THCTensorRandom.h &THCudaShortTensor_bernoulli"
+  p_bernoulli :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> CDouble -> IO ())
+
+-- | p_bernoulli_DoubleTensor : Pointer to function : state self p -> void
+foreign import ccall "THCTensorRandom.h &THCudaShortTensor_bernoulli_DoubleTensor"
+  p_bernoulli_DoubleTensor :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaDoubleTensor -> IO ())
+
+-- | p_geometric : Pointer to function : state self p -> void
+foreign import ccall "THCTensorRandom.h &THCudaShortTensor_geometric"
+  p_geometric :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> CDouble -> IO ())
diff --git a/src/Torch/FFI/THC/Short/TensorScatterGather.hs b/src/Torch/FFI/THC/Short/TensorScatterGather.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Short/TensorScatterGather.hs
@@ -0,0 +1,41 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Short.TensorScatterGather where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_gather :  state tensor src dim index -> void
+foreign import ccall "THCTensorScatterGather.h THCudaShortTensor_gather"
+  c_gather :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> CInt -> Ptr C'THCudaLongTensor -> IO ()
+
+-- | c_scatter :  state tensor dim index src -> void
+foreign import ccall "THCTensorScatterGather.h THCudaShortTensor_scatter"
+  c_scatter :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> CInt -> Ptr C'THCudaLongTensor -> Ptr C'THCudaShortTensor -> IO ()
+
+-- | c_scatterAdd :  state tensor dim index src -> void
+foreign import ccall "THCTensorScatterGather.h THCudaShortTensor_scatterAdd"
+  c_scatterAdd :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> CInt -> Ptr C'THCudaLongTensor -> Ptr C'THCudaShortTensor -> IO ()
+
+-- | c_scatterFill :  state tensor dim index value -> void
+foreign import ccall "THCTensorScatterGather.h THCudaShortTensor_scatterFill"
+  c_scatterFill :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> CInt -> Ptr C'THCudaLongTensor -> CShort -> IO ()
+
+-- | p_gather : Pointer to function : state tensor src dim index -> void
+foreign import ccall "THCTensorScatterGather.h &THCudaShortTensor_gather"
+  p_gather :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaShortTensor -> CInt -> Ptr C'THCudaLongTensor -> IO ())
+
+-- | p_scatter : Pointer to function : state tensor dim index src -> void
+foreign import ccall "THCTensorScatterGather.h &THCudaShortTensor_scatter"
+  p_scatter :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> CInt -> Ptr C'THCudaLongTensor -> Ptr C'THCudaShortTensor -> IO ())
+
+-- | p_scatterAdd : Pointer to function : state tensor dim index src -> void
+foreign import ccall "THCTensorScatterGather.h &THCudaShortTensor_scatterAdd"
+  p_scatterAdd :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> CInt -> Ptr C'THCudaLongTensor -> Ptr C'THCudaShortTensor -> IO ())
+
+-- | p_scatterFill : Pointer to function : state tensor dim index value -> void
+foreign import ccall "THCTensorScatterGather.h &THCudaShortTensor_scatterFill"
+  p_scatterFill :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> CInt -> Ptr C'THCudaLongTensor -> CShort -> IO ())
diff --git a/src/Torch/FFI/THC/Short/TensorSort.hs b/src/Torch/FFI/THC/Short/TensorSort.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Short/TensorSort.hs
@@ -0,0 +1,25 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Short.TensorSort where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_sortKeyValueInplace :  state keys values dim order -> void
+foreign import ccall "THCTensorSort.h THCudaShortTensor_sortKeyValueInplace"
+  c_sortKeyValueInplace :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaLongTensor -> CInt -> CInt -> IO ()
+
+-- | c_sort :  state sorted indices input dim order -> void
+foreign import ccall "THCTensorSort.h THCudaShortTensor_sort"
+  c_sort :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaShortTensor -> CInt -> CInt -> IO ()
+
+-- | p_sortKeyValueInplace : Pointer to function : state keys values dim order -> void
+foreign import ccall "THCTensorSort.h &THCudaShortTensor_sortKeyValueInplace"
+  p_sortKeyValueInplace :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaLongTensor -> CInt -> CInt -> IO ())
+
+-- | p_sort : Pointer to function : state sorted indices input dim order -> void
+foreign import ccall "THCTensorSort.h &THCudaShortTensor_sort"
+  p_sort :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaShortTensor -> CInt -> CInt -> IO ())
diff --git a/src/Torch/FFI/THC/Short/TensorTopK.hs b/src/Torch/FFI/THC/Short/TensorTopK.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Short/TensorTopK.hs
@@ -0,0 +1,17 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Short.TensorTopK where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_topk :  state topK indices input k dim dir sorted -> void
+foreign import ccall "THCTensorTopK.h THCudaShortTensor_topk"
+  c_topk :: Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaShortTensor -> CLLong -> CInt -> CInt -> CInt -> IO ()
+
+-- | p_topk : Pointer to function : state topK indices input k dim dir sorted -> void
+foreign import ccall "THCTensorTopK.h &THCudaShortTensor_topk"
+  p_topk :: FunPtr (Ptr C'THCState -> Ptr C'THCudaShortTensor -> Ptr C'THCudaLongTensor -> Ptr C'THCudaShortTensor -> CLLong -> CInt -> CInt -> CInt -> IO ())
diff --git a/src/Torch/FFI/THC/Sleep.hs b/src/Torch/FFI/THC/Sleep.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Sleep.hs
@@ -0,0 +1,17 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Sleep where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_THC_sleep :  state cycles -> void
+foreign import ccall "THCSleep.h THC_sleep"
+  c_THC_sleep :: Ptr C'THCState -> CLLong -> IO ()
+
+-- | p_THC_sleep : Pointer to function : state cycles -> void
+foreign import ccall "THCSleep.h &THC_sleep"
+  p_THC_sleep :: FunPtr (Ptr C'THCState -> CLLong -> IO ())
diff --git a/src/Torch/FFI/THC/Stream.hs b/src/Torch/FFI/THC/Stream.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/Stream.hs
@@ -0,0 +1,49 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.Stream where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_THCStream_new :  flags -> THCStream *
+foreign import ccall "THCStream.h THCStream_new"
+  c_THCStream_new :: CInt -> IO (Ptr C'THCStream)
+
+-- | c_THCStream_defaultStream :  device -> THCStream *
+foreign import ccall "THCStream.h THCStream_defaultStream"
+  c_THCStream_defaultStream :: CInt -> IO (Ptr C'THCStream)
+
+-- | c_THCStream_newWithPriority :  flags priority -> THCStream *
+foreign import ccall "THCStream.h THCStream_newWithPriority"
+  c_THCStream_newWithPriority :: CInt -> CInt -> IO (Ptr C'THCStream)
+
+-- | c_THCStream_free :  self -> void
+foreign import ccall "THCStream.h THCStream_free"
+  c_THCStream_free :: Ptr C'THCStream -> IO ()
+
+-- | c_THCStream_retain :  self -> void
+foreign import ccall "THCStream.h THCStream_retain"
+  c_THCStream_retain :: Ptr C'THCStream -> IO ()
+
+-- | p_THCStream_new : Pointer to function : flags -> THCStream *
+foreign import ccall "THCStream.h &THCStream_new"
+  p_THCStream_new :: FunPtr (CInt -> IO (Ptr C'THCStream))
+
+-- | p_THCStream_defaultStream : Pointer to function : device -> THCStream *
+foreign import ccall "THCStream.h &THCStream_defaultStream"
+  p_THCStream_defaultStream :: FunPtr (CInt -> IO (Ptr C'THCStream))
+
+-- | p_THCStream_newWithPriority : Pointer to function : flags priority -> THCStream *
+foreign import ccall "THCStream.h &THCStream_newWithPriority"
+  p_THCStream_newWithPriority :: FunPtr (CInt -> CInt -> IO (Ptr C'THCStream))
+
+-- | p_THCStream_free : Pointer to function : self -> void
+foreign import ccall "THCStream.h &THCStream_free"
+  p_THCStream_free :: FunPtr (Ptr C'THCStream -> IO ())
+
+-- | p_THCStream_retain : Pointer to function : self -> void
+foreign import ccall "THCStream.h &THCStream_retain"
+  p_THCStream_retain :: FunPtr (Ptr C'THCStream -> IO ())
diff --git a/src/Torch/FFI/THC/TensorMath.hs b/src/Torch/FFI/THC/TensorMath.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/TensorMath.hs
@@ -0,0 +1,25 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.TensorMath where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_THCudaByteTensor_logicalall :  state self -> int
+foreign import ccall "THCTensorMath.h THCudaByteTensor_logicalall"
+  c_THCudaByteTensor_logicalall :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> IO CInt
+
+-- | c_THCudaByteTensor_logicalany :  state self -> int
+foreign import ccall "THCTensorMath.h THCudaByteTensor_logicalany"
+  c_THCudaByteTensor_logicalany :: Ptr C'THCState -> Ptr C'THCudaByteTensor -> IO CInt
+
+-- | p_THCudaByteTensor_logicalall : Pointer to function : state self -> int
+foreign import ccall "THCTensorMath.h &THCudaByteTensor_logicalall"
+  p_THCudaByteTensor_logicalall :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> IO CInt)
+
+-- | p_THCudaByteTensor_logicalany : Pointer to function : state self -> int
+foreign import ccall "THCTensorMath.h &THCudaByteTensor_logicalany"
+  p_THCudaByteTensor_logicalany :: FunPtr (Ptr C'THCState -> Ptr C'THCudaByteTensor -> IO CInt)
diff --git a/src/Torch/FFI/THC/TensorRandom.hs b/src/Torch/FFI/THC/TensorRandom.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/FFI/THC/TensorRandom.hs
@@ -0,0 +1,81 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Torch.FFI.THC.TensorRandom where
+
+import Foreign
+import Foreign.C.Types
+import Data.Word
+import Data.Int
+import Torch.Types.TH
+import Torch.Types.THC
+
+-- | c_THCRandom_init :  state num_devices current_device -> void
+foreign import ccall "THCTensorRandom.h THCRandom_init"
+  c_THCRandom_init :: Ptr C'THCState -> CInt -> CInt -> IO ()
+
+-- | c_THCRandom_shutdown :  state -> void
+foreign import ccall "THCTensorRandom.h THCRandom_shutdown"
+  c_THCRandom_shutdown :: Ptr C'THCState -> IO ()
+
+-- | c_THCRandom_seed :  state -> uint64_t
+foreign import ccall "THCTensorRandom.h THCRandom_seed"
+  c_THCRandom_seed :: Ptr C'THCState -> IO CULong
+
+-- | c_THCRandom_seedAll :  state -> uint64_t
+foreign import ccall "THCTensorRandom.h THCRandom_seedAll"
+  c_THCRandom_seedAll :: Ptr C'THCState -> IO CULong
+
+-- | c_THCRandom_manualSeed :  state the_seed_ -> void
+foreign import ccall "THCTensorRandom.h THCRandom_manualSeed"
+  c_THCRandom_manualSeed :: Ptr C'THCState -> CULong -> IO ()
+
+-- | c_THCRandom_manualSeedAll :  state the_seed_ -> void
+foreign import ccall "THCTensorRandom.h THCRandom_manualSeedAll"
+  c_THCRandom_manualSeedAll :: Ptr C'THCState -> CULong -> IO ()
+
+-- | c_THCRandom_initialSeed :  state -> uint64_t
+foreign import ccall "THCTensorRandom.h THCRandom_initialSeed"
+  c_THCRandom_initialSeed :: Ptr C'THCState -> IO CULong
+
+-- | c_THCRandom_getRNGState :  state rng_state -> void
+foreign import ccall "THCTensorRandom.h THCRandom_getRNGState"
+  c_THCRandom_getRNGState :: Ptr C'THCState -> Ptr C'THByteTensor -> IO ()
+
+-- | c_THCRandom_setRNGState :  state rng_state -> void
+foreign import ccall "THCTensorRandom.h THCRandom_setRNGState"
+  c_THCRandom_setRNGState :: Ptr C'THCState -> Ptr C'THByteTensor -> IO ()
+
+-- | p_THCRandom_init : Pointer to function : state num_devices current_device -> void
+foreign import ccall "THCTensorRandom.h &THCRandom_init"
+  p_THCRandom_init :: FunPtr (Ptr C'THCState -> CInt -> CInt -> IO ())
+
+-- | p_THCRandom_shutdown : Pointer to function : state -> void
+foreign import ccall "THCTensorRandom.h &THCRandom_shutdown"
+  p_THCRandom_shutdown :: FunPtr (Ptr C'THCState -> IO ())
+
+-- | p_THCRandom_seed : Pointer to function : state -> uint64_t
+foreign import ccall "THCTensorRandom.h &THCRandom_seed"
+  p_THCRandom_seed :: FunPtr (Ptr C'THCState -> IO CULong)
+
+-- | p_THCRandom_seedAll : Pointer to function : state -> uint64_t
+foreign import ccall "THCTensorRandom.h &THCRandom_seedAll"
+  p_THCRandom_seedAll :: FunPtr (Ptr C'THCState -> IO CULong)
+
+-- | p_THCRandom_manualSeed : Pointer to function : state the_seed_ -> void
+foreign import ccall "THCTensorRandom.h &THCRandom_manualSeed"
+  p_THCRandom_manualSeed :: FunPtr (Ptr C'THCState -> CULong -> IO ())
+
+-- | p_THCRandom_manualSeedAll : Pointer to function : state the_seed_ -> void
+foreign import ccall "THCTensorRandom.h &THCRandom_manualSeedAll"
+  p_THCRandom_manualSeedAll :: FunPtr (Ptr C'THCState -> CULong -> IO ())
+
+-- | p_THCRandom_initialSeed : Pointer to function : state -> uint64_t
+foreign import ccall "THCTensorRandom.h &THCRandom_initialSeed"
+  p_THCRandom_initialSeed :: FunPtr (Ptr C'THCState -> IO CULong)
+
+-- | p_THCRandom_getRNGState : Pointer to function : state rng_state -> void
+foreign import ccall "THCTensorRandom.h &THCRandom_getRNGState"
+  p_THCRandom_getRNGState :: FunPtr (Ptr C'THCState -> Ptr C'THByteTensor -> IO ())
+
+-- | p_THCRandom_setRNGState : Pointer to function : state rng_state -> void
+foreign import ccall "THCTensorRandom.h &THCRandom_setRNGState"
+  p_THCRandom_setRNGState :: FunPtr (Ptr C'THCState -> Ptr C'THByteTensor -> IO ())
diff --git a/state/Torch/FFI/THC/State.hs b/state/Torch/FFI/THC/State.hs
new file mode 100644
--- /dev/null
+++ b/state/Torch/FFI/THC/State.hs
@@ -0,0 +1,24 @@
+{-# LANGUAGE Strict #-}
+{-# OPTIONS_GHC -fno-cse #-}
+module Torch.FFI.THC.State where
+
+import Foreign
+import Control.Monad (void)
+
+import Torch.Types.THC (C'THCState)
+import qualified Torch.FFI.THC.General as General
+import System.IO.Unsafe
+
+-- | calls 'General.c_THCudaShutdown' and 'General.c_THCState_free' from C.
+foreign import ccall "&free_CTHState" state_free :: FunPtr (Ptr C'THCState -> IO ())
+
+torchstate :: ForeignPtr C'THCState
+torchstate = unsafePerformIO $ do
+  s <- General.c_THCState_alloc
+  General.c_THCudaInit s
+  General.c_THCMagma_init s
+  newForeignPtr state_free s
+{-# NOINLINE torchstate #-}
+
+
+
diff --git a/tests/Internal.hs b/tests/Internal.hs
new file mode 100644
--- /dev/null
+++ b/tests/Internal.hs
@@ -0,0 +1,23 @@
+module Internal where
+
+import Foreign hiding (void)
+import Test.Hspec
+import Control.Monad (void)
+
+import Torch.Types.THC (C'THCState)
+import qualified Torch.FFI.THC.General as General
+
+cudaState :: IO (Ptr C'THCState)
+cudaState = do
+  s <- General.c_THCState_alloc
+  General.c_THCudaInit s
+  pure s
+
+stopCuda :: Ptr C'THCState -> IO ()
+stopCuda s = void $ do
+  -- FIXME: This throws a segfault..?
+  General.c_THCudaShutdown s
+  General.c_THCState_free s
+
+
+
diff --git a/tests/MathSpec.hs b/tests/MathSpec.hs
new file mode 100644
--- /dev/null
+++ b/tests/MathSpec.hs
@@ -0,0 +1,51 @@
+module MathSpec (spec) where
+
+import Foreign.C.Types
+import Test.Hspec
+-- import Torch.FFI.THC.Random
+
+import qualified Torch.FFI.THC.Double.Tensor as D
+import qualified Torch.FFI.THC.Double.TensorMath as D
+import qualified Torch.FFI.THC.Double.TensorMathPointwise as D
+import qualified Torch.FFI.THC.Double.TensorRandom as D
+
+
+import Internal
+
+main :: IO ()
+main = hspec spec
+
+spec :: Spec
+spec =
+  describe "something true" $ it "is true" $ True `shouldBe` True
+  --describe "Math" $ withCudaState $ \g -> do
+  --  it "Can initialize values with the fill method" $ do
+  --    t1 <- D.c_newWithSize2d g 2 2
+  --    D.c_fill  g t1 3.1
+  --    r <- D.c_get2d g t1 0 0
+  --    r `shouldBe` (3.1 :: CDouble)
+  --    D.c_free  g t1
+  --  it "Can invert double values with cinv" $ do
+  --    t1 <- D.c_newWithSize2d g 3 2
+  --    D.c_fill g t1 2.0
+  --    result <- D.c_newWithSize2d g 3 2
+  --    D.c_cinv g result t1
+  --    r <- D.c_get2d g result 0 0
+  --    r `shouldBe` (0.5 :: CDouble)
+  --    r <- D.c_get2d g t1 0 0
+  --    r `shouldBe` (2.0 :: CDouble)
+  --    D.c_free g t1
+  --    D.c_free g result
+
+    -- cinv doesn't seem to be excluded by the preprocessor, yet is not implemented
+    -- for Int
+    -- it "Can invert int values with cinv (?)" $ do
+    --   t1 <- c_THIntTensor_newWithSize2d 3 2
+    --   c_THIntTensor_fill t1 2
+    --   result <- c_THIntTensor_newWithSize2d 3 2
+    --   c_THIntTensor_cinv result t1
+    --   c_THIntTensor_get2d result 0 0 `shouldBe` (0 :: CInt)
+    --   c_THIntTensor_get2d t1 0 0 `shouldBe` (2 :: CInt)
+    --   c_THIntTensor_free t1
+    --   c_THIntTensor_free result
+
diff --git a/tests/NNSpec.hs b/tests/NNSpec.hs
new file mode 100644
--- /dev/null
+++ b/tests/NNSpec.hs
@@ -0,0 +1,71 @@
+{-# LANGUAGE ConstraintKinds #-}
+module NNSpec (spec) where
+
+import Foreign hiding (void)
+import Control.Monad (void)
+import Foreign.C.Types
+
+import Test.Hspec
+
+import Torch.Types.THC
+
+import qualified Torch.FFI.TH.Random as R
+import qualified Torch.FFI.THC.General as General
+
+import qualified Torch.FFI.THC.NN.Double as D
+import qualified Torch.FFI.THC.Double.Tensor as D
+import qualified Torch.FFI.THC.Double.TensorMath as D
+import qualified Torch.FFI.THC.Double.TensorMathReduce as D
+import qualified Torch.FFI.THC.Double.TensorRandom as D
+
+{-
+import Torch.FFI.THCUNN.Float as F
+import Torch.FFI.THC.Float.Tensor as F
+import Torch.FFI.THC.Float.TensorMath as F
+import Torch.FFI.THC.Float.TensorRandom as F
+-}
+
+import Torch.FFI.TestsNN
+
+main :: IO ()
+main = hspec spec
+
+spec :: Spec
+spec = do
+  s <- runIO (General.c_THCState_alloc >>= \s -> General.c_THCudaInit s >> pure s)
+  afterAll_ (void $ General.c_THCState_free s) $ do
+    -- describe "Float NNs"  $ testSuite nullPtr floatBook
+    describe "Double NNs" $ testSuite s doubleBook
+
+
+doubleBook :: NNTestSuite (Ptr C'THCState) (Ptr C'THCudaDoubleTensor) CDouble CDouble (Ptr ())
+doubleBook = NNTestSuite
+  { _newWithSize1d = D.c_newWithSize1d
+  , _newWithSize2d = D.c_newWithSize2d
+  , _newGen = pure nullPtr
+  , _normal = Right D.c_normal
+  , _fill = D.c_fill
+  , _sumall = D.c_sumall
+  , _free = D.c_free
+  , _nnAbsUpdateOutput = D.c_Abs_updateOutput
+  , _nnHSUpdateOutput = Nothing
+  , _nnL1UpdateOutput = D.c_L1Cost_updateOutput
+  , _nnRReLUUpdateOutput = D.c_RReLU_updateOutput
+  }
+
+{-
+floatBook :: NNTestSuite (Ptr C'THNNState) (Ptr C'THFloatTensor) CFloat CDouble
+floatBook = NNTestSuite
+  { _newWithSize1d = F.c_newWithSize1d
+  , _newWithSize2d = F.c_newWithSize2d
+  , _newGen = R.c_THGenerator_new
+  , _normal = F.c_normal
+  , _fill = F.c_fill
+  , _sumall = F.c_sumall
+  , _free = F.c_free
+  , _nnAbsUpdateOutput = F.c_Abs_updateOutput
+  , _nnHSUpdateOutput = F.c_HardShrink_updateOutput
+  , _nnL1UpdateOutput = F.c_L1Cost_updateOutput
+  , _nnRReLUUpdateOutput = F.c_RReLU_updateOutput
+  }
+-}
diff --git a/tests/Spec.hs b/tests/Spec.hs
new file mode 100644
--- /dev/null
+++ b/tests/Spec.hs
@@ -0,0 +1,1 @@
+{-# OPTIONS_GHC -F -pgmF hspec-discover #-}
diff --git a/tests/TensorSpec.hs b/tests/TensorSpec.hs
new file mode 100644
--- /dev/null
+++ b/tests/TensorSpec.hs
@@ -0,0 +1,293 @@
+module TensorSpec (spec) where
+
+import Foreign
+import Foreign.C.Types
+
+import Test.Hspec
+
+import Torch.FFI.Tests
+
+import Torch.Types.THC (C'THCState)
+import qualified Torch.FFI.THC.General as General
+
+import qualified Torch.Types.THC.Byte as B
+import qualified Torch.FFI.THC.Byte.Tensor as B
+import qualified Torch.FFI.THC.Byte.TensorIndex as B
+import qualified Torch.FFI.THC.Byte.TensorMasked as B
+import qualified Torch.FFI.THC.Byte.TensorMathCompare as B
+import qualified Torch.FFI.THC.Byte.TensorMathCompareT as B
+import qualified Torch.FFI.THC.Byte.TensorMath as B
+import qualified Torch.FFI.THC.Byte.TensorMathPairwise as B
+import qualified Torch.FFI.THC.Byte.TensorMathPointwise as B
+import qualified Torch.FFI.THC.Byte.TensorMathReduce as B
+import qualified Torch.FFI.THC.Byte.TensorMathScan as B
+import qualified Torch.FFI.THC.Byte.TensorMode as B
+import qualified Torch.FFI.THC.Byte.TensorRandom as B
+import qualified Torch.FFI.THC.Byte.TensorScatterGather as B
+import qualified Torch.FFI.THC.Byte.TensorSort as B
+import qualified Torch.FFI.THC.Byte.TensorTopK as B
+
+-- import qualified Torch.Types.THC.Float as F
+-- import qualified Torch.FFI.THC.Float.Tensor as F
+-- import qualified Torch.FFI.THC.Float.TensorIndex as F
+-- import qualified Torch.FFI.THC.Float.TensorMasked as F
+-- import qualified Torch.FFI.THC.Float.TensorMathBlas as F
+-- import qualified Torch.FFI.THC.Float.TensorMathCompare as F
+-- import qualified Torch.FFI.THC.Float.TensorMathCompareT as F
+-- import qualified Torch.FFI.THC.Float.TensorMath as F
+-- import qualified Torch.FFI.THC.Float.TensorMathPairwise as F
+-- import qualified Torch.FFI.THC.Float.TensorMathPointwise as F
+-- import qualified Torch.FFI.THC.Float.TensorMathReduce as F
+-- import qualified Torch.FFI.THC.Float.TensorMathScan as F
+-- import qualified Torch.FFI.THC.Float.TensorMode as F
+-- import qualified Torch.FFI.THC.Float.TensorRandom as F
+-- import qualified Torch.FFI.THC.Float.TensorScatterGather as F
+-- import qualified Torch.FFI.THC.Float.TensorSort as F
+-- import qualified Torch.FFI.THC.Float.TensorTopK as F
+
+import qualified Torch.Types.THC.Double as D
+import qualified Torch.FFI.THC.Double.Tensor as D
+import qualified Torch.FFI.THC.Double.TensorIndex as D
+import qualified Torch.FFI.THC.Double.TensorMasked as D
+import qualified Torch.FFI.THC.Double.TensorMathBlas as D
+import qualified Torch.FFI.THC.Double.TensorMathCompare as D
+import qualified Torch.FFI.THC.Double.TensorMathCompareT as D
+import qualified Torch.FFI.THC.Double.TensorMath as D
+import qualified Torch.FFI.THC.Double.TensorMathPairwise as D
+import qualified Torch.FFI.THC.Double.TensorMathPointwise as D
+import qualified Torch.FFI.THC.Double.TensorMathReduce as D
+import qualified Torch.FFI.THC.Double.TensorMathScan as D
+import qualified Torch.FFI.THC.Double.TensorMode as D
+import qualified Torch.FFI.THC.Double.TensorRandom as D
+import qualified Torch.FFI.THC.Double.TensorScatterGather as D
+import qualified Torch.FFI.THC.Double.TensorSort as D
+import qualified Torch.FFI.THC.Double.TensorTopK as D
+
+import qualified Torch.Types.THC.Int as I
+import qualified Torch.FFI.THC.Int.Tensor as I
+import qualified Torch.FFI.THC.Int.TensorIndex as I
+import qualified Torch.FFI.THC.Int.TensorMasked as I
+import qualified Torch.FFI.THC.Int.TensorMathCompare as I
+import qualified Torch.FFI.THC.Int.TensorMathCompareT as I
+import qualified Torch.FFI.THC.Int.TensorMath as I
+import qualified Torch.FFI.THC.Int.TensorMathPairwise as I
+import qualified Torch.FFI.THC.Int.TensorMathPointwise as I
+import qualified Torch.FFI.THC.Int.TensorMathReduce as I
+import qualified Torch.FFI.THC.Int.TensorMathScan as I
+import qualified Torch.FFI.THC.Int.TensorMode as I
+import qualified Torch.FFI.THC.Int.TensorRandom as I
+import qualified Torch.FFI.THC.Int.TensorScatterGather as I
+import qualified Torch.FFI.THC.Int.TensorSort as I
+import qualified Torch.FFI.THC.Int.TensorTopK as I
+
+import qualified Torch.Types.THC.Short as S
+import qualified Torch.FFI.THC.Short.Tensor as S
+import qualified Torch.FFI.THC.Short.TensorIndex as S
+import qualified Torch.FFI.THC.Short.TensorMasked as S
+import qualified Torch.FFI.THC.Short.TensorMathCompare as S
+import qualified Torch.FFI.THC.Short.TensorMathCompareT as S
+import qualified Torch.FFI.THC.Short.TensorMath as S
+import qualified Torch.FFI.THC.Short.TensorMathPairwise as S
+import qualified Torch.FFI.THC.Short.TensorMathPointwise as S
+import qualified Torch.FFI.THC.Short.TensorMathReduce as S
+import qualified Torch.FFI.THC.Short.TensorMathScan as S
+import qualified Torch.FFI.THC.Short.TensorMode as S
+import qualified Torch.FFI.THC.Short.TensorRandom as S
+import qualified Torch.FFI.THC.Short.TensorScatterGather as S
+import qualified Torch.FFI.THC.Short.TensorSort as S
+import qualified Torch.FFI.THC.Short.TensorTopK as S
+
+import qualified Torch.Types.THC.Long as L
+import qualified Torch.FFI.THC.Long.Tensor as L
+import qualified Torch.FFI.THC.Long.TensorIndex as L
+import qualified Torch.FFI.THC.Long.TensorMasked as L
+import qualified Torch.FFI.THC.Long.TensorMathCompare as L
+import qualified Torch.FFI.THC.Long.TensorMathCompareT as L
+import qualified Torch.FFI.THC.Long.TensorMath as L
+import qualified Torch.FFI.THC.Long.TensorMathPairwise as L
+import qualified Torch.FFI.THC.Long.TensorMathPointwise as L
+import qualified Torch.FFI.THC.Long.TensorMathReduce as L
+import qualified Torch.FFI.THC.Long.TensorMathScan as L
+import qualified Torch.FFI.THC.Long.TensorMode as L
+import qualified Torch.FFI.THC.Long.TensorRandom as L
+import qualified Torch.FFI.THC.Long.TensorScatterGather as L
+import qualified Torch.FFI.THC.Long.TensorSort as L
+import qualified Torch.FFI.THC.Long.TensorTopK as L
+
+import Internal
+
+
+main :: IO ()
+main = hspec spec
+
+spec :: Spec
+spec = do
+  s <- runIO cudaState
+  afterAll_ (stopCuda s) $ do
+    -- describe "Float Tensor creation and access methods"  $ signedSuite s floatBook
+    describe "Double Tensor creation and access methods" $ signedSuite s doubleBook
+    describe "Byte Tensor creation and access methods"   $ signedSuite s byteBook
+    describe "Int Tensor creation and access methods"    $ signedSuite s intBook
+    describe "Long Tensor creation and access methods"   $ signedSuite s longBook
+    describe "Short Tensor creation and access methods"  $ signedSuite s shortBook
+    describe "Double Tensor creation and access methods" $ signedSuite s doubleBook
+
+
+longBook :: TestFunctions (Ptr C'THCState) (Ptr L.CTensor) L.CReal L.CAccReal
+longBook = TestFunctions
+  { _new = L.c_new
+  , _newWithSize1d = L.c_newWithSize1d
+  , _newWithSize2d = L.c_newWithSize2d
+  , _newWithSize3d = L.c_newWithSize3d
+  , _newWithSize4d = L.c_newWithSize4d
+  , _nDimension = L.c_nDimension
+  , _set1d = L.c_set1d
+  , _get1d = L.c_get1d
+  , _set2d = L.c_set2d
+  , _get2d = L.c_get2d
+  , _set3d = L.c_set3d
+  , _get3d = L.c_get3d
+  , _set4d = L.c_set4d
+  , _get4d = L.c_get4d
+  , _size = L.c_size
+  , _fill = L.c_fill
+  , _free = L.c_free
+  , _sumall = L.c_sumall
+  , _prodall = L.c_prodall
+  , _zero = L.c_zero
+  , _dot = Nothing
+  , _abs = Just L.c_abs
+  }
+
+shortBook :: TestFunctions (Ptr C'THCState) (Ptr S.CTensor) S.CReal S.CAccReal
+shortBook = TestFunctions
+  { _new = S.c_new
+  , _newWithSize1d = S.c_newWithSize1d
+  , _newWithSize2d = S.c_newWithSize2d
+  , _newWithSize3d = S.c_newWithSize3d
+  , _newWithSize4d = S.c_newWithSize4d
+  , _nDimension = S.c_nDimension
+  , _set1d = S.c_set1d
+  , _get1d = S.c_get1d
+  , _set2d = S.c_set2d
+  , _get2d = S.c_get2d
+  , _set3d = S.c_set3d
+  , _get3d = S.c_get3d
+  , _set4d = S.c_set4d
+  , _get4d = S.c_get4d
+  , _size = S.c_size
+  , _fill = S.c_fill
+  , _free = S.c_free
+  , _sumall = S.c_sumall
+  , _prodall = S.c_prodall
+  , _zero = S.c_zero
+  , _dot = Nothing
+  , _abs = Just S.c_abs
+  }
+
+{-
+floatBook :: TestFunctions (Ptr C'THCState) (Ptr F.CTensor) F.CReal F.CAccReal
+floatBook = TestFunctions
+  { _new = F.c_new
+  , _newWithSize1d = F.c_newWithSize1d
+  , _newWithSize2d = F.c_newWithSize2d
+  , _newWithSize3d = F.c_newWithSize3d
+  , _newWithSize4d = F.c_newWithSize4d
+  , _nDimension = F.c_nDimension
+  , _set1d = F.c_set1d
+  , _get1d = F.c_get1d
+  , _set2d = F.c_set2d
+  , _get2d = F.c_get2d
+  , _set3d = F.c_set3d
+  , _get3d = F.c_get3d
+  , _set4d = F.c_set4d
+  , _get4d = F.c_get4d
+  , _size = F.c_size
+  , _fill = F.c_fill
+  , _free = F.c_free
+  , _sumall = F.c_sumall
+  , _prodall = F.c_prodall
+  , _zero = F.c_zero
+  , _dot = F.c_dot
+  , _abs = Just F.c_abs
+  }
+-}
+
+doubleBook :: TestFunctions (Ptr C'THCState) (Ptr D.CTensor) D.CReal D.CAccReal
+doubleBook = TestFunctions
+  { _new = D.c_new
+  , _newWithSize1d = D.c_newWithSize1d
+  , _newWithSize2d = D.c_newWithSize2d
+  , _newWithSize3d = D.c_newWithSize3d
+  , _newWithSize4d = D.c_newWithSize4d
+  , _nDimension = D.c_nDimension
+  , _set1d = D.c_set1d
+  , _get1d = D.c_get1d
+  , _set2d = D.c_set2d
+  , _get2d = D.c_get2d
+  , _set3d = D.c_set3d
+  , _get3d = D.c_get3d
+  , _set4d = D.c_set4d
+  , _get4d = D.c_get4d
+  , _size = D.c_size
+  , _fill = D.c_fill
+  , _free = D.c_free
+  , _sumall = D.c_sumall
+  , _prodall = D.c_prodall
+  , _zero = D.c_zero
+  , _dot = Just D.c_dot
+  , _abs = Just D.c_abs
+  }
+
+byteBook :: TestFunctions (Ptr C'THCState) (Ptr B.CTensor) B.CReal B.CAccReal
+byteBook = TestFunctions
+  { _new = B.c_new
+  , _newWithSize1d = B.c_newWithSize1d
+  , _newWithSize2d = B.c_newWithSize2d
+  , _newWithSize3d = B.c_newWithSize3d
+  , _newWithSize4d = B.c_newWithSize4d
+  , _nDimension = B.c_nDimension
+  , _set1d = B.c_set1d
+  , _get1d = B.c_get1d
+  , _set2d = B.c_set2d
+  , _get2d = B.c_get2d
+  , _set3d = B.c_set3d
+  , _get3d = B.c_get3d
+  , _set4d = B.c_set4d
+  , _get4d = B.c_get4d
+  , _size = B.c_size
+  , _fill = B.c_fill
+  , _free = B.c_free
+  , _sumall = B.c_sumall
+  , _prodall = B.c_prodall
+  , _zero = B.c_zero
+  , _dot = Nothing
+  , _abs = Nothing
+  }
+
+intBook :: TestFunctions (Ptr C'THCState) (Ptr I.CTensor) I.CReal I.CAccReal
+intBook = TestFunctions
+  { _new = I.c_new
+  , _newWithSize1d = I.c_newWithSize1d
+  , _newWithSize2d = I.c_newWithSize2d
+  , _newWithSize3d = I.c_newWithSize3d
+  , _newWithSize4d = I.c_newWithSize4d
+  , _nDimension = I.c_nDimension
+  , _set1d = I.c_set1d
+  , _get1d = I.c_get1d
+  , _set2d = I.c_set2d
+  , _get2d = I.c_get2d
+  , _set3d = I.c_set3d
+  , _get3d = I.c_get3d
+  , _set4d = I.c_set4d
+  , _get4d = I.c_get4d
+  , _size = I.c_size
+  , _fill = I.c_fill
+  , _free = I.c_free
+  , _sumall = I.c_sumall
+  , _prodall = I.c_prodall
+  , _zero = I.c_zero
+  , _dot = Nothing
+  , _abs = Just I.c_abs
+  }
+
