diff options
author | Jason Zaman <perfinion@gentoo.org> | 2023-06-04 16:13:10 -0700 |
---|---|---|
committer | Jason Zaman <perfinion@gentoo.org> | 2023-06-05 09:37:12 -0700 |
commit | c3ab7903a10d70d277e588dd1d5f7811233582f4 (patch) | |
tree | c72f0e3b40bf410d670cdb425c5f4fbf2884cf80 /sci-libs/keras | |
parent | sci-libs/tensorflow: add 2.12.0 (diff) | |
download | gentoo-c3ab7903a10d70d277e588dd1d5f7811233582f4.tar.gz gentoo-c3ab7903a10d70d277e588dd1d5f7811233582f4.tar.bz2 gentoo-c3ab7903a10d70d277e588dd1d5f7811233582f4.zip |
sci-libs/keras: add 2.12.0
Signed-off-by: Jason Zaman <perfinion@gentoo.org>
Diffstat (limited to 'sci-libs/keras')
-rw-r--r-- | sci-libs/keras/Manifest | 1 | ||||
-rw-r--r-- | sci-libs/keras/files/keras-2.12.0-0001-bazel-Use-system-protobuf.patch | 330 | ||||
-rw-r--r-- | sci-libs/keras/keras-2.12.0.ebuild | 85 |
3 files changed, 416 insertions, 0 deletions
diff --git a/sci-libs/keras/Manifest b/sci-libs/keras/Manifest index 495367cc87b0..d5c590e7cbd2 100644 --- a/sci-libs/keras/Manifest +++ b/sci-libs/keras/Manifest @@ -2,3 +2,4 @@ DIST bazelbuild-rules_cc-b1c40e1de81913a3c40e5948f78719c28152486d.zip 201360 BLA DIST bazelbuild-rules_java-7cf3cefd652008d0a64a419c34c13bdca6c8f178.zip 9422 BLAKE2B bbc45c97551ee8126335b611ffca6574dac843d4db9b3221b10d26487f8eecfe38ba0cd67a4039a3ad921c25fea6294c43e4f4e7a57a060a30791acd6c4f9d39 SHA512 ba06242feb711e7fb6e821fd9ac029248b4f3e466fb1acf971d0db8196f3efe4d114ef137acbe4913073f8cbe8ccab4d47d8bafa21b867b2d6a6d57f5a647f0c DIST keras-2.10.0.tar.gz 2250425 BLAKE2B eb05537739cdc81e279b5c400e2e2b77d46f4085e8530fef565bde12414ddccedb44c0b13265106a3353e67c367106e1d341412dc25b32e2221f144a31d76079 SHA512 8682110495a045c2ebc61f31a98d646b88fd9608d5169be78701cf528457ff0d2e39669d885854c14c1e6bebb380b14968957f2a8a34a8a023f8860efc7aeecd DIST keras-2.11.0.tar.gz 2260857 BLAKE2B 9c85e0f64176848886509fbf269b85732f8ad98e7be3ec186e71870e453454b9b81516ef2ca4e67fb8906bc0ca1241d61ae94db6b58c7483527d33519f7c38fb SHA512 17c773e1f9c592676d56a8b3eed707d52240800b33e85dccccb80f206e8459c8c18485f0bcb6d5775ce1ef0625dc5ebe699574b8599dd98dbb73620da4301968 +DIST keras-2.12.0.tar.gz 2319287 BLAKE2B 332b2b02eecac2da7c87c1f051c56d495027630e2e0254d543897e462f7f44a282bff6cf3cbe2602663cae2e2c76ab45c9b3b53cadbc3317b3e2dd366bdf7ace SHA512 10d034abc9b159a0945610dcfb2fc58d8143267629b8f59496b4e5f097b1220bdb02a269f135f05b8abed56c2d5237b3e0c2b74882cd3f321850fc7f47694dbb diff --git a/sci-libs/keras/files/keras-2.12.0-0001-bazel-Use-system-protobuf.patch b/sci-libs/keras/files/keras-2.12.0-0001-bazel-Use-system-protobuf.patch new file mode 100644 index 000000000000..6870d534cf75 --- /dev/null +++ b/sci-libs/keras/files/keras-2.12.0-0001-bazel-Use-system-protobuf.patch @@ -0,0 +1,330 @@ +From ac16152a7709f90c1dedac63157655c836c257bb Mon Sep 17 00:00:00 2001 +From: Jason Zaman <jason@perfinion.com> +Date: Sun, 14 Nov 2021 17:59:39 -0800 +Subject: [PATCH] bazel: Use system protobuf + +--- + WORKSPACE | 52 ---------- + keras/protobuf/BUILD | 2 +- + third_party/BUILD | 8 +- + third_party/protobuf.bzl | 216 +++++++++++++++++++++++++++++++++++++++ + 4 files changed, 224 insertions(+), 54 deletions(-) + create mode 100644 third_party/protobuf.bzl + +diff --git a/WORKSPACE b/WORKSPACE +index c0ebc4e52..61282aead 100644 +--- a/WORKSPACE ++++ b/WORKSPACE +@@ -1,53 +1 @@ + workspace(name = "org_keras") +- +-load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") +- +-# Needed by protobuf +-load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") +-http_archive( +- name = "bazel_skylib", +- urls = [ +- "https://mirror.bazel.build/github.com/bazelbuild/bazel-skylib/releases/download/1.3.0/bazel-skylib-1.3.0.tar.gz", +- "https://github.com/bazelbuild/bazel-skylib/releases/download/1.3.0/bazel-skylib-1.3.0.tar.gz", +- ], +- sha256 = "74d544d96f4a5bb630d465ca8bbcfe231e3594e5aae57e1edbf17a6eb3ca2506", +-) +-load("@bazel_skylib//:workspace.bzl", "bazel_skylib_workspace") +-bazel_skylib_workspace() +- +-# Needed by protobuf +-http_archive( +- name = "six_archive", +- build_file = "//third_party:six.BUILD", +- sha256 = "1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926", +- strip_prefix = "six-1.16.0", +- urls = ["https://pypi.python.org/packages/source/s/six/six-1.16.0.tar.gz"], +-) +- +-bind( +- name = "six", +- actual = "@six_archive//:six", +-) +- +-http_archive( +- name = "com_google_protobuf", +- sha256 = "f66073dee0bc159157b0bd7f502d7d1ee0bc76b3c1eac9836927511bdc4b3fc1", +- strip_prefix = "protobuf-3.21.9", +- urls = ["https://github.com/protocolbuffers/protobuf/archive/v3.21.9.zip"], +-) +- +-# ZLIB. Need by com_google_protobuf. +-http_archive( +- name = "zlib", +- build_file = "@com_google_protobuf//:third_party/zlib.BUILD", +- sha256 = "b3a24de97a8fdbc835b9833169501030b8977031bcb54b3b3ac13740f846ab30", +- strip_prefix = "zlib-1.2.13", +- urls = [ +- "https://storage.googleapis.com/mirror.tensorflow.org/zlib.net/zlib-1.2.13.tar.gz", +- "https://zlib.net/zlib-1.2.13.tar.gz", +- ], +-) +- +- +-load("@com_google_protobuf//:protobuf_deps.bzl", "protobuf_deps") +-protobuf_deps() +diff --git a/keras/protobuf/BUILD b/keras/protobuf/BUILD +index 413dcb74d..80133c064 100644 +--- a/keras/protobuf/BUILD ++++ b/keras/protobuf/BUILD +@@ -1,7 +1,7 @@ + # Description: + # Contains Keras protobufs + +-load("@com_google_protobuf//:protobuf.bzl", "py_proto_library") ++load("//third_party:protobuf.bzl", "py_proto_library") + + package( + default_visibility = [ +diff --git a/third_party/BUILD b/third_party/BUILD +index 9be54076c..9399232f6 100644 +--- a/third_party/BUILD ++++ b/third_party/BUILD +@@ -1,4 +1,5 @@ + package( ++ default_visibility = ["//visibility:public"], + licenses = ["notice"], # Apache 2.0 + ) + +@@ -7,4 +8,9 @@ exports_files([ + "six.BUILD", + ]) + +-package(default_visibility = ["//visibility:public"]) ++genrule( ++ name = "protoc", ++ outs = ["protoc.bin"], ++ cmd = "ln -s $$(which protoc) $@", ++ executable = 1, ++) +diff --git a/third_party/protobuf.bzl b/third_party/protobuf.bzl +new file mode 100644 +index 000000000..3a7ef0a27 +--- /dev/null ++++ b/third_party/protobuf.bzl +@@ -0,0 +1,216 @@ ++def _GetPath(ctx, path): ++ if ctx.label.workspace_root: ++ return ctx.label.workspace_root + "/" + path ++ else: ++ return path ++ ++def _IsNewExternal(ctx): ++ # Bazel 0.4.4 and older have genfiles paths that look like: ++ # bazel-out/local-fastbuild/genfiles/external/repo/foo ++ # After the exec root rearrangement, they look like: ++ # ../repo/bazel-out/local-fastbuild/genfiles/foo ++ return ctx.label.workspace_root.startswith("../") ++ ++def _GenDir(ctx): ++ if _IsNewExternal(ctx): ++ # We are using the fact that Bazel 0.4.4+ provides repository-relative paths ++ # for ctx.genfiles_dir. ++ return ctx.genfiles_dir.path + ( ++ "/" + ctx.attr.includes[0] if ctx.attr.includes and ctx.attr.includes[0] else "" ++ ) ++ ++ # This means that we're either in the old version OR the new version in the local repo. ++ # Either way, appending the source path to the genfiles dir works. ++ return ctx.var["GENDIR"] + "/" + _SourceDir(ctx) ++ ++def _SourceDir(ctx): ++ if not ctx.attr.includes: ++ return ctx.label.workspace_root ++ if not ctx.attr.includes[0]: ++ return _GetPath(ctx, ctx.label.package) ++ if not ctx.label.package: ++ return _GetPath(ctx, ctx.attr.includes[0]) ++ return _GetPath(ctx, ctx.label.package + "/" + ctx.attr.includes[0]) ++ ++def _PyOuts(srcs, use_grpc_plugin = False): ++ ret = [s[:-len(".proto")] + "_pb2.py" for s in srcs] ++ if use_grpc_plugin: ++ ret += [s[:-len(".proto")] + "_pb2_grpc.py" for s in srcs] ++ return ret ++ ++def _proto_gen_impl(ctx): ++ """General implementation for generating protos""" ++ srcs = ctx.files.srcs ++ deps = [] ++ deps += ctx.files.srcs ++ source_dir = _SourceDir(ctx) ++ gen_dir = _GenDir(ctx) ++ if source_dir: ++ import_flags = ["-I" + source_dir, "-I" + gen_dir] ++ else: ++ import_flags = ["-I."] ++ ++ for dep in ctx.attr.deps: ++ import_flags += dep.proto.import_flags ++ deps += dep.proto.deps ++ import_flags = depset(import_flags).to_list() ++ deps = depset(deps).to_list() ++ ++ args = [] ++ if ctx.attr.gen_cc: ++ args += ["--cpp_out=" + gen_dir] ++ if ctx.attr.gen_py: ++ args += ["--python_out=" + gen_dir] ++ ++ inputs = srcs + deps ++ tools = [ctx.executable.protoc] ++ if ctx.executable.plugin: ++ plugin = ctx.executable.plugin ++ lang = ctx.attr.plugin_language ++ if not lang and plugin.basename.startswith("protoc-gen-"): ++ lang = plugin.basename[len("protoc-gen-"):] ++ if not lang: ++ fail("cannot infer the target language of plugin", "plugin_language") ++ ++ outdir = gen_dir ++ if ctx.attr.plugin_options: ++ outdir = ",".join(ctx.attr.plugin_options) + ":" + outdir ++ args += ["--plugin=protoc-gen-%s=%s" % (lang, plugin.path)] ++ args += ["--%s_out=%s" % (lang, outdir)] ++ tools.append(plugin) ++ ++ if args: ++ ctx.actions.run( ++ inputs = inputs, ++ outputs = ctx.outputs.outs, ++ arguments = args + import_flags + [s.path for s in srcs], ++ executable = ctx.executable.protoc, ++ mnemonic = "ProtoCompile", ++ tools = tools, ++ use_default_shell_env = True, ++ ) ++ ++ return struct( ++ proto = struct( ++ srcs = srcs, ++ import_flags = import_flags, ++ deps = deps, ++ ), ++ ) ++ ++proto_gen = rule( ++ attrs = { ++ "srcs": attr.label_list(allow_files = True), ++ "deps": attr.label_list(providers = ["proto"]), ++ "includes": attr.string_list(), ++ "protoc": attr.label( ++ cfg = "host", ++ executable = True, ++ allow_single_file = True, ++ mandatory = True, ++ ), ++ "plugin": attr.label( ++ cfg = "host", ++ allow_files = True, ++ executable = True, ++ ), ++ "plugin_language": attr.string(), ++ "plugin_options": attr.string_list(), ++ "gen_cc": attr.bool(), ++ "gen_py": attr.bool(), ++ "outs": attr.output_list(), ++ }, ++ output_to_genfiles = True, ++ implementation = _proto_gen_impl, ++) ++"""Generates codes from Protocol Buffers definitions. ++ ++This rule helps you to implement Skylark macros specific to the target ++language. You should prefer more specific `cc_proto_library `, ++`py_proto_library` and others unless you are adding such wrapper macros. ++ ++Args: ++ srcs: Protocol Buffers definition files (.proto) to run the protocol compiler ++ against. ++ deps: a list of dependency labels; must be other proto libraries. ++ includes: a list of include paths to .proto files. ++ protoc: the label of the protocol compiler to generate the sources. ++ plugin: the label of the protocol compiler plugin to be passed to the protocol ++ compiler. ++ plugin_language: the language of the generated sources ++ plugin_options: a list of options to be passed to the plugin ++ gen_cc: generates C++ sources in addition to the ones from the plugin. ++ gen_py: generates Python sources in addition to the ones from the plugin. ++ outs: a list of labels of the expected outputs from the protocol compiler. ++""" ++ ++def py_proto_library( ++ name, ++ srcs = [], ++ deps = [], ++ py_libs = [], ++ py_extra_srcs = [], ++ include = None, ++ default_runtime = None, ++ protoc = "//third_party:protoc", ++ use_grpc_plugin = False, ++ **kwargs): ++ """Bazel rule to create a Python protobuf library from proto source files ++ ++ NOTE: the rule is only an internal workaround to generate protos. The ++ interface may change and the rule may be removed when bazel has introduced ++ the native rule. ++ ++ Args: ++ name: the name of the py_proto_library. ++ srcs: the .proto files of the py_proto_library. ++ deps: a list of dependency labels; must be py_proto_library. ++ py_libs: a list of other py_library targets depended by the generated ++ py_library. ++ py_extra_srcs: extra source files that will be added to the output ++ py_library. This attribute is used for internal bootstrapping. ++ include: a string indicating the include path of the .proto files. ++ default_runtime: the implicitly default runtime which will be depended on by ++ the generated py_library target. ++ protoc: the label of the protocol compiler to generate the sources. ++ use_grpc_plugin: a flag to indicate whether to call the Python C++ plugin ++ when processing the proto files. ++ **kwargs: other keyword arguments that are passed to py_library. ++ ++ """ ++ outs = _PyOuts(srcs, use_grpc_plugin) ++ ++ includes = [] ++ if include != None: ++ includes = [include] ++ ++ grpc_python_plugin = None ++ if use_grpc_plugin: ++ grpc_python_plugin = "//external:grpc_python_plugin" ++ # Note: Generated grpc code depends on Python grpc module. This dependency ++ # is not explicitly listed in py_libs. Instead, host system is assumed to ++ # have grpc installed. ++ ++ proto_gen( ++ name = name + "_genproto", ++ srcs = srcs, ++ deps = [s + "_genproto" for s in deps], ++ includes = includes, ++ protoc = protoc, ++ gen_py = 1, ++ outs = outs, ++ visibility = ["//visibility:public"], ++ plugin = grpc_python_plugin, ++ plugin_language = "grpc", ++ ) ++ ++ if default_runtime and not default_runtime in py_libs + deps: ++ py_libs = py_libs + [default_runtime] ++ ++ native.py_library( ++ name = name, ++ srcs = outs + py_extra_srcs, ++ deps = py_libs + deps, ++ imports = includes, ++ **kwargs ++ ) +-- +2.39.3 + diff --git a/sci-libs/keras/keras-2.12.0.ebuild b/sci-libs/keras/keras-2.12.0.ebuild new file mode 100644 index 000000000000..429513ced949 --- /dev/null +++ b/sci-libs/keras/keras-2.12.0.ebuild @@ -0,0 +1,85 @@ +# Copyright 1999-2023 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=8 + +PYTHON_COMPAT=( python3_10 python3_11 ) +inherit bazel distutils-r1 + +DESCRIPTION="Deep Learning for humans" +HOMEPAGE="https://keras.io/" + +LICENSE="Apache-2.0" +SLOT="0" +KEYWORDS="~amd64" +IUSE="" + +bazel_external_uris=" + https://github.com/bazelbuild/rules_cc/archive/b1c40e1de81913a3c40e5948f78719c28152486d.zip -> bazelbuild-rules_cc-b1c40e1de81913a3c40e5948f78719c28152486d.zip + https://github.com/bazelbuild/rules_java/archive/7cf3cefd652008d0a64a419c34c13bdca6c8f178.zip -> bazelbuild-rules_java-7cf3cefd652008d0a64a419c34c13bdca6c8f178.zip" + +SRC_URI="https://github.com/keras-team/${PN}/archive/v${PV}.tar.gz -> ${P}.tar.gz + ${bazel_external_uris}" + +RDEPEND=" + >=dev-libs/protobuf-3.13.0:= + dev-python/absl-py[${PYTHON_USEDEP}] + dev-python/h5py[${PYTHON_USEDEP}] + dev-python/numpy[${PYTHON_USEDEP}] + dev-python/pandas[${PYTHON_USEDEP}] + dev-python/pillow[${PYTHON_USEDEP}] + >=dev-python/protobuf-python-3.13.0[${PYTHON_USEDEP}] + dev-python/six[${PYTHON_USEDEP}] + >=sci-libs/keras-applications-1.0.8[${PYTHON_USEDEP}] + >=sci-libs/keras-preprocessing-1.1.2[${PYTHON_USEDEP}] + >=sci-libs/tensorflow-2.12[python,${PYTHON_USEDEP}]" +DEPEND="${RDEPEND} + dev-python/setuptools[${PYTHON_USEDEP}]" +BDEPEND=" + app-arch/unzip + >=dev-libs/protobuf-3.13.0 + dev-java/java-config + >=dev-util/bazel-5.3.0" + +# Bazel tests not pytest, also want GPU access +RESTRICT="test" +DOCS=( CONTRIBUTING.md README.md ) +PATCHES=( + "${FILESDIR}/keras-2.12.0-0001-bazel-Use-system-protobuf.patch" +) + +src_unpack() { + unpack "${P}.tar.gz" + bazel_load_distfiles "${bazel_external_uris}" +} + +src_prepare() { + bazel_setup_bazelrc + default + python_copy_sources +} + +python_compile() { + pushd "${BUILD_DIR}" >/dev/null || die + + ebazel build //keras/tools/pip_package:build_pip_package + ebazel shutdown + + local srcdir="${T}/src-${EPYTHON/./_}" + mkdir -p "${srcdir}" || die + bazel-bin/keras/tools/pip_package/build_pip_package --src "${srcdir}" || die + + popd || die +} + +src_compile() { + export JAVA_HOME=$(java-config --jre-home) + distutils-r1_src_compile +} + +python_install() { + pushd "${T}/src-${EPYTHON/./_}" >/dev/null || die + esetup.py install + python_optimize + popd || die +} |