diff --git a/gnu/packages/machine-learning.scm b/gnu/packages/machine-learning.scm index 9b0982be04e..ff99c5cbc16 100644 --- a/gnu/packages/machine-learning.scm +++ b/gnu/packages/machine-learning.scm @@ -3169,568 +3169,6 @@ based on the Kaldi toolkit and the GStreamer framework and implemented in Python.") (license license:bsd-2)))) -;; Note that Tensorflow includes a "third_party" directory, which seems to not -;; only contain modified subsets of upstream library source code, but also -;; adapter headers provided by Google (such as the fft.h header, which is not -;; part of the upstream project code). The Tensorflow code includes headers -;; from the "third_party" directory. It does not look like we can replace -;; these headers with unmodified upstream files, so we keep them. -(define-public tensorflow - (package - (name "tensorflow") - (version "1.9.0") - (source - (origin - (method git-fetch) - (uri (git-reference - (url "https://github.com/tensorflow/tensorflow") - (commit (string-append "v" version)))) - (file-name (string-append "tensorflow-" version "-checkout")) - (sha256 - (base32 - "0a9kwha395g3wgxfwln5j8vn9nkspmd75xldrlqdq540w996g8xa")) - (patches - (search-patches "tensorflow-c-api-fix.patch")))) - (build-system cmake-build-system) - (arguments - `(#:tests? #f ; no "check" target - #:build-type "Release" - #:configure-flags - (let ((protobuf (assoc-ref %build-inputs "protobuf")) - (protobuf:native (assoc-ref %build-inputs "protobuf:native")) - (jsoncpp (assoc-ref %build-inputs "jsoncpp")) - (snappy (assoc-ref %build-inputs "snappy")) - (sqlite (assoc-ref %build-inputs "sqlite"))) - (list - ;; Use protobuf from Guix - (string-append "-Dprotobuf_STATIC_LIBRARIES=" - protobuf "/lib/libprotobuf.so") - (string-append "-DPROTOBUF_PROTOC_EXECUTABLE=" - protobuf:native "/bin/protoc") - - ;; Use snappy from Guix - (string-append "-Dsnappy_STATIC_LIBRARIES=" - snappy "/lib/libsnappy.so") - ;; Yes, this is not actually the include directory but a prefix... - (string-append "-Dsnappy_INCLUDE_DIR=" snappy) - - ;; Use jsoncpp from Guix - (string-append "-Djsoncpp_STATIC_LIBRARIES=" - jsoncpp "/lib/libjsoncpp.so") - ;; Yes, this is not actually the include directory but a prefix... - (string-append "-Djsoncpp_INCLUDE_DIR=" jsoncpp) - - ;; Use sqlite from Guix - (string-append "-Dsqlite_STATIC_LIBRARIES=" - sqlite "/lib/libsqlite.a") - - ;; Use system libraries wherever possible. Currently, this - ;; only affects zlib. - "-Dsystemlib_ALL=ON" - "-Dtensorflow_ENABLE_POSITION_INDEPENDENT_CODE=ON" - "-Dtensorflow_BUILD_SHARED_LIB=ON" - "-Dtensorflow_OPTIMIZE_FOR_NATIVE_ARCH=OFF" - "-Dtensorflow_ENABLE_SSL_SUPPORT=OFF" - "-Dtensorflow_BUILD_CONTRIB_KERNELS=OFF")) - #:make-flags - (list "CC=gcc") - #:modules ((ice-9 ftw) - (guix build utils) - (guix build cmake-build-system) - ((guix build python-build-system) - #:select (python-version))) - #:imported-modules (,@%cmake-build-system-modules - (guix build python-build-system)) - #:phases - (modify-phases %standard-phases - (add-after 'unpack 'set-source-file-times-to-1980 - ;; At the end of the tf_python_build_pip_package target, a ZIP - ;; archive should be generated via bdist_wheel, but it fails with - ;; "ZIP does not support timestamps before 1980". Luckily, - ;; SOURCE_DATE_EPOCH is respected, which we set to some time in - ;; 1980. - (lambda _ (setenv "SOURCE_DATE_EPOCH" "315532800"))) - (add-after 'unpack 'python3.11-compatibility - (lambda _ - ;; Py_TYPE was changed to an inline static function in Python - ;; 3.11, so it cannot be used on the left-hand side. - (substitute* "tensorflow/python/lib/core/bfloat16.cc" - (("Py_TYPE\\(&NPyBfloat16_Descr\\) = &PyArrayDescr_Type;") - "Py_SET_TYPE(&NPyBfloat16_Descr, &PyArrayDescr_Type);")) - - ;; See https://github.com/tensorflow/tensorflow/issues/20517#issuecomment-406373913 - (substitute* '("tensorflow/python/eager/pywrap_tfe_src.cc" - "tensorflow/python/lib/core/ndarray_tensor.cc" - "tensorflow/python/lib/core/py_func.cc") - (("PyUnicode_AsUTF8") "(char *)PyUnicode_AsUTF8")) - (substitute* "tensorflow/c/eager/c_api.h" - (("unsigned char async") - "unsigned char is_async")) - - ;; Remove dependency on tensorboard, a complicated but probably - ;; optional package. - (substitute* "tensorflow/tools/pip_package/setup.py" - ((".*'tensorboard >.*") "")) - - ;; Fix the build with python-3.8, taken from rejected upstream patch: - ;; https://github.com/tensorflow/tensorflow/issues/34197 - (substitute* (find-files "tensorflow/python" ".*\\.cc$") - (("(nullptr,)(\\ +/. tp_print)" _ _ tp_print) - (string-append "NULL, " tp_print))) - - ;; Many collections classes have been moved to collections.abc - (substitute* '("tensorflow/python/framework/ops.py" - "tensorflow/python/ops/clip_ops.py" - "tensorflow/python/ops/data_flow_ops.py" - "tensorflow/python/ops/gradients_impl.py" - "tensorflow/python/training/input.py" - "tensorflow/python/training/checkpointable/data_structures.py" - "tensorflow/python/util/nest.py" - "tensorflow/python/util/protobuf/compare.py") - (("collections.Mapping") "collections.abc.Mapping") - (("collections.Sequence") "collections.abc.Sequence")) - (substitute* "tensorflow/python/feature_column/feature_column.py" - (("collections.Iterator") "collections.abc.Iterator")) - (substitute* "tensorflow/python/ops/sparse_ops.py" - (("collections.Iterable") "collections.abc.Iterable")) - (substitute* "tensorflow/python/keras/callbacks.py" - (("from collections import Iterable") - "from collections.abc import Iterable")) - (substitute* "tensorflow/python/ops/variable_scope.py" - (("collections_lib.Sequence") "collections_lib.abc.Sequence")) - - ;; XXX: it is not clear if this is a good idea, but the build - ;; system tries to overwrite the __or__ and __ror__ methods of - ;; the Tensor class. - (substitute* "tensorflow/python/framework/ops.py" - (("if not isinstance\\(existing, type\\(object.__lt__\\)\\)" m) - (string-append m - " and not isinstance(existing, type(object.__or__))"))) - - ;; ArgSpec has been replaced with FullArgSpec. - (substitute* "tensorflow/python/util/tf_inspect.py" - (("ArgSpec = _inspect.ArgSpec") "\ -ArgSpec = namedtuple('ArgSpec', [ 'args', 'varargs', 'keywords', 'defaults' ]) -def makeargspec(s): - return ArgSpec(args=s.args, varargs=s.varargs, keywords=s.varkw, defaults=s.defaults) -") - (("_inspect.getargspec\\((.*)\\)" m target) - (string-append "makeargspec(_inspect.getfullargspec(" target "))"))) - - ;; Fix the build with numpy >= 1.19. - ;; Suggested in https://github.com/tensorflow/tensorflow/issues/41086#issuecomment-656833081 - (substitute* "tensorflow/python/lib/core/bfloat16.cc" - (("void BinaryUFunc\\(char\\*\\* args, npy_intp\\* dimensions, npy_intp\\* steps,") - "void BinaryUFunc(char** args, npy_intp const* dimensions, npy_intp const* steps,") - (("void CompareUFunc\\(char\\*\\* args, npy_intp\\* dimensions, npy_intp\\* steps,") - "void CompareUFunc(char** args, npy_intp const* dimensions, npy_intp const* steps,")) - - ;; ...and for numpy >= 1.23 - (substitute* "tensorflow/python/framework/tensor_util.py" - (("np.asscalar\\(x\\[0\\]\\)") "x[0].item()") - (("np.asscalar\\(x\\)") "x.item()") - (("np.asscalar\\(v\\)") "np.ndarray.item(v)") - (("return np.asscalar") "return np.ndarray.item")) - (substitute* "tensorflow/python/kernel_tests/cwise_ops_test.py" - (("np.asscalar\\(np.random.rand\\(1\\) \\* 100.\\)") - "(np.random.rand(1) * 100.).item()")) - (substitute* '("tensorflow/python/framework/fast_tensor_util.pyx" - "tensorflow/python/estimator/canned/linear_testing_utils.py") - (("np.asscalar") "np.ndarray.item")))) - (add-after 'python3.11-compatibility 'numpy-compatibility - (lambda _ - (substitute* (cons* "tensorflow/compiler/xla/python/xla_client.py" - "tensorflow/contrib/layers/python/ops/sparse_ops_test.py" - (find-files "tensorflow/python/" "\\.py$")) - (("np.object") "object")) - (substitute* (append - '("tensorflow/compiler/tests/unary_ops_test.py" - "tensorflow/compiler/xla/python/xla_client.py" - "tensorflow/compiler/xla/python/xla_client_test.py") - (find-files "tensorflow/python/" "\\.py$") - (find-files "tensorflow/contrib/" "\\.py$")) - (("np.bool,") "bool,") - (("np.bool\\)") "bool)") - (("np.bool:") "bool:")))) - (add-after 'numpy-compatibility 'chdir - (lambda _ (chdir "tensorflow/contrib/cmake"))) - (add-after 'chdir 'disable-downloads - (lambda* (#:key inputs #:allow-other-keys) - (substitute* (find-files "external" "\\.cmake$") - (("GIT_REPOSITORY.*") "") - (("GIT_TAG.*") "") - (("PREFIX ") - "DOWNLOAD_COMMAND \"\"\nPREFIX ")) - - ;; Use packages from Guix - (let ((grpc (assoc-ref inputs "grpc"))) - (substitute* "CMakeLists.txt" - ;; Sqlite - (("include\\(sqlite\\)") "") - (("\\$\\{sqlite_STATIC_LIBRARIES\\}") - (search-input-file inputs "/lib/libsqlite3.so")) - (("sqlite_copy_headers_to_destination") "") - - ;; PNG - (("include\\(png\\)") "") - (("\\$\\{png_STATIC_LIBRARIES\\}") - (search-input-file inputs "/lib/libpng16.so")) - (("png_copy_headers_to_destination") "") - - ;; JPEG - (("include\\(jpeg\\)") "") - (("\\$\\{jpeg_STATIC_LIBRARIES\\}") - (search-input-file inputs "/lib/libjpeg.so")) - (("jpeg_copy_headers_to_destination") "") - - ;; GIF - (("include\\(gif\\)") "") - (("\\$\\{gif_STATIC_LIBRARIES\\}") - (search-input-file inputs "/lib/libgif.so")) - (("gif_copy_headers_to_destination") "") - - ;; lmdb - (("include\\(lmdb\\)") "") - (("\\$\\{lmdb_STATIC_LIBRARIES\\}") - (search-input-file inputs "/lib/liblmdb.so")) - (("lmdb_copy_headers_to_destination") "") - - ;; Protobuf - (("include\\(protobuf\\)") "") - (("protobuf_copy_headers_to_destination") "") - (("^ +protobuf") "") - - ;; gRPC - (("include\\(grpc\\)") - "find_package(grpc REQUIRED NAMES gRPC)") - (("list\\(APPEND tensorflow_EXTERNAL_DEPENDENCIES grpc\\)") "") - - ;; Eigen - (("include\\(eigen\\)") - (string-append "find_package(eigen REQUIRED NAMES Eigen3) -set(eigen_INCLUDE_DIRS ${CMAKE_CURRENT_BINARY_DIR}/external/eigen_archive " - (assoc-ref inputs "eigen") "/include/eigen3)")) - (("^ +eigen") "") - - ;; snappy - (("include\\(snappy\\)") - "add_definitions(-DTF_USE_SNAPPY)") - (("list\\(APPEND tensorflow_EXTERNAL_DEPENDENCIES snappy\\)") "") - - ;; jsoncpp - (("include\\(jsoncpp\\)") "") - (("^ +jsoncpp") "")) - - (substitute* "tf_core_framework.cmake" - ((" grpc") "") - (("\\$\\{GRPC_BUILD\\}/grpc_cpp_plugin") - (which "grpc_cpp_plugin")) - ;; Link with gRPC libraries - (("add_library\\(tf_protos_cc.*" m) - (string-append m - (format #f "\ntarget_link_libraries(tf_protos_cc PRIVATE \ -~a/lib/libgrpc++_unsecure.a \ -~a/lib/libgrpc_unsecure.a \ -~a/lib/libaddress_sorting.a \ -~a/lib/libgpr.a \ -~a//lib/libcares.so -)\n" - grpc grpc grpc grpc - (assoc-ref inputs "c-ares")))))) - (substitute* "tf_tools.cmake" - (("add_dependencies\\(\\$\\{proto_text.*") "")) - ;; Remove dependency on bundled grpc - (substitute* "tf_core_distributed_runtime.cmake" - (("tf_core_cpu grpc") "tf_core_cpu")) - - ;; This directory is a dependency of many targets. - (mkdir-p "protobuf"))) - (add-after 'configure 'unpack-third-party-sources - (lambda* (#:key inputs outputs #:allow-other-keys) - ;; This is needed to configure bundled packages properly. - (setenv "CONFIG_SHELL" (which "bash")) - (for-each - (lambda (name) - (let* ((what (assoc-ref inputs (string-append name "-src"))) - (name* (string-map (lambda (c) - (if (char=? c #\-) - #\_ c)) name)) - (where (string-append "../build/" name* "/src/" name*))) - (cond - ((string-suffix? ".zip" what) - (mkdir-p where) - (with-directory-excursion where - (invoke "unzip" what))) - ((string-suffix? ".tar.gz" what) - (mkdir-p where) - (invoke "tar" "xf" what - "-C" where "--strip-components=1")) - (else - (let ((parent (dirname where))) - (mkdir-p parent) - (with-directory-excursion parent - (when (file-exists? name*) - (delete-file-recursively name*)) - (copy-recursively what name*) - (map make-file-writable - (find-files name* ".*")))))))) - (list "boringssl" - "cub" - "double-conversion" - "farmhash" - "fft2d" - "highwayhash" - "nsync" - "re2")) - - ;; https://github.com/google/farmhash/issues/24 - (substitute* "../build/farmhash/src/farmhash/src/farmhash.cc" - (("using namespace std;") "") - (("make_pair") "std::make_pair") - (("pair<") "std::pair<")) - - (rename-file "../build/cub/src/cub/cub-1.8.0/" - "../build/cub/src/cub/cub/") - - (setenv "LDFLAGS" - (string-append "-Wl,-rpath=" - (assoc-ref outputs "out") "/lib")))) - (add-after 'unpack 'fix-python-build - (lambda* (#:key inputs outputs #:allow-other-keys) - (mkdir-p "protobuf-src") - (invoke "tar" "xf" (assoc-ref inputs "protobuf:src") - "-C" "protobuf-src" "--strip-components=1") - (mkdir-p "eigen-src") - (copy-recursively (assoc-ref inputs "eigen:src") "eigen-src") - - ;; distutils.sysconfig is deprecated and prints a deprecation - ;; warning that breaks the generated CXX_INCLUDES line. - (substitute* "tensorflow/contrib/cmake/tf_python.cmake" - (("import distutils.sysconfig; print\\(distutils.sysconfig.get_python_inc\\(\\)\\)") - "import sysconfig; print(sysconfig.get_path('include'))")) - - (substitute* "tensorflow/contrib/cmake/tf_python.cmake" - ;; Take protobuf source files from our source package. - (("\\$\\{CMAKE_CURRENT_BINARY_DIR\\}/protobuf/src/protobuf/src/google") - (string-append (getcwd) "/protobuf-src/src/google"))) - - (substitute* '("tensorflow/contrib/cmake/tf_shared_lib.cmake" - "tensorflow/contrib/cmake/tf_python.cmake") - ;; Take Eigen source files from our source package. - (("\\$\\{CMAKE_CURRENT_BINARY_DIR\\}/eigen/src/eigen/") - (string-append (getcwd) "/eigen-src/")) - ;; Take Eigen headers from our own package. - (("\\$\\{CMAKE_CURRENT_BINARY_DIR\\}/external/eigen_archive") - (search-input-directory inputs "/include/eigen3"))) - - ;; Correct the RUNPATH of ops libraries generated for Python. - ;; TODO: this doesn't work :( - ;; /gnu/store/...-tensorflow-1.9.0/lib/python3.7/site-packages/tensorflow/contrib/seq2seq/python/ops/lib_beam_search_ops.so: - ;; warning: RUNPATH contains bogus entries: ("/tmp/guix-build-tensorflow-1.9.0.drv-0/source/tensorflow/contrib/build") - ;; /gnu/store/...-tensorflow-1.9.0/lib/python3.7/site-packages/tensorflow/contrib/seq2seq/python/ops/lib_beam_search_ops.so: - ;; error: depends on 'libpywrap_tensorflow_internal.so', which - ;; cannot be found in RUNPATH ... - (substitute* "tensorflow/contrib/cmake/tf_cc_ops.cmake" - (("set_target_properties.*") - (string-append "set_target_properties(${_AT_TARGET} PROPERTIES \ -COMPILE_FLAGS ${target_compile_flags} \ -INSTALL_RPATH_USE_LINK_PATH TRUE \ -INSTALL_RPATH " (assoc-ref outputs "out") "/lib)\n"))))) - (add-after 'unpack 'patch-cmake-file-to-install-c-headers - (lambda _ - (substitute* "tensorflow/contrib/cmake/tf_c.cmake" - (("if\\(tensorflow_BUILD_PYTHON_BINDINGS" m) - (string-append - "install(DIRECTORY ${tensorflow_source_dir}/tensorflow/c/ \ -DESTINATION include/tensorflow/c FILES_MATCHING PATTERN \"*.h\")\n" m))))) - (add-after 'build 'build-c-bindings - (lambda* (#:key outputs parallel-build? #:allow-other-keys) - (invoke "make" "-j" (if parallel-build? - (number->string (parallel-job-count)) - "1") - "tf_c"))) - (add-after 'install 'build-pip-package - (lambda* (#:key outputs parallel-build? #:allow-other-keys) - (invoke "make" "-j" (if parallel-build? - (number->string (parallel-job-count)) - "1") - "tf_python_build_pip_package"))) - (add-after 'build-pip-package 'install-python - (lambda* (#:key inputs outputs #:allow-other-keys) - (let ((out (assoc-ref outputs "out")) - (wheel (car (find-files "../build/tf_python/dist/" "\\.whl$"))) - (python-version (python-version - (assoc-ref inputs "python")))) - (invoke "python" "-m" "pip" "install" wheel - (string-append "--prefix=" out)) - - ;; XXX: broken RUNPATH, see fix-python-build phase. - (delete-file - (string-append - out "/lib/python" python-version - "/site-packages/tensorflow/contrib/" - "seq2seq/python/ops/lib_beam_search_ops.so")))))))) - (native-inputs - `(("pkg-config" ,pkg-config) - ("protobuf:native" ,protobuf-3.6) ; protoc - ("protobuf:src" ,(package-source protobuf-3.6)) - ("eigen:src" ,(package-source eigen-for-tensorflow)) - ;; install_pip_packages.sh wants setuptools 39.1.0 specifically. - ("python-setuptools" ,python-setuptools-for-tensorflow) - - ;; The commit hashes and URLs for third-party source code are taken - ;; from "tensorflow/workspace.bzl". - ("boringssl-src" - ,(let ((commit "ee7aa02") - (revision "1")) - (origin - (method git-fetch) - (uri (git-reference - (url "https://boringssl.googlesource.com/boringssl") - (commit commit))) - (file-name (string-append "boringssl-0-" revision - (string-take commit 7) - "-checkout")) - (sha256 - (base32 - "1jf693q0nw0adsic6cgmbdx6g7wr4rj4vxa8j1hpn792fqhd8wgw"))))) - ("cub-src" - ,(let ((version "1.8.0")) - (origin - (method url-fetch) - (uri (string-append "https://mirror.bazel.build/github.com/NVlabs/" - "cub/archive/" version ".zip")) - (file-name (string-append "cub-" version ".zip")) - (sha256 - (base32 - "1hsqikqridb90dkxkjr2918dcry6pfh46ccnwrzawl56aamhdykb"))))) - ("double-conversion-src" - ,(let ((commit "5664746") - (revision "1")) - (origin - (method git-fetch) - (uri (git-reference - (url "https://github.com/google/double-conversion") - (commit commit))) - (file-name - (git-file-name "double-conversion" - (string-append "0-" revision "." - (string-take commit 7)))) - (sha256 - (base32 - "1h5lppqqxcvdg5jq42i5msgwx20ryij3apvmndflngrgdpc04gn1"))))) - ("farmhash-src" - ,(let ((commit "816a4ae622e964763ca0862d9dbd19324a1eaf45")) - (origin - (method url-fetch) - (uri (string-append - "https://mirror.bazel.build/github.com/google/farmhash/archive/" - commit ".tar.gz")) - (file-name (string-append "farmhash-0-" (string-take commit 7) - ".tar.gz")) - (sha256 - (base32 - "185b2xdxl4d4cnsnv6abg8s22gxvx8673jq2yaq85bz4cdy58q35"))))) - ;; The license notice on the home page at - ;; http://www.kurims.kyoto-u.ac.jp/~ooura/fft.html says: - ;; Copyright Takuya OOURA, 1996-2001 - ;; - ;; You may use, copy, modify and distribute this code for any purpose - ;; (include commercial use) and without fee. Please refer to this - ;; package when you modify this code. - ;; - ;; We take the identical tarball from the Bazel mirror, because the URL - ;; at the home page is not versioned and might change. - ("fft2d-src" - ,(origin - (method url-fetch) - (uri "https://mirror.bazel.build/www.kurims.kyoto-u.ac.jp/~ooura/fft.tgz") - (file-name "fft2d.tar.gz") - (sha256 - (base32 - "15jjkfvhqvl2c0753d2di8hz0pyzn598g74wqy79awdrf1y67fsj")))) - ("highwayhash-src" - ,(let ((commit "be5edafc2e1a455768e260ccd68ae7317b6690ee") - (revision "1")) - (origin - (method git-fetch) - (uri (git-reference - (url "https://github.com/google/highwayhash") - (commit commit))) - (file-name (string-append "highwayhash-0-" revision - (string-take commit 7) - "-checkout")) - (sha256 - (base32 - "154jwf98cyy54hldr94pgjn85zynly3abpnc1avmb8a18lzwjyb6"))))) - ("nsync-src" - ,(let ((version "0559ce013feac8db639ee1bf776aca0325d28777") - (revision "1")) - (origin - (method url-fetch) - (uri (string-append "https://mirror.bazel.build/" - "github.com/google/nsync/archive/" - version ".tar.gz")) - (file-name (string-append "nsync-0." revision - "-" (string-take version 7) - ".tar.gz")) - (sha256 - (base32 - "0qdkyqym34x739mmzv97ah5r7ph462v5xkxqxvidmcfqbi64b132"))))) - ("re2-src" - ,(let ((commit "e7efc48") - (revision "1")) - (origin - (method git-fetch) - (uri (git-reference - (url "https://github.com/google/re2") - (commit commit))) - (file-name (string-append "re2-0-" revision - (string-take commit 7) - "-checkout")) - (sha256 - (base32 - "161g9841rjfsy5pn52fcis0s9hdr7rxvb06pad38j5rppfihvign"))))) - ("googletest" ,googletest) - ("swig" ,swig) - ("unzip" ,unzip))) - (propagated-inputs - (list python-absl-py - python-astor - python-gast - python-grpcio - python-numpy - python-protobuf-3.6 - python-six - python-termcolor - python-wheel)) - (inputs - `(("c-ares" ,c-ares) - ("eigen" ,eigen-for-tensorflow) - ("gemmlowp" ,gemmlowp-for-tensorflow) - ("lmdb" ,lmdb) - ("libjpeg" ,libjpeg-turbo) - ("libpng" ,libpng) - ("giflib" ,giflib) - ("grpc" ,grpc-1.16.1 "static") - ("grpc:bin" ,grpc-1.16.1) - ("jsoncpp" ,jsoncpp-for-tensorflow) - ("snappy" ,snappy) - ("sqlite" ,sqlite) - ("protobuf" ,protobuf-3.6) - ("python" ,python-wrapper) - ("zlib" ,zlib))) - (home-page "https://tensorflow.org") - (synopsis "Machine learning framework") - (description - "TensorFlow is a flexible platform for building and training machine -learning models. It provides a library for high performance numerical -computation and includes high level Python APIs, including both a sequential -API for beginners that allows users to build models quickly by plugging -together building blocks and a subclassing API with an imperative style for -advanced research.") - (license license:asl2.0))) - (define-public tensorflow-lite (package (name "tensorflow-lite")