summaryrefslogtreecommitdiff
path: root/var/spack/repos/builtin/packages/py-keras/package.py
blob: 2ea8697ce5fd246b18654645eec7f8c8d72588aa (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
# Copyright 2013-2022 Lawrence Livermore National Security, LLC and other
# Spack Project Developers. See the top-level COPYRIGHT file for details.
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)

import tempfile

from spack.package import *


class PyKeras(PythonPackage):
    """Deep Learning library for Python. Convnets, recurrent neural networks,
    and more. Runs on Theano or TensorFlow."""

    homepage = "https://keras.io"
    git = "https://github.com/keras-team/keras"
    url = "https://github.com/keras-team/keras/archive/refs/tags/v2.7.0.tar.gz"

    version("2.7.0", sha256="7502746467ab15184e2e267f13fbb2c3f33ba24f8e02a097d229ba376dabaa04")
    version("2.6.0", sha256="15586a3f3e1ed9182e6e0d4c0dbd052dfb7250e779ceb7e24f8839db5c63fcae")
    version("2.5.0", commit="9c266106163390f173625c4e7b1ccb03ae145ffc")
    version("2.4.3", sha256="fedd729b52572fb108a98e3d97e1bac10a81d3917d2103cc20ab2a5f03beb973")
    version("2.2.4", sha256="90b610a3dbbf6d257b20a079eba3fdf2eed2158f64066a7c6f7227023fd60bc9")
    version("2.2.3", sha256="694aee60a6f8e0d3d6d3e4967e063b4623e3ca90032f023fd6d16bb5f81d18de")
    version("2.2.2", sha256="468d98da104ec5c3dbb10c2ef6bb345ab154f6ca2d722d4c250ef4d6105de17a")
    version("2.2.1", sha256="0d3cb14260a3fa2f4a5c4c9efa72226ffac3b4c50135ba6edaf2b3d1d23b11ee")
    version("2.2.0", sha256="5b8499d157af217f1a5ee33589e774127ebc3e266c833c22cb5afbb0ed1734bf")
    version("2.1.6", sha256="c14af1081242c25617ade7eb62121d58d01f16e1e744bae9fc4f1f95a417716e")
    version("2.1.5", sha256="907ad29add1fff27342a9f4fe3e60003d450d3af41a38f22f629c7736fc8399d")
    version("2.1.4", sha256="7ee1fcc79072ac904a4f008d715bcb78c60250ae3cd41d99e268c60ade8d0d3a")
    version("2.1.3", sha256="7ca3a381523bad40a6922e88951a316664cb088fd01cea07e5ec8ada3327e3c7")
    version("2.1.2", sha256="3ee56fc129d9d00b1916046e50056047836f97ada59df029e5661fb34442d5e8")
    version("2.1.1", sha256="f0ca2458c60d9711edf4291230b31795307ad3781cb6232ff4792b53c8f55123")
    version("2.1.0", sha256="67a0d66c20fff99312fc280e34c8f6dc3dbb027d4a33c13c79bec3c1173f6909")
    version("2.0.9", sha256="6b8572cf1b4a22fd0120b7c23382ba4fa04a6f0397e02af1249be9a7309d1767")
    version("2.0.8", sha256="899dc6aaed366f20100b9f80cf1093ea5b43eecc74afd1dc63a4e48dfa776ab9")
    version("2.0.7", sha256="a6c72ee2b94be1ffefe7e77b69582b9827211f0c356b2189459711844d3634c0")
    version("2.0.6", sha256="0519480abe4ad18b2c2d1bc580eab75edd82c95083d341a1157952f4b00019bb")
    version("2.0.5", sha256="cbce24758530e070fe1b403d6d21391cbea78c037b70bf6afc1ca9f1f8269eff")
    version("2.0.4", sha256="1cbe62af6821963321b275d5598fd94e63c11feaa1d4deaa79c9eb9ee0e1d68a")
    version("2.0.3", sha256="398dbd4a95e9d3ab2b2941d3e0c19362d397a2a6c3a667ab89d3d6aad30997f4")
    version("1.2.2", sha256="d2b18c4336eb9c4f0d03469870257efa7980a9b036c9d46dcf4d49e7f4487e2d")
    version("1.2.1", sha256="6adce75b2050608e6683c3046ef938bfdc5bfcd4c6b6c522df5e50d18e0ac7c6")
    version("1.2.0", sha256="33d5297cd0c280640dc5c075466995c05911bc1da35c83ae57b2a48188b605e2")
    version("1.1.2", sha256="cfde0a424961ead4982a7ebefd77d8ca382810b5a69b566fa64c57d8f340eeb4")
    version("1.1.1", sha256="be1b67f62e5119f6f24a239a865dc47e6d9aa93b97b506ba34cab7353dbc23b6")
    version("1.1.0", sha256="36d83b027ba9d2c9da8e1eefc28f600ca93dc03423e033b633cbac9061af8a5d")

    depends_on("python@3.6:", type=("build", "run"), when="@2.4")
    depends_on("py-numpy@1.9.1:", type=("build", "run"), when="@2.4")
    depends_on("py-scipy@0.14:", type=("build", "run"), when="@2.4")
    depends_on("py-h5py", type=("build", "run"), when="@2.4")
    depends_on("py-keras-applications", type="run", when="@2.2:2.4")
    depends_on("py-keras-preprocessing", type="run", when="@2.2:2.4")
    depends_on("py-setuptools", type="build")
    depends_on("py-theano", type=("build", "run"), when="@:2.2")
    depends_on("py-pyyaml", type=("build", "run"), when="@:2.4")
    depends_on("py-six", type=("build", "run"), when="@:2.2")
    depends_on("py-tensorflow@2.5.0:2.5", type=("build", "run"), when="@2.5.0:2.5")
    depends_on("py-tensorflow@2.6.0:2.6", type=("build", "run"), when="@2.6.0:2.6")
    depends_on("py-tensorflow@2.7.0:2.7", type=("build", "run"), when="@2.7.0:2.7")
    depends_on("bazel", type="build", when="@2.5.0:")
    depends_on("protobuf", type="build", when="@2.5.0:")

    def url_for_version(self, version):
        if version >= Version("2.6.0"):
            return super(PyKeras, self).url_for_version(version)
        else:
            url = "https://pypi.io/packages/source/K/Keras/Keras-{0}.tar.gz"
            return url.format(version.dotted)

    @when("@2.5.0:")
    def patch(self):
        infile = join_path(self.package_dir, "protobuf_build.patch")
        with open(infile, "r") as source_file:
            text = source_file.read()
        with open("keras/keras.bzl", mode="a") as f:
            f.write(text)

        filter_file(
            'load("@com_google_protobuf//:protobuf.bzl", "py_proto_library")',
            'load("@org_keras//keras:keras.bzl", "py_proto_library")',
            "keras/protobuf/BUILD",
            string=True,
        )

    @when("@2.5.0:")
    def install(self, spec, prefix):
        self.tmp_path = tempfile.mkdtemp(prefix="spack")
        env["HOME"] = self.tmp_path

        args = [
            # Don't allow user or system .bazelrc to override build settings
            "--nohome_rc",
            "--nosystem_rc",
            # Bazel does not work properly on NFS, switch to /tmp
            "--output_user_root=" + self.tmp_path,
            "build",
            # Spack logs don't handle colored output well
            "--color=no",
            "--jobs={0}".format(make_jobs),
            # Enable verbose output for failures
            "--verbose_failures",
            # Show (formatted) subcommands being executed
            "--subcommands=pretty_print",
            "--spawn_strategy=local",
            # Ask bazel to explain what it's up to
            # Needs a filename as argument
            "--explain=explainlogfile.txt",
            # Increase verbosity of explanation,
            "--verbose_explanations",
            # bazel uses system PYTHONPATH instead of spack paths
            "--action_env",
            "PYTHONPATH={0}".format(env["PYTHONPATH"]),
            "//keras/tools/pip_package:build_pip_package",
        ]

        bazel(*args)

        build_pip_package = Executable("bazel-bin/keras/tools/pip_package/build_pip_package")
        buildpath = join_path(self.stage.source_path, "spack-build")
        build_pip_package("--src", buildpath)

        with working_dir(buildpath):
            args = std_pip_args + ["--prefix=" + prefix, "."]
            pip(*args)
        remove_linked_tree(self.tmp_path)