summary refs log tree commit diff
path: root/pkgs/applications/science/machine-learning/torch
diff options
context:
space:
mode:
authorSergey Mironov <grrwlf@gmail.com>2016-03-14 12:32:48 +0300
committerSergey Mironov <grrwlf@gmail.com>2016-03-14 16:05:55 +0300
commit7f3b08361044e41fa74c7b583d019f9f82c16def (patch)
tree157117c794b7f06834dbcd5eed2fcb406924a404 /pkgs/applications/science/machine-learning/torch
parent421989fb5a5a3eb19a569cb0502a40572b3b1686 (diff)
downloadnixlib-7f3b08361044e41fa74c7b583d019f9f82c16def.tar
nixlib-7f3b08361044e41fa74c7b583d019f9f82c16def.tar.gz
nixlib-7f3b08361044e41fa74c7b583d019f9f82c16def.tar.bz2
nixlib-7f3b08361044e41fa74c7b583d019f9f82c16def.tar.lz
nixlib-7f3b08361044e41fa74c7b583d019f9f82c16def.tar.xz
nixlib-7f3b08361044e41fa74c7b583d019f9f82c16def.tar.zst
nixlib-7f3b08361044e41fa74c7b583d019f9f82c16def.zip
torch: init at torch-git-2016-03-08
Torch is a machine-learning framework written in Lua
Diffstat (limited to 'pkgs/applications/science/machine-learning/torch')
-rw-r--r--pkgs/applications/science/machine-learning/torch/default.nix10
-rw-r--r--pkgs/applications/science/machine-learning/torch/torch-distro.nix355
2 files changed, 365 insertions, 0 deletions
diff --git a/pkgs/applications/science/machine-learning/torch/default.nix b/pkgs/applications/science/machine-learning/torch/default.nix
new file mode 100644
index 000000000000..0444e6645025
--- /dev/null
+++ b/pkgs/applications/science/machine-learning/torch/default.nix
@@ -0,0 +1,10 @@
+{ callPackage, fetchgit } :
+let
+  src = fetchgit {
+    url = "https://github.com/grwlf/torch-distro";
+    rev = "f972c4253b14b95b53aefe7b24efa496223e73f2";
+    sha256 = "1lhjhivhyypaic33vj1nsghshsajf7vi6gwsclaf3nqdl27d1h1s";
+  };
+
+in
+  callPackage (import ./torch-distro.nix) { inherit src; }
diff --git a/pkgs/applications/science/machine-learning/torch/torch-distro.nix b/pkgs/applications/science/machine-learning/torch/torch-distro.nix
new file mode 100644
index 000000000000..66e7b15a568c
--- /dev/null
+++ b/pkgs/applications/science/machine-learning/torch/torch-distro.nix
@@ -0,0 +1,355 @@
+{ luarocks, lib , stdenv,  writeText , readline,  makeWrapper,
+  less, ncurses, cmake, openblas, coreutils, fetchgit, libuuid, czmq, openssl,
+  gnuplot, fetchurl,
+
+  src ? ./.
+} :
+
+let
+
+  common_meta = {
+    homepage = http://torch.ch;
+    license = stdenv.lib.licenses.bsd3;
+    maintainers = with stdenv.lib.maintainers; [ smironov ];
+    platforms = stdenv.lib.platforms.gnu;
+  };
+
+  distro_src = src;
+
+  default_luarocks = luarocks;
+
+  pkgs_gnuplot = gnuplot;
+
+  luapkgs = rec {
+
+
+    luajit =
+      stdenv.mkDerivation rec {
+        name    = "luajit-${version}";
+        version = "2.1.0-beta1";
+        luaversion = "5.1";
+
+        src = fetchurl {
+          url    = "http://luajit.org/download/LuaJIT-${version}.tar.gz";
+          sha256 = "06170d38387c59d1292001a166e7f5524f5c5deafa8705a49a46fa42905668dd";
+        };
+
+        enableParallelBuilding = true;
+
+        patchPhase = ''
+          substituteInPlace Makefile \
+            --replace /usr/local $out
+
+          substituteInPlace src/Makefile --replace gcc cc
+        '' + stdenv.lib.optionalString (stdenv.cc.libc != null)
+        ''
+          substituteInPlace Makefile \
+            --replace ldconfig ${stdenv.cc.libc}/sbin/ldconfig
+        '';
+
+        configurePhase = false;
+        buildFlags     = [ "amalg" ]; # Build highly optimized version
+        installPhase   = ''
+          make install INSTALL_INC=$out/include PREFIX=$out
+          ln -s $out/bin/luajit* $out/bin/luajit
+        '';
+
+        meta = with stdenv.lib; {
+          description = "high-performance JIT compiler for Lua 5.1";
+          homepage    = http://luajit.org;
+          license     = licenses.mit;
+          platforms   = platforms.linux ++ platforms.darwin;
+          maintainers = [ maintainers.thoughtpolice ];
+        };
+      };
+
+    luarocks = default_luarocks.override {
+      lua = luajit;
+    };
+
+    buildLuaRocks = { rockspec ? "", luadeps ? [] , buildInputs ? []
+                    , preBuild ? "" , postInstall ? ""
+                    , runtimeDeps ? [] ,  ... }@args :
+      let
+
+        luadeps_ =
+          luadeps ++
+          (lib.concatMap (d : if d ? luadeps then d.luadeps else []) luadeps);
+
+        runtimeDeps_ =
+          runtimeDeps ++
+          (lib.concatMap (d : if d ? runtimeDeps then d.runtimeDeps else []) luadeps) ++
+          [ luajit coreutils ];
+
+        mkcfg = ''
+          export LUAROCKS_CONFIG=config.lua
+          cat >config.lua <<EOF
+            rocks_trees = {
+                 { name = [[system]], root = [[${luarocks}]] }
+               ${lib.concatImapStrings (i : dep :  ", { name = [[dep${toString i}]], root = [[${dep}]] }") luadeps_}
+            };
+
+            variables = {
+              LUA_BINDIR = "$out/bin";
+              LUA_INCDIR = "$out/include";
+              LUA_LIBDIR = "$out/lib/lua/${luajit.luaversion}";
+            };
+          EOF
+        '';
+
+      in
+      stdenv.mkDerivation (args // {
+
+        inherit preBuild postInstall;
+
+        inherit luadeps runtimeDeps;
+
+        phases = [ "unpackPhase" "patchPhase" "buildPhase"];
+
+        buildInputs = runtimeDeps ++ buildInputs ++ [ makeWrapper luajit ];
+
+        buildPhase = ''
+          eval "$preBuild"
+          ${mkcfg}
+          eval "`${luarocks}/bin/luarocks --deps-mode=all --tree=$out path`"
+          ${luarocks}/bin/luarocks make --deps-mode=all --tree=$out ${rockspec}
+
+          for p in $out/bin/*; do
+            wrapProgram $p \
+              --set LD_LIBRARY_PATH "${lib.makeSearchPath "lib" runtimeDeps_}" \
+              --set PATH "${lib.makeSearchPath "bin" runtimeDeps_}" \
+              --set LUA_PATH "'$LUA_PATH;$out/share/lua/${luajit.luaversion}/?.lua;$out/share/lua/${luajit.luaversion}/?/init.lua'" \
+              --set LUA_CPATH "'$LUA_CPATH;$out/lib/lua/${luajit.luaversion}/?.so;$out/lib/lua/${luajit.luaversion}/?/init.so'"
+          done
+
+          eval "$postInstall"
+        '';
+      });
+
+    # FIXME: doesn't installs lua-files for some reason
+    # lua-cjson = buildLuaPackage {
+    #   name = "lua-cjson";
+    #   src = ./extra/lua-cjson;
+    #   rockspec = "lua-cjson-2.1devel-1.rockspec";
+    # };
+
+    lua-cjson = stdenv.mkDerivation rec {
+      name = "lua-cjson";
+      src = "${distro_src}/extra/lua-cjson";
+
+      preConfigure = ''
+        makeFlags="PREFIX=$out LUA_LIBRARY=$out/lib/lua"
+      '';
+
+      buildInputs = [luajit];
+
+      installPhase = ''
+        make install-extra $makeFlags
+      '';
+    };
+
+    luafilesystem = buildLuaRocks {
+      name = "filesystem";
+      src = "${distro_src}/extra/luafilesystem";
+      luadeps = [lua-cjson];
+      rockspec = "rockspecs/luafilesystem-1.6.3-1.rockspec";
+    };
+
+    penlight = buildLuaRocks {
+      name = "penlight";
+      src = "${distro_src}/extra/penlight";
+      luadeps = [luafilesystem];
+    };
+
+    luaffifb = buildLuaRocks {
+      name = "luaffifb";
+      src = "${distro_src}/extra/luaffifb";
+    };
+
+    sundown = buildLuaRocks rec {
+      name = "sundown";
+      src = "${distro_src}/pkg/sundown";
+      rockspec = "rocks/${name}-scm-1.rockspec";
+    };
+
+    cwrap = buildLuaRocks rec {
+      name = "cwrap";
+      src = "${distro_src}/pkg/cwrap";
+      rockspec = "rocks/${name}-scm-1.rockspec";
+    };
+
+    paths = buildLuaRocks rec {
+      name = "paths";
+      src = "${distro_src}/pkg/paths";
+      buildInputs = [cmake];
+      rockspec = "rocks/${name}-scm-1.rockspec";
+    };
+
+    torch = buildLuaRocks rec {
+      name = "torch";
+      src = "${distro_src}/pkg/torch";
+      luadeps = [ paths cwrap ];
+      buildInputs = [ cmake ];
+      rockspec = "rocks/torch-scm-1.rockspec";
+      preBuild = ''
+        substituteInPlace ${rockspec} \
+          --replace '"sys >= 1.0"' ' '
+        export LUA_PATH="$src/?.lua;$LUA_PATH"
+      '';
+      meta = common_meta // {
+        description = "Torch is a machine-learning library";
+        longDescription = ''
+          Torch is the main package in [Torch7](http://torch.ch) where data
+          structures for multi-dimensional tensors and mathematical operations
+          over these are defined. Additionally, it provides many utilities for
+          accessing files, serializing objects of arbitrary types and other
+          useful utilities.
+        '';
+      };
+    };
+
+    dok = buildLuaRocks rec {
+      name = "dok";
+      src = "${distro_src}/pkg/dok";
+      luadeps = [sundown];
+      rockspec = "rocks/${name}-scm-1.rockspec";
+    };
+
+    sys = buildLuaRocks rec {
+      name = "sys";
+      luadeps = [torch];
+      buildInputs = [readline cmake];
+      src = "${distro_src}/pkg/sys";
+      rockspec = "sys-1.1-0.rockspec";
+      preBuild = ''
+        export Torch_DIR=${torch}/share/cmake/torch
+      '';
+    };
+
+    xlua = buildLuaRocks rec {
+      name = "xlua";
+      luadeps = [torch sys];
+      src = "${distro_src}/pkg/xlua";
+      rockspec = "xlua-1.0-0.rockspec";
+    };
+
+    nn = buildLuaRocks rec {
+      name = "nn";
+      luadeps = [torch luaffifb];
+      buildInputs = [cmake];
+      src = "${distro_src}/extra/nn";
+      rockspec = "rocks/nn-scm-1.rockspec";
+      preBuild = ''
+        export Torch_DIR=${torch}/share/cmake/torch
+      '';
+    };
+
+    graph = buildLuaRocks rec {
+      name = "graph";
+      luadeps = [ torch ];
+      buildInputs = [cmake];
+      src = "${distro_src}/extra/graph";
+      rockspec = "rocks/graph-scm-1.rockspec";
+      preBuild = ''
+        export Torch_DIR=${torch}/share/cmake/torch
+      '';
+    };
+
+    nngraph = buildLuaRocks rec {
+      name = "nngraph";
+      luadeps = [ torch nn graph ];
+      buildInputs = [cmake];
+      src = "${distro_src}/extra/nngraph";
+      preBuild = ''
+        export Torch_DIR=${torch}/share/cmake/torch
+      '';
+    };
+
+    image = buildLuaRocks rec {
+      name = "image";
+      luadeps = [ torch dok sys xlua ];
+      buildInputs = [cmake];
+      src = "${distro_src}/pkg/image";
+      rockspec = "image-1.1.alpha-0.rockspec";
+      preBuild = ''
+        export Torch_DIR=${torch}/share/cmake/torch
+      '';
+    };
+
+    optim = buildLuaRocks rec {
+      name = "optim";
+      luadeps = [ torch ];
+      buildInputs = [cmake];
+      src = "${distro_src}/pkg/optim";
+      rockspec = "optim-1.0.5-0.rockspec";
+      preBuild = ''
+        export Torch_DIR=${torch}/share/cmake/torch
+      '';
+    };
+
+    gnuplot = buildLuaRocks rec {
+      name = "gnuplot";
+      luadeps = [ torch paths ];
+      runtimeDeps = [ pkgs_gnuplot less ];
+      src = "${distro_src}/pkg/gnuplot";
+      rockspec = "rocks/gnuplot-scm-1.rockspec";
+    };
+
+    trepl = buildLuaRocks rec {
+      name = "trepl";
+      luadeps = [torch gnuplot paths penlight graph nn nngraph image gnuplot optim sys dok];
+      runtimeDeps = [ ncurses readline ];
+      src = "${distro_src}/exe/trepl";
+      meta = common_meta // {
+        description = "A pure Lua REPL for LuaJIT, with heavy support for Torch types.";
+      };
+    };
+
+    lbase64 = buildLuaRocks rec {
+      name = "lbase64";
+      src = fetchgit {
+        url = "https://github.com/LuaDist2/lbase64";
+        rev = "1e9e4f1e0bf589a0ed39f58acc185ec5e213d207";
+        sha256 = "1i1fpy9v6r4w3lrmz7bmf5ppq65925rv90gx39b3pykfmn0hcb9c";
+      };
+    };
+
+    luuid = stdenv.mkDerivation rec {
+      name = "luuid";
+      src = fetchgit {
+        url = "https://github.com/LuaDist/luuid";
+        sha256 = "062gdf1rild11jg46vry93hcbb36b4527pf1dy7q9fv89f7m2nav";
+      };
+
+      preConfigure = ''
+        cmakeFlags="-DLUA_LIBRARY=${luajit}/lib/lua/${luajit.luaversion} -DINSTALL_CMOD=$out/lib/lua/${luajit.luaversion} -DINSTALL_MOD=$out/lib/lua/${luajit.luaversion}"
+      '';
+
+      buildInputs = [cmake libuuid luajit];
+      meta = {
+        # FIXME: set the exact revision for src
+        broken = true;
+      };
+    };
+
+    # Doesn't work due to missing deps (according to luarocs).
+    itorch = buildLuaRocks rec {
+      name = "itorch";
+      luadeps = [torch gnuplot paths penlight graph nn nngraph image gnuplot
+                  optim sys dok lbase64 lua-cjson luuid];
+      buildInputs = [czmq openssl];
+      src = "${distro_src}/extra/iTorch";
+      meta = {
+        # FIXME: figure out whats wrong with deps
+        broken = true;
+      };
+    };
+
+
+  };
+
+in
+
+luapkgs
+
+