diff --git a/hasktorch-signatures-partial.cabal b/hasktorch-signatures-partial.cabal
new file mode 100644
--- /dev/null
+++ b/hasktorch-signatures-partial.cabal
@@ -0,0 +1,47 @@
+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
+-- 'signatures/partial/hasktorch-signatures-partial.dhall', and re-generate this file by running
+-- 'dhall-to-cabal -- signatures/partial/hasktorch-signatures-partial.dhall > hasktorch-signatures-partial.cabal'.
+-- * * * * * * * * * * * * WARNING * * * * * * * * * * * *
+name: hasktorch-signatures-partial
+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: Functions to partially satisfy tensor signatures
+description:
+    Undefined functions to satisfy backpack signatures (never be exported in core)
+category: Tensors, Machine Learning, AI
+build-type: Simple
+
+source-repository head
+    type: git
+    location: https://github.com/hasktorch/hasktorch
+
+library
+    exposed-modules:
+        Torch.Undefined.NN
+        Torch.Undefined.Types.NN
+        Torch.Undefined.Tensor.Math.Blas
+        Torch.Undefined.Tensor.Math.Floating
+        Torch.Undefined.Tensor.Math.Lapack
+        Torch.Undefined.Tensor.Math.Pointwise.Signed
+        Torch.Undefined.Tensor.Math.Pointwise.Floating
+        Torch.Undefined.Tensor.Math.Reduce.Floating
+        Torch.Undefined.Tensor.Random.TH
+        Torch.Undefined.Tensor.Random.THC
+        Torch.Undefined.Tensor.Math.Random.TH
+    hs-source-dirs: src
+    default-language: Haskell2010
+    build-depends:
+        base (==4.7 || >4.7) && <5,
+        hasktorch-types-th (==0.0.1 || >0.0.1) && <0.0.2,
+        hasktorch-signatures-types (==0.0.1 || >0.0.1) && <0.0.2
+
diff --git a/src/Torch/Undefined/NN.hs b/src/Torch/Undefined/NN.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/Undefined/NN.hs
@@ -0,0 +1,376 @@
+module Torch.Undefined.NN where
+
+import Foreign
+import Foreign.C.Types
+import Torch.Sig.Types
+import Torch.Undefined.Types.NN
+
+c_Abs_updateOutput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> IO ()
+c_Abs_updateOutput = undefined
+c_Abs_updateGradInput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> IO ()
+c_Abs_updateGradInput = undefined
+c_AbsCriterion_updateOutput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> CBool -> CBool -> IO ()
+c_AbsCriterion_updateOutput = undefined
+c_AbsCriterion_updateGradInput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> CBool -> CBool -> IO ()
+c_AbsCriterion_updateGradInput = undefined
+c_BCECriterion_updateOutput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> CBool -> Ptr CTensor -> CBool -> IO ()
+c_BCECriterion_updateOutput = undefined
+c_BCECriterion_updateGradInput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> CBool -> Ptr CTensor -> CBool -> IO ()
+c_BCECriterion_updateGradInput = undefined
+c_ELU_updateOutput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> CDouble -> CDouble -> CBool -> IO ()
+c_ELU_updateOutput = undefined
+c_ELU_updateGradInput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> CDouble -> CDouble -> IO ()
+c_ELU_updateGradInput = undefined
+c_DistKLDivCriterion_updateOutput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> CBool -> CBool -> IO ()
+c_DistKLDivCriterion_updateOutput = undefined
+c_DistKLDivCriterion_updateGradInput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> CBool -> CBool -> IO ()
+c_DistKLDivCriterion_updateGradInput = undefined
+c_GatedLinear_updateOutput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> CInt -> IO ()
+c_GatedLinear_updateOutput = undefined
+c_GatedLinear_updateGradInput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> CInt -> IO ()
+c_GatedLinear_updateGradInput = undefined
+c_HardTanh_updateOutput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> CDouble -> CDouble -> CBool -> IO ()
+c_HardTanh_updateOutput = undefined
+c_HardTanh_updateGradInput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> CDouble -> CDouble -> CBool -> IO ()
+c_HardTanh_updateGradInput = undefined
+c_Im2Col_updateOutput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> IO ()
+c_Im2Col_updateOutput = undefined
+c_Im2Col_updateGradInput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> IO ()
+c_Im2Col_updateGradInput = undefined
+c_Col2Im_updateOutput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> IO ()
+c_Col2Im_updateOutput = undefined
+c_Col2Im_updateGradInput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> IO ()
+c_Col2Im_updateGradInput = undefined
+c_L1Cost_updateOutput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> IO ()
+c_L1Cost_updateOutput = undefined
+c_L1Cost_updateGradInput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> IO ()
+c_L1Cost_updateGradInput = undefined
+c_LeakyReLU_updateOutput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> CDouble -> CBool -> IO ()
+c_LeakyReLU_updateOutput = undefined
+c_LeakyReLU_updateGradInput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> CDouble -> CBool -> IO ()
+c_LeakyReLU_updateGradInput = undefined
+c_GRUFused_updateOutput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> IO ()
+c_GRUFused_updateOutput = undefined
+c_GRUFused_updateGradInput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> IO ()
+c_GRUFused_updateGradInput = undefined
+c_LSTMFused_updateOutput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> IO ()
+c_LSTMFused_updateOutput = undefined
+c_LSTMFused_updateGradInput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> IO ()
+c_LSTMFused_updateGradInput = undefined
+c_LogSigmoid_updateOutput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> IO ()
+c_LogSigmoid_updateOutput = undefined
+c_LogSigmoid_updateGradInput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> IO ()
+c_LogSigmoid_updateGradInput = undefined
+c_LogSoftMax_updateOutput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> CDim -> IO ()
+c_LogSoftMax_updateOutput = undefined
+c_LogSoftMax_updateGradInput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> CDim -> IO ()
+c_LogSoftMax_updateGradInput = undefined
+c_MarginCriterion_updateOutput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> CBool -> CDouble -> IO ()
+c_MarginCriterion_updateOutput = undefined
+c_MarginCriterion_updateGradInput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> CBool -> CDouble -> IO ()
+c_MarginCriterion_updateGradInput = undefined
+c_SoftMarginCriterion_updateOutput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> CBool -> CBool -> IO ()
+c_SoftMarginCriterion_updateOutput = undefined
+c_SoftMarginCriterion_updateGradInput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> CBool -> CBool -> IO ()
+c_SoftMarginCriterion_updateGradInput = undefined
+c_MSECriterion_updateOutput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> CBool -> CBool -> IO ()
+c_MSECriterion_updateOutput = undefined
+c_MSECriterion_updateGradInput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> CBool -> CBool -> IO ()
+c_MSECriterion_updateGradInput = undefined
+c_PReLU_updateOutput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> IO ()
+c_PReLU_updateOutput = undefined
+c_PReLU_updateGradInput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> IO ()
+c_PReLU_updateGradInput = undefined
+c_PReLU_accGradParameters :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> CDouble -> IO ()
+c_PReLU_accGradParameters = undefined
+c_RReLU_updateOutput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> CDouble -> CDouble -> CBool -> CBool -> Ptr CNNGenerator -> IO ()
+c_RReLU_updateOutput = undefined
+c_RReLU_updateGradInput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> CDouble -> CDouble -> CBool -> CBool -> IO ()
+c_RReLU_updateGradInput = undefined
+c_Sigmoid_updateOutput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> IO ()
+c_Sigmoid_updateOutput = undefined
+c_Sigmoid_updateGradInput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> IO ()
+c_Sigmoid_updateGradInput = undefined
+c_SmoothL1Criterion_updateOutput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> CBool -> CBool -> IO ()
+c_SmoothL1Criterion_updateOutput = undefined
+c_SmoothL1Criterion_updateGradInput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> CBool -> CBool -> IO ()
+c_SmoothL1Criterion_updateGradInput = undefined
+c_SoftMax_updateOutput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> CDim -> IO ()
+c_SoftMax_updateOutput = undefined
+c_SoftMax_updateGradInput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> CDim -> IO ()
+c_SoftMax_updateGradInput = undefined
+c_SoftPlus_updateOutput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> CDouble -> CDouble -> IO ()
+c_SoftPlus_updateOutput = undefined
+c_SoftPlus_updateGradInput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> CDouble -> CDouble -> IO ()
+c_SoftPlus_updateGradInput = undefined
+c_SoftShrink_updateOutput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> CDouble -> IO ()
+c_SoftShrink_updateOutput = undefined
+c_SoftShrink_updateGradInput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> CDouble -> IO ()
+c_SoftShrink_updateGradInput = undefined
+c_SparseLinear_updateOutput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> IO ()
+c_SparseLinear_updateOutput = undefined
+c_SparseLinear_accGradParameters :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> CDouble -> CDouble -> IO ()
+c_SparseLinear_accGradParameters = undefined
+c_SparseLinear_zeroGradParameters :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> IO ()
+c_SparseLinear_zeroGradParameters = undefined
+c_SparseLinear_updateParameters :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> CDouble -> IO ()
+c_SparseLinear_updateParameters = undefined
+c_SparseLinear_legacyUpdateOutput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> IO ()
+c_SparseLinear_legacyUpdateOutput = undefined
+c_SparseLinear_legacyAccGradParameters :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> CDouble -> CDouble -> IO ()
+c_SparseLinear_legacyAccGradParameters = undefined
+c_Sqrt_updateOutput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> CDouble -> IO ()
+c_Sqrt_updateOutput = undefined
+c_Sqrt_updateGradInput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> IO ()
+c_Sqrt_updateGradInput = undefined
+c_Square_updateOutput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> IO ()
+c_Square_updateOutput = undefined
+c_Square_updateGradInput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> IO ()
+c_Square_updateGradInput = undefined
+c_Tanh_updateOutput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> IO ()
+c_Tanh_updateOutput = undefined
+c_Tanh_updateGradInput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> IO ()
+c_Tanh_updateGradInput = undefined
+c_Threshold_updateOutput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> CDouble -> CDouble -> CBool -> IO ()
+c_Threshold_updateOutput = undefined
+c_Threshold_updateGradInput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> CDouble -> CDouble -> CBool -> IO ()
+c_Threshold_updateGradInput = undefined
+c_TemporalConvolution_updateOutput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> CInt -> CInt -> CInt -> CInt -> IO ()
+c_TemporalConvolution_updateOutput = undefined
+c_TemporalConvolution_updateGradInput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> CInt -> CInt -> IO ()
+c_TemporalConvolution_updateGradInput = undefined
+c_TemporalConvolution_accGradParameters :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> CInt -> CInt -> CDouble -> IO ()
+c_TemporalConvolution_accGradParameters = undefined
+c_TemporalRowConvolution_updateOutput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> CInt -> CInt -> CInt -> CBool -> IO ()
+c_TemporalRowConvolution_updateOutput = undefined
+c_TemporalRowConvolution_updateGradInput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> CInt -> CInt -> CInt -> CBool -> IO ()
+c_TemporalRowConvolution_updateGradInput = undefined
+c_TemporalRowConvolution_accGradParameters :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> CInt -> CInt -> CInt -> CBool -> CDouble -> IO ()
+c_TemporalRowConvolution_accGradParameters = undefined
+c_TemporalUpSamplingNearest_updateOutput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> CInt -> IO ()
+c_TemporalUpSamplingNearest_updateOutput = undefined
+c_TemporalUpSamplingNearest_updateGradInput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> CInt -> IO ()
+c_TemporalUpSamplingNearest_updateGradInput = undefined
+c_TemporalUpSamplingLinear_updateOutput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> CInt -> IO ()
+c_TemporalUpSamplingLinear_updateOutput = undefined
+c_TemporalUpSamplingLinear_updateGradInput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> CInt -> CInt -> CInt -> CInt -> IO ()
+c_TemporalUpSamplingLinear_updateGradInput = undefined
+c_BatchNormalization_updateOutput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> CBool -> CDouble -> CDouble -> IO ()
+c_BatchNormalization_updateOutput = undefined
+c_BatchNormalization_backward :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> CBool -> CDouble -> CDouble -> IO ()
+c_BatchNormalization_backward = undefined
+c_SpatialConvolutionMM_updateOutput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> IO ()
+c_SpatialConvolutionMM_updateOutput = undefined
+c_SpatialConvolutionMM_updateGradInput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> IO ()
+c_SpatialConvolutionMM_updateGradInput = undefined
+c_SpatialConvolutionMM_accGradParameters :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CDouble -> IO ()
+c_SpatialConvolutionMM_accGradParameters = undefined
+c_SpatialConvolutionLocal_updateOutput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CLLong -> CLLong -> CLLong -> CLLong -> IO ()
+c_SpatialConvolutionLocal_updateOutput = undefined
+c_SpatialConvolutionLocal_updateGradInput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CLLong -> CLLong -> CLLong -> CLLong -> IO ()
+c_SpatialConvolutionLocal_updateGradInput = undefined
+c_SpatialConvolutionLocal_accGradParameters :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CLLong -> CLLong -> CLLong -> CLLong -> CDouble -> IO ()
+c_SpatialConvolutionLocal_accGradParameters = undefined
+c_SpatialAdaptiveAveragePooling_updateOutput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> CInt -> CInt -> IO ()
+c_SpatialAdaptiveAveragePooling_updateOutput = undefined
+c_SpatialAdaptiveAveragePooling_updateGradInput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> IO ()
+c_SpatialAdaptiveAveragePooling_updateGradInput = undefined
+c_SpatialAveragePooling_updateOutput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CBool -> CBool -> IO ()
+c_SpatialAveragePooling_updateOutput = undefined
+c_SpatialAveragePooling_updateGradInput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CBool -> CBool -> IO ()
+c_SpatialAveragePooling_updateGradInput = undefined
+c_SpatialFullConvolution_updateOutput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> IO ()
+c_SpatialFullConvolution_updateOutput = undefined
+c_SpatialFullConvolution_updateGradInput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> IO ()
+c_SpatialFullConvolution_updateGradInput = undefined
+c_SpatialFullConvolution_accGradParameters :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CDouble -> IO ()
+c_SpatialFullConvolution_accGradParameters = undefined
+c_SpatialDilatedConvolution_updateOutput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> IO ()
+c_SpatialDilatedConvolution_updateOutput = undefined
+c_SpatialDilatedConvolution_updateGradInput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> IO ()
+c_SpatialDilatedConvolution_updateGradInput = undefined
+c_SpatialDilatedConvolution_accGradParameters :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CDouble -> IO ()
+c_SpatialDilatedConvolution_accGradParameters = undefined
+c_SpatialFullDilatedConvolution_updateOutput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> IO ()
+c_SpatialFullDilatedConvolution_updateOutput = undefined
+c_SpatialFullDilatedConvolution_updateGradInput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> IO ()
+c_SpatialFullDilatedConvolution_updateGradInput = undefined
+c_SpatialFullDilatedConvolution_accGradParameters :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CDouble -> IO ()
+c_SpatialFullDilatedConvolution_accGradParameters = undefined
+c_SpatialSubSampling_updateOutput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> CInt -> CInt -> CInt -> CInt -> IO ()
+c_SpatialSubSampling_updateOutput = undefined
+c_SpatialSubSampling_updateGradInput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> CInt -> CInt -> CInt -> CInt -> IO ()
+c_SpatialSubSampling_updateGradInput = undefined
+c_SpatialSubSampling_accGradParameters :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> CInt -> CInt -> CInt -> CInt -> CDouble -> IO ()
+c_SpatialSubSampling_accGradParameters = undefined
+c_SpatialUpSamplingNearest_updateOutput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> CInt -> IO ()
+c_SpatialUpSamplingNearest_updateOutput = undefined
+c_SpatialUpSamplingNearest_updateGradInput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> CInt -> IO ()
+c_SpatialUpSamplingNearest_updateGradInput = undefined
+c_SpatialUpSamplingBilinear_updateOutput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> CInt -> CInt -> IO ()
+c_SpatialUpSamplingBilinear_updateOutput = undefined
+c_SpatialUpSamplingBilinear_updateGradInput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> IO ()
+c_SpatialUpSamplingBilinear_updateGradInput = undefined
+c_SpatialGridSamplerBilinear_updateOutput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> CInt -> IO ()
+c_SpatialGridSamplerBilinear_updateOutput = undefined
+c_SpatialGridSamplerBilinear_updateGradInput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> CInt -> IO ()
+c_SpatialGridSamplerBilinear_updateGradInput = undefined
+c_VolumetricGridSamplerBilinear_updateOutput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> CInt -> IO ()
+c_VolumetricGridSamplerBilinear_updateOutput = undefined
+c_VolumetricGridSamplerBilinear_updateGradInput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> CInt -> IO ()
+c_VolumetricGridSamplerBilinear_updateGradInput = undefined
+c_VolumetricAveragePooling_updateOutput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CBool -> CBool -> IO ()
+c_VolumetricAveragePooling_updateOutput = undefined
+c_VolumetricAveragePooling_updateGradInput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CBool -> CBool -> IO ()
+c_VolumetricAveragePooling_updateGradInput = undefined
+c_VolumetricConvolution_updateOutput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> IO ()
+c_VolumetricConvolution_updateOutput = undefined
+c_VolumetricConvolution_updateGradInput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> IO ()
+c_VolumetricConvolution_updateGradInput = undefined
+c_VolumetricConvolution_accGradParameters :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CDouble -> IO ()
+c_VolumetricConvolution_accGradParameters = undefined
+c_VolumetricFullConvolution_updateOutput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> IO ()
+c_VolumetricFullConvolution_updateOutput = undefined
+c_VolumetricFullConvolution_updateGradInput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> IO ()
+c_VolumetricFullConvolution_updateGradInput = undefined
+c_VolumetricFullConvolution_accGradParameters :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CDouble -> IO ()
+c_VolumetricFullConvolution_accGradParameters = undefined
+c_VolumetricDilatedConvolution_updateOutput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> IO ()
+c_VolumetricDilatedConvolution_updateOutput = undefined
+c_VolumetricDilatedConvolution_updateGradInput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> IO ()
+c_VolumetricDilatedConvolution_updateGradInput = undefined
+c_VolumetricDilatedConvolution_accGradParameters :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CDouble -> IO ()
+c_VolumetricDilatedConvolution_accGradParameters = undefined
+c_VolumetricFullDilatedConvolution_updateOutput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> IO ()
+c_VolumetricFullDilatedConvolution_updateOutput = undefined
+c_VolumetricFullDilatedConvolution_updateGradInput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> IO ()
+c_VolumetricFullDilatedConvolution_updateGradInput = undefined
+c_VolumetricFullDilatedConvolution_accGradParameters :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CDouble -> IO ()
+c_VolumetricFullDilatedConvolution_accGradParameters = undefined
+c_VolumetricAdaptiveAveragePooling_updateOutput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> CInt -> CInt -> CInt -> IO ()
+c_VolumetricAdaptiveAveragePooling_updateOutput = undefined
+c_VolumetricAdaptiveAveragePooling_updateGradInput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> IO ()
+c_VolumetricAdaptiveAveragePooling_updateGradInput = undefined
+c_SpatialReflectionPadding_updateOutput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> CInt -> CInt -> CInt -> CInt -> IO ()
+c_SpatialReflectionPadding_updateOutput = undefined
+c_SpatialReflectionPadding_updateGradInput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> CInt -> CInt -> CInt -> CInt -> IO ()
+c_SpatialReflectionPadding_updateGradInput = undefined
+c_SpatialReplicationPadding_updateOutput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> CInt -> CInt -> CInt -> CInt -> IO ()
+c_SpatialReplicationPadding_updateOutput = undefined
+c_SpatialReplicationPadding_updateGradInput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> CInt -> CInt -> CInt -> CInt -> IO ()
+c_SpatialReplicationPadding_updateGradInput = undefined
+c_FeatureLPPooling_updateOutput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> CDouble -> CInt -> CInt -> CBool -> IO ()
+c_FeatureLPPooling_updateOutput = undefined
+c_FeatureLPPooling_updateGradInput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> CDouble -> CInt -> CInt -> CBool -> IO ()
+c_FeatureLPPooling_updateGradInput = undefined
+c_VolumetricReplicationPadding_updateOutput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> IO ()
+c_VolumetricReplicationPadding_updateOutput = undefined
+c_VolumetricReplicationPadding_updateGradInput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> IO ()
+c_VolumetricReplicationPadding_updateGradInput = undefined
+c_VolumetricUpSamplingNearest_updateOutput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> CInt -> IO ()
+c_VolumetricUpSamplingNearest_updateOutput = undefined
+c_VolumetricUpSamplingNearest_updateGradInput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> CInt -> IO ()
+c_VolumetricUpSamplingNearest_updateGradInput = undefined
+c_VolumetricUpSamplingTrilinear_updateOutput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> CInt -> CInt -> CInt -> IO ()
+c_VolumetricUpSamplingTrilinear_updateOutput = undefined
+c_VolumetricUpSamplingTrilinear_updateGradInput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> IO ()
+c_VolumetricUpSamplingTrilinear_updateGradInput = undefined
+c_TemporalReflectionPadding_updateOutput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> CInt -> CInt -> IO ()
+c_TemporalReflectionPadding_updateOutput = undefined
+c_TemporalReflectionPadding_updateGradInput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> CInt -> CInt -> IO ()
+c_TemporalReflectionPadding_updateGradInput = undefined
+c_TemporalReplicationPadding_updateOutput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> CInt -> CInt -> IO ()
+c_TemporalReplicationPadding_updateOutput = undefined
+c_TemporalReplicationPadding_updateGradInput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> CInt -> CInt -> IO ()
+c_TemporalReplicationPadding_updateGradInput = undefined
+
+c_ClassNLLCriterion_updateOutput :: Ptr CNNState -> Ptr CTensor -> Ptr CIndexTensor -> Ptr CTensor -> CBool -> Ptr CTensor -> Ptr CTensor -> CLLong -> CBool -> IO ()
+c_ClassNLLCriterion_updateOutput = undefined
+c_ClassNLLCriterion_updateGradInput :: Ptr CNNState -> Ptr CTensor -> Ptr CIndexTensor -> Ptr CTensor -> Ptr CTensor -> CBool -> Ptr CTensor -> Ptr CTensor -> CLLong -> CBool -> IO ()
+c_ClassNLLCriterion_updateGradInput = undefined
+c_SpatialClassNLLCriterion_updateOutput :: Ptr CNNState -> Ptr CTensor -> Ptr CIndexTensor -> Ptr CTensor -> CBool -> Ptr CTensor -> Ptr CTensor -> CLLong -> CBool -> IO ()
+c_SpatialClassNLLCriterion_updateOutput = undefined
+c_SpatialClassNLLCriterion_updateGradInput :: Ptr CNNState -> Ptr CTensor -> Ptr CIndexTensor -> Ptr CTensor -> Ptr CTensor -> CBool -> Ptr CTensor -> Ptr CTensor -> CLLong -> CBool -> IO ()
+c_SpatialClassNLLCriterion_updateGradInput = undefined
+c_MultiLabelMarginCriterion_updateOutput :: Ptr CNNState -> Ptr CTensor -> Ptr CIndexTensor -> Ptr CTensor -> Ptr CTensor -> CBool -> CBool -> IO ()
+c_MultiLabelMarginCriterion_updateOutput = undefined
+c_MultiLabelMarginCriterion_updateGradInput :: Ptr CNNState -> Ptr CTensor -> Ptr CIndexTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> CBool -> CBool -> IO ()
+c_MultiLabelMarginCriterion_updateGradInput = undefined
+c_MultiMarginCriterion_updateOutput :: Ptr CNNState -> Ptr CTensor -> Ptr CIndexTensor -> Ptr CTensor -> CBool -> CInt -> Ptr CTensor -> CDouble -> CBool -> IO ()
+c_MultiMarginCriterion_updateOutput = undefined
+c_MultiMarginCriterion_updateGradInput :: Ptr CNNState -> Ptr CTensor -> Ptr CIndexTensor -> Ptr CTensor -> Ptr CTensor -> CBool -> CInt -> Ptr CTensor -> CDouble -> CBool -> IO ()
+c_MultiMarginCriterion_updateGradInput = undefined
+
+c_IndexLinear_updateOutput :: Ptr CNNState -> Ptr CIndexTensor -> CLLong -> Ptr CTensor -> Ptr CIndexTensor -> Ptr CIndexTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> CInt -> IO ()
+c_IndexLinear_updateOutput = undefined
+c_IndexLinear_accGradParameters :: Ptr CNNState -> Ptr CIndexTensor -> CLLong -> Ptr CTensor -> Ptr CIndexTensor -> Ptr CIndexTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> CDouble -> CDouble -> IO ()
+c_IndexLinear_accGradParameters = undefined
+c_IndexLinear_accUpdateGradParameters :: Ptr CNNState -> Ptr CIndexTensor -> CLLong -> Ptr CTensor -> Ptr CIndexTensor -> Ptr CIndexTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> CDouble -> CDouble -> IO ()
+c_IndexLinear_accUpdateGradParameters = undefined
+c_IndexLinear_updateParameters :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CIndexTensor -> Ptr CIndexTensor -> CLLong -> CDouble -> CDouble -> IO ()
+c_IndexLinear_updateParameters = undefined
+
+c_TemporalMaxPooling_updateOutput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> Ptr CIndexTensor -> CInt -> CInt -> IO ()
+c_TemporalMaxPooling_updateOutput = undefined
+c_TemporalMaxPooling_updateGradInput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CIndexTensor -> CInt -> CInt -> IO ()
+c_TemporalMaxPooling_updateGradInput = undefined
+
+
+c_SpatialAdaptiveMaxPooling_updateOutput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> Ptr CIndexTensor -> CInt -> CInt -> IO ()
+c_SpatialAdaptiveMaxPooling_updateOutput = undefined
+c_SpatialAdaptiveMaxPooling_updateGradInput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CIndexTensor -> IO ()
+c_SpatialAdaptiveMaxPooling_updateGradInput = undefined
+
+c_SpatialFractionalMaxPooling_updateOutput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> CInt -> CInt -> CInt -> CInt -> Ptr CIndexTensor -> Ptr CTensor -> IO ()
+c_SpatialFractionalMaxPooling_updateOutput = undefined
+c_SpatialFractionalMaxPooling_updateGradInput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> CInt -> CInt -> CInt -> CInt -> Ptr CIndexTensor -> IO ()
+c_SpatialFractionalMaxPooling_updateGradInput = undefined
+
+
+c_SpatialMaxPooling_updateOutput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> Ptr CIndexTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CBool -> IO ()
+c_SpatialMaxPooling_updateOutput = undefined
+c_SpatialMaxPooling_updateGradInput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CIndexTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CBool -> IO ()
+c_SpatialMaxPooling_updateGradInput = undefined
+
+c_SpatialDilatedMaxPooling_updateOutput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> Ptr CIndexTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CBool -> IO ()
+c_SpatialDilatedMaxPooling_updateOutput = undefined
+c_SpatialDilatedMaxPooling_updateGradInput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CIndexTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CBool -> IO ()
+c_SpatialDilatedMaxPooling_updateGradInput = undefined
+
+c_SpatialMaxUnpooling_updateOutput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> Ptr CIndexTensor -> CInt -> CInt -> IO ()
+c_SpatialMaxUnpooling_updateOutput = undefined
+c_SpatialMaxUnpooling_updateGradInput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CIndexTensor -> CInt -> CInt -> IO ()
+c_SpatialMaxUnpooling_updateGradInput = undefined
+
+c_VolumetricFractionalMaxPooling_updateOutput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> Ptr CIndexTensor -> Ptr CTensor -> IO ()
+c_VolumetricFractionalMaxPooling_updateOutput = undefined
+c_VolumetricFractionalMaxPooling_updateGradInput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> Ptr CIndexTensor -> IO ()
+c_VolumetricFractionalMaxPooling_updateGradInput = undefined
+
+c_VolumetricMaxPooling_updateOutput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> Ptr CIndexTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CBool -> IO ()
+c_VolumetricMaxPooling_updateOutput = undefined
+c_VolumetricMaxPooling_updateGradInput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CIndexTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CBool -> IO ()
+c_VolumetricMaxPooling_updateGradInput = undefined
+
+c_VolumetricDilatedMaxPooling_updateOutput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> Ptr CIndexTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CBool -> IO ()
+c_VolumetricDilatedMaxPooling_updateOutput = undefined
+c_VolumetricDilatedMaxPooling_updateGradInput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CIndexTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CBool -> IO ()
+c_VolumetricDilatedMaxPooling_updateGradInput = undefined
+
+c_VolumetricMaxUnpooling_updateOutput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> Ptr CIndexTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> IO ()
+c_VolumetricMaxUnpooling_updateOutput = undefined
+c_VolumetricMaxUnpooling_updateGradInput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CIndexTensor -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> CInt -> IO ()
+c_VolumetricMaxUnpooling_updateGradInput = undefined
+
+c_VolumetricAdaptiveMaxPooling_updateOutput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> Ptr CIndexTensor -> CInt -> CInt -> CInt -> IO ()
+c_VolumetricAdaptiveMaxPooling_updateOutput = undefined
+c_VolumetricAdaptiveMaxPooling_updateGradInput :: Ptr CNNState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CIndexTensor -> IO ()
+c_VolumetricAdaptiveMaxPooling_updateGradInput = undefined
+
+
+c_LookupTable_accGradParameters :: Ptr CNNState -> Ptr CIndexTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CIndexTensor -> Ptr CIndexTensor -> Ptr CIndexTensor -> CBool -> CInt -> CDouble -> IO ()
+c_LookupTable_accGradParameters = undefined
+
+c_LookupTable_renorm :: Ptr CNNState -> Ptr CIndexTensor -> Ptr CTensor -> CDouble -> CDouble -> IO ()
+c_LookupTable_renorm = undefined
+
diff --git a/src/Torch/Undefined/Tensor/Math/Blas.hs b/src/Torch/Undefined/Tensor/Math/Blas.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/Undefined/Tensor/Math/Blas.hs
@@ -0,0 +1,24 @@
+module Torch.Undefined.Tensor.Math.Blas where
+
+import Foreign
+import Torch.Sig.Types
+import Torch.Sig.Types.Global
+
+c_dot     :: Ptr CState -> Ptr CTensor -> Ptr CTensor -> IO CAccReal
+c_dot     = undefined
+c_addmv   :: Ptr CState -> Ptr CTensor -> CReal -> Ptr CTensor -> CReal -> Ptr CTensor -> Ptr CTensor -> IO ()
+c_addmv   = undefined
+c_addmm   :: Ptr CState -> Ptr CTensor -> CReal -> Ptr CTensor -> CReal -> Ptr CTensor -> Ptr CTensor -> IO ()
+c_addmm   = undefined
+c_addr    :: Ptr CState -> Ptr CTensor -> CReal -> Ptr CTensor -> CReal -> Ptr CTensor -> Ptr CTensor -> IO ()
+c_addr    = undefined
+c_addbmm  :: Ptr CState -> Ptr CTensor -> CReal -> Ptr CTensor -> CReal -> Ptr CTensor -> Ptr CTensor -> IO ()
+c_addbmm  = undefined
+c_baddbmm :: Ptr CState -> Ptr CTensor -> CReal -> Ptr CTensor -> CReal -> Ptr CTensor -> Ptr CTensor -> IO ()
+c_baddbmm = undefined
+
+-- * THC Float Blas, TH Float Lapack
+-- c_btrifact :: Ptr CState -> Ptr CTensor -> Ptr CIntTensor -> Ptr CIntTensor -> CInt -> Ptr CTensor -> IO ()
+-- c_btrisolve :: Ptr CState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CIntTensor -> IO ()
+
+
diff --git a/src/Torch/Undefined/Tensor/Math/Floating.hs b/src/Torch/Undefined/Tensor/Math/Floating.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/Undefined/Tensor/Math/Floating.hs
@@ -0,0 +1,13 @@
+module Torch.Undefined.Tensor.Math.Floating where
+
+import Foreign
+import Foreign.C.Types
+import Torch.Sig.Types
+import Torch.Sig.Types.Global
+
+c_linspace     :: Ptr CState -> Ptr CTensor -> CReal -> CReal -> CLLong -> IO ()
+c_linspace     = undefined
+c_logspace     :: Ptr CState -> Ptr CTensor -> CReal -> CReal -> CLLong -> IO ()
+c_logspace     = undefined
+
+
diff --git a/src/Torch/Undefined/Tensor/Math/Lapack.hs b/src/Torch/Undefined/Tensor/Math/Lapack.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/Undefined/Tensor/Math/Lapack.hs
@@ -0,0 +1,39 @@
+module Torch.Undefined.Tensor.Math.Lapack where
+
+import Foreign
+import Foreign.C.Types
+import Torch.Sig.Types
+import Torch.Sig.Types.Global
+
+c_gesv :: Ptr CState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> IO ()
+c_gesv = undefined
+c_gels :: Ptr CState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> IO ()
+c_gels = undefined
+c_syev :: Ptr CState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CChar -> Ptr CChar -> IO ()
+c_syev = undefined
+c_geev :: Ptr CState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CChar -> IO ()
+c_geev = undefined
+c_gesvd :: Ptr CState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CChar -> IO ()
+c_gesvd = undefined
+c_gesvd2 :: Ptr CState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CChar -> IO ()
+c_gesvd2 = undefined
+c_getri :: Ptr CState -> Ptr CTensor -> Ptr CTensor -> IO ()
+c_getri = undefined
+c_potri :: Ptr CState -> Ptr CTensor -> Ptr CTensor -> Ptr CChar -> IO ()
+c_potri = undefined
+c_potrf :: Ptr CState -> Ptr CTensor -> Ptr CTensor -> Ptr CChar -> IO ()
+c_potrf = undefined
+c_potrs :: Ptr CState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CChar -> IO ()
+c_potrs = undefined
+c_geqrf :: Ptr CState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> IO ()
+c_geqrf = undefined
+c_qr :: Ptr CState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> IO ()
+c_qr = undefined
+
+-- * TH
+-- c_trtrs     :: Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CChar -> Ptr CChar -> Ptr CChar -> IO ()
+-- c_orgqr     :: Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> IO ()
+-- c_ormqr     :: Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CChar -> Ptr CChar -> IO ()
+-- c_pstrf     :: Ptr CTensor -> Ptr CTHIntTensor -> Ptr CTensor -> Ptr CChar -> CReal -> IO ()
+-- c_btrifact  :: Ptr CTensor -> Ptr CTHIntTensor -> Ptr CTHIntTensor -> CInt -> Ptr CTensor -> IO ()
+-- c_btrisolve :: Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> Ptr CTHIntTensor -> IO ()
diff --git a/src/Torch/Undefined/Tensor/Math/Pointwise/Floating.hs b/src/Torch/Undefined/Tensor/Math/Pointwise/Floating.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/Undefined/Tensor/Math/Pointwise/Floating.hs
@@ -0,0 +1,75 @@
+module Torch.Undefined.Tensor.Math.Pointwise.Floating where
+
+import Foreign
+import Foreign.C.Types
+import Torch.Sig.Types
+import Torch.Sig.Types.Global
+
+c_cinv         :: Ptr CState -> Ptr CTensor -> Ptr CTensor -> IO ()
+c_cinv         = undefined
+c_sigmoid      :: Ptr CState -> Ptr CTensor -> Ptr CTensor -> IO ()
+c_sigmoid      = undefined
+c_log          :: Ptr CState -> Ptr CTensor -> Ptr CTensor -> IO ()
+c_log          = undefined
+c_lgamma       :: Ptr CState -> Ptr CTensor -> Ptr CTensor -> IO ()
+c_lgamma       = undefined
+c_log1p        :: Ptr CState -> Ptr CTensor -> Ptr CTensor -> IO ()
+c_log1p        = undefined
+c_exp          :: Ptr CState -> Ptr CTensor -> Ptr CTensor -> IO ()
+c_exp          = undefined
+c_cos          :: Ptr CState -> Ptr CTensor -> Ptr CTensor -> IO ()
+c_cos          = undefined
+c_acos         :: Ptr CState -> Ptr CTensor -> Ptr CTensor -> IO ()
+c_acos         = undefined
+c_cosh         :: Ptr CState -> Ptr CTensor -> Ptr CTensor -> IO ()
+c_cosh         = undefined
+c_sin          :: Ptr CState -> Ptr CTensor -> Ptr CTensor -> IO ()
+c_sin          = undefined
+c_asin         :: Ptr CState -> Ptr CTensor -> Ptr CTensor -> IO ()
+c_asin         = undefined
+c_sinh         :: Ptr CState -> Ptr CTensor -> Ptr CTensor -> IO ()
+c_sinh         = undefined
+c_tan          :: Ptr CState -> Ptr CTensor -> Ptr CTensor -> IO ()
+c_tan          = undefined
+c_atan         :: Ptr CState -> Ptr CTensor -> Ptr CTensor -> IO ()
+c_atan         = undefined
+c_atan2        :: Ptr CState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> IO ()
+c_atan2        = undefined
+c_tanh         :: Ptr CState -> Ptr CTensor -> Ptr CTensor -> IO ()
+c_tanh         = undefined
+c_erf          :: Ptr CState -> Ptr CTensor -> Ptr CTensor -> IO ()
+c_erf          = undefined
+c_erfinv       :: Ptr CState -> Ptr CTensor -> Ptr CTensor -> IO ()
+c_erfinv       = undefined
+c_pow          :: Ptr CState -> Ptr CTensor -> Ptr CTensor -> CReal -> IO ()
+c_pow          = undefined
+c_tpow         :: Ptr CState -> Ptr CTensor -> CReal -> Ptr CTensor -> IO ()
+c_tpow         = undefined
+c_sqrt         :: Ptr CState -> Ptr CTensor -> Ptr CTensor -> IO ()
+c_sqrt         = undefined
+c_rsqrt        :: Ptr CState -> Ptr CTensor -> Ptr CTensor -> IO ()
+c_rsqrt        = undefined
+c_ceil         :: Ptr CState -> Ptr CTensor -> Ptr CTensor -> IO ()
+c_ceil         = undefined
+c_floor        :: Ptr CState -> Ptr CTensor -> Ptr CTensor -> IO ()
+c_floor        = undefined
+c_round        :: Ptr CState -> Ptr CTensor -> Ptr CTensor -> IO ()
+c_round        = undefined
+c_trunc        :: Ptr CState -> Ptr CTensor -> Ptr CTensor -> IO ()
+c_trunc        = undefined
+c_frac         :: Ptr CState -> Ptr CTensor -> Ptr CTensor -> IO ()
+c_frac         = undefined
+c_lerp         :: Ptr CState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> CReal -> IO ()
+c_lerp         = undefined
+
+
+{-
+c_rand         :: Ptr CState -> Ptr CTensor -> Ptr CGenerator -> Ptr CIndexStorage -> IO ()
+c_randn        :: Ptr CState -> Ptr CTensor -> Ptr CGenerator -> Ptr CIndexStorage -> IO ()
+-}
+
+{-
+UNKNOWN, but in TH
+-- c_histc        :: Ptr CState -> Ptr CTensor -> Ptr CTensor -> CLLong -> CReal -> CReal -> IO ()
+-- c_bhistc       :: Ptr CState -> Ptr CTensor -> Ptr CTensor -> CLLong -> CReal -> CReal -> IO ()
+-}
diff --git a/src/Torch/Undefined/Tensor/Math/Pointwise/Signed.hs b/src/Torch/Undefined/Tensor/Math/Pointwise/Signed.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/Undefined/Tensor/Math/Pointwise/Signed.hs
@@ -0,0 +1,12 @@
+module Torch.Undefined.Tensor.Math.Pointwise.Signed where
+
+import Foreign
+import Torch.Sig.Types
+import Torch.Sig.Types.Global
+
+c_neg :: Ptr CState -> Ptr CTensor -> Ptr CTensor -> IO ()
+c_neg = undefined
+
+c_abs :: Ptr CState -> Ptr CTensor -> Ptr CTensor -> IO ()
+c_abs = undefined
+
diff --git a/src/Torch/Undefined/Tensor/Math/Random/TH.hs b/src/Torch/Undefined/Tensor/Math/Random/TH.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/Undefined/Tensor/Math/Random/TH.hs
@@ -0,0 +1,16 @@
+module Torch.Undefined.Tensor.Math.Random.TH where
+
+import Foreign
+import Foreign.C.Types
+import Torch.Sig.Types
+import Torch.Sig.Types.Global
+import qualified Torch.Types.TH as TH
+
+c_randperm :: Ptr CState -> Ptr CTensor -> Ptr CGenerator -> CLLong -> IO ()
+c_randperm = undefined
+c_rand     :: Ptr CState -> Ptr CTensor -> Ptr CGenerator -> Ptr TH.CLongStorage -> IO ()
+c_rand     = undefined
+c_randn    :: Ptr CState -> Ptr CTensor -> Ptr CGenerator -> Ptr TH.CLongStorage -> IO ()
+c_randn    = undefined
+
+
diff --git a/src/Torch/Undefined/Tensor/Math/Reduce/Floating.hs b/src/Torch/Undefined/Tensor/Math/Reduce/Floating.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/Undefined/Tensor/Math/Reduce/Floating.hs
@@ -0,0 +1,29 @@
+module Torch.Undefined.Tensor.Math.Reduce.Floating where
+
+import Foreign
+import Foreign.C.Types
+import Torch.Sig.Types
+import Torch.Sig.Types.Global
+
+c_dist :: Ptr CState -> Ptr CTensor -> Ptr CTensor -> CReal -> IO CAccReal
+c_dist = undefined
+c_var :: Ptr CState -> Ptr CTensor -> Ptr CTensor -> CInt -> CInt -> CInt -> IO ()
+c_var = undefined
+c_varall :: Ptr CState -> Ptr CTensor -> CInt -> IO CAccReal
+c_varall = undefined
+c_std :: Ptr CState -> Ptr CTensor -> Ptr CTensor -> CInt -> CInt -> CInt -> IO ()
+c_std = undefined
+c_stdall :: Ptr CState -> Ptr CTensor -> CInt -> IO CAccReal
+c_stdall = undefined
+c_renorm :: Ptr CState -> Ptr CTensor -> Ptr CTensor -> CReal -> CInt -> CReal -> IO ()
+c_renorm = undefined
+c_norm :: Ptr CState -> Ptr CTensor -> Ptr CTensor -> CReal -> CInt -> CInt -> IO ()
+c_norm = undefined
+c_normall :: Ptr CState -> Ptr CTensor -> CReal -> IO CAccReal
+c_normall = undefined
+c_mean  :: Ptr CState -> Ptr CTensor -> Ptr CTensor -> CInt -> CInt -> IO ()
+c_mean  = undefined
+c_meanall :: Ptr CState -> Ptr CTensor -> IO CAccReal
+c_meanall = undefined
+
+
diff --git a/src/Torch/Undefined/Tensor/Random/TH.hs b/src/Torch/Undefined/Tensor/Random/TH.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/Undefined/Tensor/Random/TH.hs
@@ -0,0 +1,49 @@
+module Torch.Undefined.Tensor.Random.TH where
+
+import Foreign
+import Foreign.C.Types
+import Torch.Sig.Types
+import Torch.Sig.Types.Global
+import qualified Torch.Types.TH as TH
+
+c_random                :: Ptr CState -> Ptr CTensor -> Ptr CGenerator -> IO ()
+c_random                = undefined
+c_clampedRandom         :: Ptr CState -> Ptr CTensor -> Ptr CGenerator -> CLLong -> CLLong -> IO ()
+c_clampedRandom         = undefined
+c_cappedRandom          :: Ptr CState -> Ptr CTensor -> Ptr CGenerator -> CLLong -> IO ()
+c_cappedRandom          = undefined
+c_geometric             :: Ptr CState -> Ptr CTensor -> Ptr CGenerator -> CAccReal -> IO ()
+c_geometric             = undefined
+c_bernoulli             :: Ptr CState -> Ptr CTensor -> Ptr CGenerator -> CAccReal -> IO ()
+c_bernoulli             = undefined
+c_bernoulli_FloatTensor :: Ptr CState -> Ptr CTensor -> Ptr CGenerator -> Ptr TH.CFloatTensor -> IO ()
+c_bernoulli_FloatTensor = undefined
+c_bernoulli_DoubleTensor      :: Ptr CState -> Ptr CTensor -> Ptr CGenerator -> Ptr TH.CDoubleTensor -> IO ()
+c_bernoulli_DoubleTensor      = undefined
+
+c_uniform              :: Ptr CState -> Ptr CTensor -> Ptr CGenerator -> CAccReal -> CAccReal -> IO ()
+c_uniform              = undefined
+c_normal               :: Ptr CState -> Ptr CTensor -> Ptr CGenerator -> CAccReal -> CAccReal -> IO ()
+c_normal               = undefined
+c_normal_means         :: Ptr CState -> Ptr CTensor -> Ptr CGenerator -> Ptr CTensor -> CAccReal -> IO ()
+c_normal_means         = undefined
+c_normal_stddevs       :: Ptr CState -> Ptr CTensor -> Ptr CGenerator -> CAccReal -> Ptr CTensor -> IO ()
+c_normal_stddevs       = undefined
+c_normal_means_stddevs :: Ptr CState -> Ptr CTensor -> Ptr CGenerator -> Ptr CTensor -> Ptr CTensor -> IO ()
+c_normal_means_stddevs = undefined
+c_exponential          :: Ptr CState -> Ptr CTensor -> Ptr CGenerator -> CAccReal -> IO ()
+c_exponential          = undefined
+c_standard_gamma       :: Ptr CState -> Ptr CTensor -> Ptr CGenerator -> Ptr CTensor -> IO ()
+c_standard_gamma       = undefined
+c_cauchy               :: Ptr CState -> Ptr CTensor -> Ptr CGenerator -> CAccReal -> CAccReal -> IO ()
+c_cauchy               = undefined
+c_logNormal            :: Ptr CState -> Ptr CTensor -> Ptr CGenerator -> CAccReal -> CAccReal -> IO ()
+c_logNormal            = undefined
+
+c_multinomial           :: Ptr CState -> Ptr CLongTensor -> Ptr CGenerator -> Ptr CTensor -> CInt -> CInt -> IO ()
+c_multinomial           = undefined
+c_multinomialAliasSetup :: Ptr CState -> Ptr CTensor -> Ptr CLongTensor -> Ptr CTensor -> IO ()
+c_multinomialAliasSetup = undefined
+c_multinomialAliasDraw  :: Ptr CState -> Ptr CLongTensor -> Ptr CGenerator -> Ptr CLongTensor -> Ptr CTensor -> IO ()
+c_multinomialAliasDraw  = undefined
+
diff --git a/src/Torch/Undefined/Tensor/Random/THC.hs b/src/Torch/Undefined/Tensor/Random/THC.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/Undefined/Tensor/Random/THC.hs
@@ -0,0 +1,50 @@
+module Torch.Undefined.Tensor.Random.THC where
+
+import Foreign
+import Foreign.C.Types
+import Torch.Sig.Types
+import Torch.Sig.Types.Global
+import qualified Torch.Types.TH as TH (CLongStorage)
+
+c_random :: Ptr CState -> Ptr CTensor -> IO ()
+c_random = undefined
+c_clampedRandom :: Ptr CState -> Ptr CTensor -> CLLong -> CLLong -> IO ()
+c_clampedRandom = undefined
+c_cappedRandom :: Ptr CState -> Ptr CTensor -> CLLong -> IO ()
+c_cappedRandom = undefined
+c_bernoulli :: Ptr CState -> Ptr CTensor -> CAccReal -> IO ()
+c_bernoulli = undefined
+c_bernoulli_DoubleTensor :: Ptr CState -> Ptr CTensor -> Ptr CTensor -> IO ()
+c_bernoulli_DoubleTensor = undefined
+c_geometric :: Ptr CState -> Ptr CTensor -> CAccReal -> IO ()
+c_geometric = undefined
+
+c_uniform :: Ptr CState -> Ptr CTensor -> CAccReal -> CAccReal -> IO ()
+c_uniform = undefined
+c_normal :: Ptr CState -> Ptr CTensor -> CAccReal -> CAccReal -> IO ()
+c_normal = undefined
+c_normal_means :: Ptr CState -> Ptr CTensor -> Ptr CTensor -> CAccReal -> IO ()
+c_normal_means = undefined
+c_normal_stddevs :: Ptr CState -> Ptr CTensor -> CAccReal -> Ptr CTensor -> IO ()
+c_normal_stddevs = undefined
+c_normal_means_stddevs :: Ptr CState -> Ptr CTensor -> Ptr CTensor -> Ptr CTensor -> IO ()
+c_normal_means_stddevs = undefined
+c_logNormal :: Ptr CState -> Ptr CTensor -> CAccReal -> CAccReal -> IO ()
+c_logNormal = undefined
+c_exponential :: Ptr CState -> Ptr CTensor -> CAccReal -> IO ()
+c_exponential = undefined
+c_cauchy :: Ptr CState -> Ptr CTensor -> CAccReal -> CAccReal -> IO ()
+c_cauchy = undefined
+
+c_multinomial :: Ptr CState -> Ptr CIndexTensor -> Ptr CTensor -> CInt -> CInt -> IO ()
+c_multinomial = undefined
+c_multinomialAliasSetup :: Ptr CState -> Ptr CTensor -> Ptr CIndexTensor -> Ptr CTensor -> IO ()
+c_multinomialAliasSetup = undefined
+c_multinomialAliasDraw :: Ptr CState -> Ptr CIndexTensor -> Ptr CIndexTensor -> Ptr CTensor -> IO ()
+c_multinomialAliasDraw = undefined
+
+c_rand :: Ptr CState -> Ptr CTensor -> Ptr TH.CLongStorage -> IO ()
+c_rand = undefined
+c_randn :: Ptr CState -> Ptr CTensor -> Ptr TH.CLongStorage -> IO ()
+c_randn = undefined
+
diff --git a/src/Torch/Undefined/Types/NN.hs b/src/Torch/Undefined/Types/NN.hs
new file mode 100644
--- /dev/null
+++ b/src/Torch/Undefined/Types/NN.hs
@@ -0,0 +1,9 @@
+module Torch.Undefined.Types.NN where
+
+import Torch.Sig.Types.Global
+
+newtype CNNGenerator = CNNGenerator ()
+type CNNState = CState
+type CIndexTensor = CLongTensor
+
+type CDim = Int
