From 17aae9e35d2c72bf2de6dc73cf49a2d552b71b43 Mon Sep 17 00:00:00 2001 From: Ryan Kuester Date: Sun, 5 Mar 2023 00:25:58 -0600 Subject: [PATCH] build: add means of linking with C libs in Py packages (#1668) Extend the Python repository_rule used to create external repositories, adding targets for C-language binary libraries shipped inside Python packages; e.g., that shipped in package tensorflow-gpu. These targets are to be used as dependencies by C-language targets. Note: when debugging the build, it can be helpful to examine the repository directory and BUILD file this repository_rule generates in the bazel cache. Begin using a python/ directory at the root of the project for code that is specific to Python. Upgrade to the latest version of rules_python first. Note that the unit test to keep requirements.in and requirements.txt is disabled (specifically with ec6bdc5d4443285d28a44076f06c203d9582e4a1) Add a unit test for this feature. BUG=see description --- WORKSPACE | 39 +- python/BUILD | 0 python/py_pkg_cc_deps.bzl | 167 ++++++ python/tests/BUILD | 22 + python/tests/cc_deps_link_test.cc | 12 + .../lite/micro/python/interpreter/src/BUILD | 2 +- .../lite/micro/python/py_cc_headers.bzl | 109 ---- .../micro/tools/ci_build/test_code_style.sh | 1 + third_party/BUILD | 28 + third_party/python_requirements.in | 18 + third_party/python_requirements.txt | 524 ++++++++++++++++++ third_party/requirements.txt | 6 - 12 files changed, 797 insertions(+), 131 deletions(-) create mode 100644 python/BUILD create mode 100644 python/py_pkg_cc_deps.bzl create mode 100644 python/tests/BUILD create mode 100644 python/tests/cc_deps_link_test.cc delete mode 100644 tensorflow/lite/micro/python/py_cc_headers.bzl create mode 100644 third_party/python_requirements.in create mode 100644 third_party/python_requirements.txt delete mode 100644 third_party/requirements.txt diff --git a/WORKSPACE b/WORKSPACE index 937e4253..a2b30f70 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -29,20 +29,21 @@ hedron_compile_commands_setup() http_archive( name = "rules_python", - url = "https://github.com/bazelbuild/rules_python/releases/download/0.4.0/rules_python-0.4.0.tar.gz", - sha256 = "954aa89b491be4a083304a2cb838019c8b8c3720a7abb9c4cb81ac7a24230cea", + sha256 = "497ca47374f48c8b067d786b512ac10a276211810f4a580178ee9b9ad139323a", + strip_prefix = "rules_python-0.16.1", + url = "https://github.com/bazelbuild/rules_python/archive/refs/tags/0.16.1.tar.gz", ) -load("@rules_python//python:pip.bzl", "pip_install") - -# Create a central external repo that contains Bazel targets for all the -# third-party packages specified in the requirements.txt file. -pip_install( - name = "tflm_pip_deps", - requirements = "//third_party:requirements.txt", +load("@rules_python//python:pip.bzl", "pip_parse") +pip_parse( + name = "tflm_pip_deps", + requirements_lock = "//third_party:python_requirements.txt", ) -load("@//tensorflow:workspace.bzl", "workspace") +load("@tflm_pip_deps//:requirements.bzl", "install_deps") +install_deps() + +load("//tensorflow:workspace.bzl", "workspace") workspace() http_archive( @@ -64,9 +65,17 @@ load("@pybind11_bazel//:python_configure.bzl", "python_configure") python_configure(name = "local_config_python", python_version = "3") load("@tflm_pip_deps//:requirements.bzl", "requirement") -load("@//tensorflow/lite/micro/python:py_cc_headers.bzl", "tflm_py_cc_headers") -tflm_py_cc_headers( - name = "numpy_headers", - py_library = requirement("numpy"), - include_prefix = "numpy/core/include", +load("//python:py_pkg_cc_deps.bzl", "py_pkg_cc_deps") + +py_pkg_cc_deps( + name = "numpy_cc_deps", + includes = ["numpy/core/include"], + pkg = requirement("numpy"), +) + +py_pkg_cc_deps( + name = "tensorflow_cc_deps", + includes = ["tensorflow/include"], + libs = ["tensorflow/libtensorflow_framework.so.2"], + pkg = requirement("tensorflow-cpu"), ) diff --git a/python/BUILD b/python/BUILD new file mode 100644 index 00000000..e69de29b diff --git a/python/py_pkg_cc_deps.bzl b/python/py_pkg_cc_deps.bzl new file mode 100644 index 00000000..daba2d00 --- /dev/null +++ b/python/py_pkg_cc_deps.bzl @@ -0,0 +1,167 @@ +"Repository rule exporting C-language dependencies contained in a Python package." + +# This extends the standard rules_python rules to expose C-language dependences +# contained in some Python packages like NumPy. It extends rules_python to +# avoid duplicating the download mechanism, and to ensure the Python package +# versions used throughout the WORKSPACE are consistent. + +def _rules_python_path(ctx, pkg): + # Make an absolute path to the rules_python repository for the Python + # package `pkg`. + + # WARNING: To get a filesystem path via ctx.path(), its argument must be a + # label to a non-generated file. ctx.path() does not work on non-file + # A standard technique for finding the path to a repository (see, + # e.g., rules_go) is to use the repository's BUILD file; however, the exact + # name of the build file is an implementation detail of rules_python. + build_file = pkg.relative(":BUILD.bazel") + abspath = ctx.path(build_file).dirname + return abspath + +def _join_paths(a, b): + if type(a) == "string" and type(b) == "string": + result = "/".join((a, b)) + + elif type(a) == "path" and type(b) == "string": + # Append components of string b to path a, because path.get_child() + # requires one component at a time. + result = a + for x in b.split("/"): + result = result.get_child(x) + + return result + +def _make_build_file(basedir, include_paths, libs): + template = """\ +package( + default_visibility = ["//visibility:public"], +) + +cc_library( + name = "cc_headers", + hdrs = glob(%s, allow_empty=False, exclude_directories=1), + includes = %s, +) + +cc_library( + name = "cc_library", + srcs = %s, + deps = [":cc_headers"], +) +""" + hdrs = [(_join_paths(basedir, inc) + "/**") for inc in include_paths] + includes = [_join_paths(basedir, inc) for inc in include_paths] + srcs = [_join_paths(basedir, lib) for lib in libs] + + return template % (hdrs, includes, srcs) + +def _py_pkg_cc_deps(ctx): + # Create a repository with the directory tree: + # repository/ + # |- _site --> @specific_rules_python_pkg/site-packages + # \_ BUILD + # + # When debugging, it might help to examine the tree and BUILD file of this + # repository, created in the bazel cache. + + # Symlink to the rules_python repository of pkg + srcdir = _join_paths(_rules_python_path(ctx, ctx.attr.pkg), "site-packages") + destdir = "_site" + ctx.symlink(srcdir, destdir) + + # Write a BUILD file publishing targets + ctx.file( + "BUILD", + content = _make_build_file(destdir, ctx.attr.includes, ctx.attr.libs), + executable = False, + ) + +py_pkg_cc_deps = repository_rule( + implementation = _py_pkg_cc_deps, + local = True, + attrs = { + "pkg": attr.label( + doc = "Python package target via rules_python's requirement()", + mandatory = True, + ), + "includes": attr.string_list( + doc = "list of include dirs", + mandatory = True, + allow_empty = False, + ), + "libs": attr.string_list( + doc = "list of libraries against which to link", + mandatory = False, + ), + }, +) +"""Repository rule for creating an external repository `name` with C-language +dependencies from the Python package `pkg`, published by rules_python. Set +`pkg` using the `requirement` function from rules_python. + +The top-level Bazel package in the created repository provides two targets for +use as dependencies in C-language targets elsewhere. + + * `:cc_headers`--for including headers + * `:cc_library`--for including headers and linking against a library + +The mandatory `includes` attribute should be set to a list of +include dirs to be added to the compile command line. + +The optional `libs` attribute should be set to a list of libraries to link with +the binary target. + +Specify all paths relative to the parent directory in which the package is +extracted (e.g., site-packages/). Thus paths will begin with the package's +Python namespace or module name. Note this name may differ from the Python +distribution package name---e.g., the distribution package `tensorflow-gpu` +distributes the Python namespace package `tensorflow`. To see what paths are +available, it might help to examine the directory tree in the external +repository created for the package by rules_python. The external repository is +created in the bazel cache; in the example below, in a subdirectory +`external/tflm_pip_deps_numpy`. + +For example, to use the headers from NumPy: + +1. Add Python dependencies (numpy is named in python_requirements.txt), via the +usual method, to an external repository named `tflm_pip_deps` via @rules_python +in the WORKSPACE: +``` + load("@rules_python//python:pip.bzl", "pip_parse") + pip_parse( + name = "tflm_pip_deps", + requirements_lock = "@//third_party:python_requirements.txt", + ) + load("@tflm_pip_deps//:requirements.bzl", "install_deps") + install_deps() +``` + +2. Use the repository rule `py_pkg_cc_deps` in the WORKSPACE to create an +external repository with a target `@numpy_cc_deps//:cc_headers`, passing the +`:pkg` target from @tflm_pip_deps, obtained via requirement(), and an +`includes` path based on an examination of the package and the desired #include +paths in the C code: +``` + load("@tflm_pip_deps//:requirements.bzl", "requirement") + load("@//python:py_pkg_cc_deps.bzl", "py_pkg_cc_deps") + py_pkg_cc_deps( + name = "numpy_cc_deps", + pkg = requirement("numpy"), + includes = ["numpy/core/include"], + ) +``` + +3. Use the cc_library target `@numpy_cc_deps//:cc_headers` in a BUILD file as +a dependency to a rule that needs the headers, e.g., the cc_library()-based +pybind_library(): +``` + pybind_library( + name = "your_extension_lib", + srcs = [...], + deps = ["@numpy_cc_deps//:cc_headers", ...], + ) +``` + +See the test target //python/tests:cc_dep_link_test elsewhere for an example +which links against a library shipped in a Python package. +""" diff --git a/python/tests/BUILD b/python/tests/BUILD new file mode 100644 index 00000000..01dd2adb --- /dev/null +++ b/python/tests/BUILD @@ -0,0 +1,22 @@ +cc_test( + name = "cc_deps_link_test", + size = "small", + srcs = [ + "cc_deps_link_test.cc", + ], + copts = [ + "-std=c++14", + # Compiling against upstream Tensorflow headers requires -std=c++14 + # due (at least) to its dependency on Eigen, which raises the error + # "This compiler appears to be too told to be supported by Eigen" + # via the preprocessor, as well as several compilation errors. + # + # TODO(b/271210933): Harmonize this with a global solution + # throughout the repository. Presumably this same issue will be + # encountered by other code compiling against upstream Tensorflow, + # such as custom operator implementations. + ], + deps = [ + "@tensorflow_cc_deps//:cc_library", + ], +) diff --git a/python/tests/cc_deps_link_test.cc b/python/tests/cc_deps_link_test.cc new file mode 100644 index 00000000..f68444b4 --- /dev/null +++ b/python/tests/cc_deps_link_test.cc @@ -0,0 +1,12 @@ +// A simple program to test the py_pkg_cc_deps repository rule by building and +// linking against the Tensorflow library shipping in the Tensorflow Python +// package. + +#include + +int main(int argc, char* argv[]) { + const char* ptr = "test"; + const size_t n = 4; + tensorflow::PrintMemory(ptr, n); + return 0; +} diff --git a/tensorflow/lite/micro/python/interpreter/src/BUILD b/tensorflow/lite/micro/python/interpreter/src/BUILD index 2970aa98..66a87743 100644 --- a/tensorflow/lite/micro/python/interpreter/src/BUILD +++ b/tensorflow/lite/micro/python/interpreter/src/BUILD @@ -27,7 +27,7 @@ pybind_library( "//tensorflow/lite/micro:micro_framework", "//tensorflow/lite/micro:op_resolvers", "//tensorflow/lite/micro:recording_allocators", - "@numpy_headers", + "@numpy_cc_deps//:cc_headers", ], ) diff --git a/tensorflow/lite/micro/python/py_cc_headers.bzl b/tensorflow/lite/micro/python/py_cc_headers.bzl deleted file mode 100644 index d74ccb75..00000000 --- a/tensorflow/lite/micro/python/py_cc_headers.bzl +++ /dev/null @@ -1,109 +0,0 @@ -"Repository rule for creating a repository with the C headers of a Python package." - -# This extends the standard @rules_python rules to expose the C headers -# contained in some Python packages like NumPy. It extends @rules_python rather -# than duplicating the download mechanism, and to ensure the versions of Python -# packages used throughout the WWORKSPACE are consistent. Exposing the headers -# could conceivably become a build-in feature of @rules_python at some point. - -def _find_headers(ctx, py_library, include_prefix): - # Find the path to the headers within the @rules_python repository for the Python - # package `py_library`. - - # WARNING: To get a flesystem path via ctx.path(), its argument must be a - # label to a non-generated file. ctx.path() does not work on non-file - # A standard technique for finding the path to a repository (see, - # e.g., rules_go) is to use the repository's BUILD file; however, the exact - # name of the build file is an implementation detail of @rules.python. - build = py_library.relative(":BUILD.bazel") - path = ctx.path(build).dirname - - # Append the include_prefix, if any. get_child() needs one component at a - # time. - if include_prefix: - for c in include_prefix.split("/"): - path = path.get_child(c) - - return path - -def _tflm_py_cc_headers_impl(ctx): - # Create a repository with the directory tree: - # repository/ - # |- _include --> @rules_python//package/[include_prefix] - # \_ BUILD - - # Symlink to the headers within the @rules_python repository - src = _find_headers(ctx, ctx.attr.py_library, ctx.attr.include_prefix) - destdir = "_include" - ctx.symlink(src, destdir) - - # Write a BUILD file publishing a cc_library() target for the headers. - BUILD = """\ -cc_library( - name = "%s", - hdrs = glob(["%s/**/*.h"], allow_empty=False), - includes = ["%s"], - visibility = ["@//tensorflow/lite/micro:__subpackages__"], -) -""" % (ctx.attr.name, destdir, destdir) - ctx.file("BUILD", content = BUILD, executable = False) - -tflm_py_cc_headers = repository_rule( - implementation = _tflm_py_cc_headers_impl, - local = True, - attrs = { - "py_library": attr.label(mandatory = True), - "include_prefix": attr.string(mandatory = False), - }, -) -"""Repository rule for creating an external repository `name` with the C -headers from a Python package published as a `py_library` target by -@rules_python. The top-level Bazel package in the repository provides a -cc_library target named `name` (the default target of the package) for use -as a dependency in targets building against the headers. - -Use the optional `include_prefix` to base headers at a subdirectory of the -Python package rather than its root. E.g., numpy's headers are in -`numpy/core/include/numpy/header.h` relative to the root of the numpy package. -Use `include_prefix = "numpy/core/include"` to include headers as `#include -` instead of `#include ` - -For example, to use the headers from NumPy: - -1. Add Python dependencies (numpy is named in requirements.txt) to an external -repository named `tflm_pip_deps` via @rules_python in the WORKSPACE: -``` - load("@rules_python//python:pip.bzl", "pip_install") - pip_install( - name = "tflm_pip_deps", - requirements = "//third_party:requirements.txt", - ) -``` - -2. Use the repository rule `tflm_py_cc_headers` in the WORKSPACE to create an -external repository with a target `@numpy_headers:numpy_headers`, passing the -py_library target from @tflm_pip_deps obtained via requirement() and an -`include_prefix` based on an examination of the package and the desired #include -paths in our C code: -``` - load("@tflm_pip_deps//:requirements.bzl", "requirement") - load("@//tensorflow/lite/micro/python:py_cc_headers.bzl", "tflm_py_cc_headers") - tflm_py_cc_headers( - name = "numpy_headers", - py_library = requirement("numpy"), - include_prefix = "numpy/core/include", - ) -``` - -3. Use the cc_library target `@numpy_headers:numpy_headers` in a BUILD file as -a dependency to a rule that needs the headers, e.g., the cc_library()-based -pybind_library(). Note the target can be spelled as the default target of the -repository's top-level package: -``` - pybind_library( - name = "your_extension_lib", - srcs = [...], - deps = ["@numpy_headers", ...], - ) -``` -""" diff --git a/tensorflow/lite/micro/tools/ci_build/test_code_style.sh b/tensorflow/lite/micro/tools/ci_build/test_code_style.sh index 4c1ab4ef..81ca2c65 100755 --- a/tensorflow/lite/micro/tools/ci_build/test_code_style.sh +++ b/tensorflow/lite/micro/tools/ci_build/test_code_style.sh @@ -45,6 +45,7 @@ tensorflow/lite/micro/tools/make/downloads/pigweed/pw_presubmit/py/pw_presubmit/ -e kernels/internal/reference/integer_ops/ \ -e kernels/internal/reference/reference_ops.h \ -e python/schema_py_generated.py \ + -e python_requirements.in \ -e tools/make/downloads \ -e tools/make/targets/ecm3531 \ -e BUILD\ diff --git a/third_party/BUILD b/third_party/BUILD index 5b01f6e3..1e971e77 100644 --- a/third_party/BUILD +++ b/third_party/BUILD @@ -1 +1,29 @@ licenses(["notice"]) + +load("@rules_python//python:pip.bzl", "compile_pip_requirements") + +compile_pip_requirements( + # Defines targets which use pip-compile to keep the Python locked + # requirements up-to-date: + # + # :python_requirements.update bazel run this target to update + # ./requirements.txt by recursively following + # and locking the dependencies seeded by + # ./requirements.in + # + # :python_requirements_test bazel test target which fails if + # python_requirements.txt falls behind + name = "python_requirements", + extra_args = [ + "--allow-unsafe", + # ^ lets pip-compile include setuptools, recommended by + # `pip-compile -h` as future default behavior + ], + requirements_in = "python_requirements.in", + requirements_txt = "python_requirements.txt", + tags = [ + "manual", + # ^ exclude .update and _test targets from wildcards in, + # e.g., `bazel test ...` + ], +) diff --git a/third_party/python_requirements.in b/third_party/python_requirements.in new file mode 100644 index 00000000..e5410d27 --- /dev/null +++ b/third_party/python_requirements.in @@ -0,0 +1,18 @@ +# Specify Python package dependencies here, and always run +# +# `bazel run //third_party:python_requirements.update` +# +# to compile (using pip-compile) this file into a pinned requirements file in +# this same directory. The pinned requirements file is the input to +# @rules_python's pip_parse() in the WORKSPACE file, which satisfies Python +# package dependencies for targets run by Bazel. +# +# Both this file and the compiled, pinned requirements file should be committed +# to git. + +tensorflow-cpu +numpy +mako +pillow +yapf +protobuf diff --git a/third_party/python_requirements.txt b/third_party/python_requirements.txt new file mode 100644 index 00000000..76d20bb4 --- /dev/null +++ b/third_party/python_requirements.txt @@ -0,0 +1,524 @@ +# +# This file is autogenerated by pip-compile with python 3.9 +# To update, run: +# +# bazel run //third_party:python_requirements.update +# +absl-py==1.3.0 \ + --hash=sha256:34995df9bd7a09b3b8749e230408f5a2a2dd7a68a0d33c12a3d0cb15a041a507 \ + --hash=sha256:463c38a08d2e4cef6c498b76ba5bd4858e4c6ef51da1a5a1f27139a022e20248 + # via + # tensorboard + # tensorflow-cpu +astunparse==1.6.3 \ + --hash=sha256:5ad93a8456f0d084c3456d059fd9a92cce667963232cbf763eac3bc5b7940872 \ + --hash=sha256:c2652417f2c8b5bb325c885ae329bdf3f86424075c4fd1a128674bc6fba4b8e8 + # via tensorflow-cpu +cachetools==5.2.0 \ + --hash=sha256:6a94c6402995a99c3970cc7e4884bb60b4a8639938157eeed436098bf9831757 \ + --hash=sha256:f9f17d2aec496a9aa6b76f53e3b614c965223c061982d434d160f930c698a9db + # via google-auth +certifi==2022.12.7 \ + --hash=sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3 \ + --hash=sha256:4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18 + # via requests +charset-normalizer==2.1.1 \ + --hash=sha256:5a3d016c7c547f69d6f81fb0db9449ce888b418b5b9952cc5e6e66843e9dd845 \ + --hash=sha256:83e9a75d1911279afd89352c68b45348559d1fc0506b054b346651b5e7fee29f + # via requests +flatbuffers==22.12.6 \ + --hash=sha256:27f67c6fb102d41c911c26867bda71f1f8622176ac072fa30f668f4d023b5826 \ + --hash=sha256:b12a3214e73f325ecd392503e821ac43a791181356f020cc3657ba829b4947c8 + # via tensorflow-cpu +gast==0.4.0 \ + --hash=sha256:40feb7b8b8434785585ab224d1568b857edb18297e5a3047f1ba012bc83b42c1 \ + --hash=sha256:b7adcdd5adbebf1adf17378da5ba3f543684dbec47b1cda1f3997e573cd542c4 + # via tensorflow-cpu +google-auth==2.15.0 \ + --hash=sha256:6897b93556d8d807ad70701bb89f000183aea366ca7ed94680828b37437a4994 \ + --hash=sha256:72f12a6cfc968d754d7bdab369c5c5c16032106e52d32c6dfd8484e4c01a6d1f + # via + # google-auth-oauthlib + # tensorboard +google-auth-oauthlib==0.4.6 \ + --hash=sha256:3f2a6e802eebbb6fb736a370fbf3b055edcb6b52878bf2f26330b5e041316c73 \ + --hash=sha256:a90a072f6993f2c327067bf65270046384cda5a8ecb20b94ea9a687f1f233a7a + # via tensorboard +google-pasta==0.2.0 \ + --hash=sha256:4612951da876b1a10fe3960d7226f0c7682cf901e16ac06e473b267a5afa8954 \ + --hash=sha256:b32482794a366b5366a32c92a9a9201b107821889935a02b3e51f6b432ea84ed \ + --hash=sha256:c9f2c8dfc8f96d0d5808299920721be30c9eec37f2389f28904f454565c8a16e + # via tensorflow-cpu +grpcio==1.51.1 \ + --hash=sha256:094e64236253590d9d4075665c77b329d707b6fca864dd62b144255e199b4f87 \ + --hash=sha256:0dc5354e38e5adf2498312f7241b14c7ce3484eefa0082db4297189dcbe272e6 \ + --hash=sha256:0e1a9e1b4a23808f1132aa35f968cd8e659f60af3ffd6fb00bcf9a65e7db279f \ + --hash=sha256:0fb93051331acbb75b49a2a0fd9239c6ba9528f6bdc1dd400ad1cb66cf864292 \ + --hash=sha256:16c71740640ba3a882f50b01bf58154681d44b51f09a5728180a8fdc66c67bd5 \ + --hash=sha256:172405ca6bdfedd6054c74c62085946e45ad4d9cec9f3c42b4c9a02546c4c7e9 \ + --hash=sha256:17ec9b13cec4a286b9e606b48191e560ca2f3bbdf3986f91e480a95d1582e1a7 \ + --hash=sha256:22b011674090594f1f3245960ced7386f6af35485a38901f8afee8ad01541dbd \ + --hash=sha256:24ac1154c4b2ab4a0c5326a76161547e70664cd2c39ba75f00fc8a2170964ea2 \ + --hash=sha256:257478300735ce3c98d65a930bbda3db172bd4e00968ba743e6a1154ea6edf10 \ + --hash=sha256:29cb97d41a4ead83b7bcad23bdb25bdd170b1e2cba16db6d3acbb090bc2de43c \ + --hash=sha256:2b170eaf51518275c9b6b22ccb59450537c5a8555326fd96ff7391b5dd75303c \ + --hash=sha256:31bb6bc7ff145e2771c9baf612f4b9ebbc9605ccdc5f3ff3d5553de7fc0e0d79 \ + --hash=sha256:3c2b3842dcf870912da31a503454a33a697392f60c5e2697c91d133130c2c85d \ + --hash=sha256:3f9b0023c2c92bebd1be72cdfca23004ea748be1813a66d684d49d67d836adde \ + --hash=sha256:471d39d3370ca923a316d49c8aac66356cea708a11e647e3bdc3d0b5de4f0a40 \ + --hash=sha256:49d680356a975d9c66a678eb2dde192d5dc427a7994fb977363634e781614f7c \ + --hash=sha256:4c4423ea38a7825b8fed8934d6d9aeebdf646c97e3c608c3b0bcf23616f33877 \ + --hash=sha256:506b9b7a4cede87d7219bfb31014d7b471cfc77157da9e820a737ec1ea4b0663 \ + --hash=sha256:538d981818e49b6ed1e9c8d5e5adf29f71c4e334e7d459bf47e9b7abb3c30e09 \ + --hash=sha256:59dffade859f157bcc55243714d57b286da6ae16469bf1ac0614d281b5f49b67 \ + --hash=sha256:5a6ebcdef0ef12005d56d38be30f5156d1cb3373b52e96f147f4a24b0ddb3a9d \ + --hash=sha256:5dca372268c6ab6372d37d6b9f9343e7e5b4bc09779f819f9470cd88b2ece3c3 \ + --hash=sha256:6df3b63538c362312bc5fa95fb965069c65c3ea91d7ce78ad9c47cab57226f54 \ + --hash=sha256:6f0b89967ee11f2b654c23b27086d88ad7bf08c0b3c2a280362f28c3698b2896 \ + --hash=sha256:75e29a90dc319f0ad4d87ba6d20083615a00d8276b51512e04ad7452b5c23b04 \ + --hash=sha256:7942b32a291421460d6a07883033e392167d30724aa84987e6956cd15f1a21b9 \ + --hash=sha256:9235dcd5144a83f9ca6f431bd0eccc46b90e2c22fe27b7f7d77cabb2fb515595 \ + --hash=sha256:97d67983189e2e45550eac194d6234fc38b8c3b5396c153821f2d906ed46e0ce \ + --hash=sha256:9ff42c5620b4e4530609e11afefa4a62ca91fa0abb045a8957e509ef84e54d30 \ + --hash=sha256:a8a0b77e992c64880e6efbe0086fe54dfc0bbd56f72a92d9e48264dcd2a3db98 \ + --hash=sha256:aacb54f7789ede5cbf1d007637f792d3e87f1c9841f57dd51abf89337d1b8472 \ + --hash=sha256:bc59f7ba87972ab236f8669d8ca7400f02a0eadf273ca00e02af64d588046f02 \ + --hash=sha256:cc2bece1737b44d878cc1510ea04469a8073dbbcdd762175168937ae4742dfb3 \ + --hash=sha256:cd3baccea2bc5c38aeb14e5b00167bd4e2373a373a5e4d8d850bd193edad150c \ + --hash=sha256:dad6533411d033b77f5369eafe87af8583178efd4039c41d7515d3336c53b4f1 \ + --hash=sha256:e223a9793522680beae44671b9ed8f6d25bbe5ddf8887e66aebad5e0686049ef \ + --hash=sha256:e473525c28251558337b5c1ad3fa969511e42304524a4e404065e165b084c9e4 \ + --hash=sha256:e4ef09f8997c4be5f3504cefa6b5c6cc3cf648274ce3cede84d4342a35d76db6 \ + --hash=sha256:e6dfc2b6567b1c261739b43d9c59d201c1b89e017afd9e684d85aa7a186c9f7a \ + --hash=sha256:eacad297ea60c72dd280d3353d93fb1dcca952ec11de6bb3c49d12a572ba31dd \ + --hash=sha256:f1158bccbb919da42544a4d3af5d9296a3358539ffa01018307337365a9a0c64 \ + --hash=sha256:f1fec3abaf274cdb85bf3878167cfde5ad4a4d97c68421afda95174de85ba813 \ + --hash=sha256:f96ace1540223f26fbe7c4ebbf8a98e3929a6aa0290c8033d12526847b291c0f \ + --hash=sha256:fbdbe9a849854fe484c00823f45b7baab159bdd4a46075302281998cb8719df5 + # via + # tensorboard + # tensorflow-cpu +h5py==3.7.0 \ + --hash=sha256:03d64fb86bb86b978928bad923b64419a23e836499ec6363e305ad28afd9d287 \ + --hash=sha256:04e2e1e2fc51b8873e972a08d2f89625ef999b1f2d276199011af57bb9fc7851 \ + --hash=sha256:0798a9c0ff45f17d0192e4d7114d734cac9f8b2b2c76dd1d923c4d0923f27bb6 \ + --hash=sha256:0a047fddbe6951bce40e9cde63373c838a978c5e05a011a682db9ba6334b8e85 \ + --hash=sha256:0d8de8cb619fc597da7cf8cdcbf3b7ff8c5f6db836568afc7dc16d21f59b2b49 \ + --hash=sha256:1fcb11a2dc8eb7ddcae08afd8fae02ba10467753a857fa07a404d700a93f3d53 \ + --hash=sha256:3fcf37884383c5da64846ab510190720027dca0768def34dd8dcb659dbe5cbf3 \ + --hash=sha256:43fed4d13743cf02798a9a03a360a88e589d81285e72b83f47d37bb64ed44881 \ + --hash=sha256:63beb8b7b47d0896c50de6efb9a1eaa81dbe211f3767e7dd7db159cea51ba37a \ + --hash=sha256:6776d896fb90c5938de8acb925e057e2f9f28755f67ec3edcbc8344832616c38 \ + --hash=sha256:9e2ad2aa000f5b1e73b5dfe22f358ca46bf1a2b6ca394d9659874d7fc251731a \ + --hash=sha256:9e7535df5ee3dc3e5d1f408fdfc0b33b46bc9b34db82743c82cd674d8239b9ad \ + --hash=sha256:a9351d729ea754db36d175098361b920573fdad334125f86ac1dd3a083355e20 \ + --hash=sha256:c038399ce09a58ff8d89ec3e62f00aa7cb82d14f34e24735b920e2a811a3a426 \ + --hash=sha256:d77af42cb751ad6cc44f11bae73075a07429a5cf2094dfde2b1e716e059b3911 \ + --hash=sha256:e5b7820b75f9519499d76cc708e27242ccfdd9dfb511d6deb98701961d0445aa \ + --hash=sha256:ed43e2cc4f511756fd664fb45d6b66c3cbed4e3bd0f70e29c37809b2ae013c44 \ + --hash=sha256:f084bbe816907dfe59006756f8f2d16d352faff2d107f4ffeb1d8de126fc5dc7 \ + --hash=sha256:f514b24cacdd983e61f8d371edac8c1b780c279d0acb8485639e97339c866073 \ + --hash=sha256:f73307c876af49aa869ec5df1818e9bb0bdcfcf8a5ba773cc45a4fba5a286a5c + # via tensorflow-cpu +idna==3.4 \ + --hash=sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4 \ + --hash=sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2 + # via requests +importlib-metadata==6.0.0 \ + --hash=sha256:7efb448ec9a5e313a57655d35aa54cd3e01b7e1fbcf72dce1bf06119420f5bad \ + --hash=sha256:e354bedeb60efa6affdcc8ae121b73544a7aa74156d047311948f6d711cd378d + # via markdown +keras==2.11.0 \ + --hash=sha256:38c6fff0ea9a8b06a2717736565c92a73c8cd9b1c239e7125ccb188b7848f65e + # via tensorflow-cpu +libclang==14.0.6 \ + --hash=sha256:206d2789e4450a37d054e63b70451a6fc1873466397443fa13de2b3d4adb2796 \ + --hash=sha256:2e4303e04517fcd11173cb2e51a7070eed71e16ef45d4e26a82c5e881cac3d27 \ + --hash=sha256:5dd3c6fca1b007d308a4114afa8e4e9d32f32b2572520701d45fcc626ac5cd6c \ + --hash=sha256:7b06fc76bd1e67c8b04b5719bf2ac5d6a323b289b245dfa9e468561d99538188 \ + --hash=sha256:8791cf3c3b087c373a6d61e9199da7a541da922c9ddcfed1122090586b996d6e \ + --hash=sha256:9052a8284d8846984f6fa826b1d7460a66d3b23a486d782633b42b6e3b418789 \ + --hash=sha256:cfb0e892ebb5dff6bd498ab5778adb8581f26a00fd8347b3c76c989fe2fd04f7 \ + --hash=sha256:e2add1703129b2abe066fb1890afa880870a89fd6ab4ec5d2a7a8dc8d271677e \ + --hash=sha256:e429853939423f276a25140b0b702442d7da9a09e001c05e48df888336947614 \ + --hash=sha256:ea03c12675151837660cdd5dce65bd89320896ac3421efef43a36678f113ce95 + # via tensorflow-cpu +mako==1.2.4 \ + --hash=sha256:c97c79c018b9165ac9922ae4f32da095ffd3c4e6872b45eded42926deea46818 \ + --hash=sha256:d60a3903dc3bb01a18ad6a89cdbe2e4eadc69c0bc8ef1e3773ba53d44c3f7a34 + # via -r third_party/python_requirements.in +markdown==3.4.1 \ + --hash=sha256:08fb8465cffd03d10b9dd34a5c3fea908e20391a2a90b88d66362cb05beed186 \ + --hash=sha256:3b809086bb6efad416156e00a0da66fe47618a5d6918dd688f53f40c8e4cfeff + # via tensorboard +markupsafe==2.1.1 \ + --hash=sha256:0212a68688482dc52b2d45013df70d169f542b7394fc744c02a57374a4207003 \ + --hash=sha256:089cf3dbf0cd6c100f02945abeb18484bd1ee57a079aefd52cffd17fba910b88 \ + --hash=sha256:10c1bfff05d95783da83491be968e8fe789263689c02724e0c691933c52994f5 \ + --hash=sha256:33b74d289bd2f5e527beadcaa3f401e0df0a89927c1559c8566c066fa4248ab7 \ + --hash=sha256:3799351e2336dc91ea70b034983ee71cf2f9533cdff7c14c90ea126bfd95d65a \ + --hash=sha256:3ce11ee3f23f79dbd06fb3d63e2f6af7b12db1d46932fe7bd8afa259a5996603 \ + --hash=sha256:421be9fbf0ffe9ffd7a378aafebbf6f4602d564d34be190fc19a193232fd12b1 \ + --hash=sha256:43093fb83d8343aac0b1baa75516da6092f58f41200907ef92448ecab8825135 \ + --hash=sha256:46d00d6cfecdde84d40e572d63735ef81423ad31184100411e6e3388d405e247 \ + --hash=sha256:4a33dea2b688b3190ee12bd7cfa29d39c9ed176bda40bfa11099a3ce5d3a7ac6 \ + --hash=sha256:4b9fe39a2ccc108a4accc2676e77da025ce383c108593d65cc909add5c3bd601 \ + --hash=sha256:56442863ed2b06d19c37f94d999035e15ee982988920e12a5b4ba29b62ad1f77 \ + --hash=sha256:671cd1187ed5e62818414afe79ed29da836dde67166a9fac6d435873c44fdd02 \ + --hash=sha256:694deca8d702d5db21ec83983ce0bb4b26a578e71fbdbd4fdcd387daa90e4d5e \ + --hash=sha256:6a074d34ee7a5ce3effbc526b7083ec9731bb3cbf921bbe1d3005d4d2bdb3a63 \ + --hash=sha256:6d0072fea50feec76a4c418096652f2c3238eaa014b2f94aeb1d56a66b41403f \ + --hash=sha256:6fbf47b5d3728c6aea2abb0589b5d30459e369baa772e0f37a0320185e87c980 \ + --hash=sha256:7f91197cc9e48f989d12e4e6fbc46495c446636dfc81b9ccf50bb0ec74b91d4b \ + --hash=sha256:86b1f75c4e7c2ac2ccdaec2b9022845dbb81880ca318bb7a0a01fbf7813e3812 \ + --hash=sha256:8dc1c72a69aa7e082593c4a203dcf94ddb74bb5c8a731e4e1eb68d031e8498ff \ + --hash=sha256:8e3dcf21f367459434c18e71b2a9532d96547aef8a871872a5bd69a715c15f96 \ + --hash=sha256:8e576a51ad59e4bfaac456023a78f6b5e6e7651dcd383bcc3e18d06f9b55d6d1 \ + --hash=sha256:96e37a3dc86e80bf81758c152fe66dbf60ed5eca3d26305edf01892257049925 \ + --hash=sha256:97a68e6ada378df82bc9f16b800ab77cbf4b2fada0081794318520138c088e4a \ + --hash=sha256:99a2a507ed3ac881b975a2976d59f38c19386d128e7a9a18b7df6fff1fd4c1d6 \ + --hash=sha256:a49907dd8420c5685cfa064a1335b6754b74541bbb3706c259c02ed65b644b3e \ + --hash=sha256:b09bf97215625a311f669476f44b8b318b075847b49316d3e28c08e41a7a573f \ + --hash=sha256:b7bd98b796e2b6553da7225aeb61f447f80a1ca64f41d83612e6139ca5213aa4 \ + --hash=sha256:b87db4360013327109564f0e591bd2a3b318547bcef31b468a92ee504d07ae4f \ + --hash=sha256:bcb3ed405ed3222f9904899563d6fc492ff75cce56cba05e32eff40e6acbeaa3 \ + --hash=sha256:d4306c36ca495956b6d568d276ac11fdd9c30a36f1b6eb928070dc5360b22e1c \ + --hash=sha256:d5ee4f386140395a2c818d149221149c54849dfcfcb9f1debfe07a8b8bd63f9a \ + --hash=sha256:dda30ba7e87fbbb7eab1ec9f58678558fd9a6b8b853530e176eabd064da81417 \ + --hash=sha256:e04e26803c9c3851c931eac40c695602c6295b8d432cbe78609649ad9bd2da8a \ + --hash=sha256:e1c0b87e09fa55a220f058d1d49d3fb8df88fbfab58558f1198e08c1e1de842a \ + --hash=sha256:e72591e9ecd94d7feb70c1cbd7be7b3ebea3f548870aa91e2732960fa4d57a37 \ + --hash=sha256:e8c843bbcda3a2f1e3c2ab25913c80a3c5376cd00c6e8c4a86a89a28c8dc5452 \ + --hash=sha256:efc1913fd2ca4f334418481c7e595c00aad186563bbc1ec76067848c7ca0a933 \ + --hash=sha256:f121a1420d4e173a5d96e47e9a0c0dcff965afdf1626d28de1460815f7c4ee7a \ + --hash=sha256:fc7b548b17d238737688817ab67deebb30e8073c95749d55538ed473130ec0c7 + # via + # mako + # werkzeug +numpy==1.24.1 \ + --hash=sha256:0044f7d944ee882400890f9ae955220d29b33d809a038923d88e4e01d652acd9 \ + --hash=sha256:0e3463e6ac25313462e04aea3fb8a0a30fb906d5d300f58b3bc2c23da6a15398 \ + --hash=sha256:179a7ef0889ab769cc03573b6217f54c8bd8e16cef80aad369e1e8185f994cd7 \ + --hash=sha256:2386da9a471cc00a1f47845e27d916d5ec5346ae9696e01a8a34760858fe9dd2 \ + --hash=sha256:26089487086f2648944f17adaa1a97ca6aee57f513ba5f1c0b7ebdabbe2b9954 \ + --hash=sha256:28bc9750ae1f75264ee0f10561709b1462d450a4808cd97c013046073ae64ab6 \ + --hash=sha256:28e418681372520c992805bb723e29d69d6b7aa411065f48216d8329d02ba032 \ + --hash=sha256:442feb5e5bada8408e8fcd43f3360b78683ff12a4444670a7d9e9824c1817d36 \ + --hash=sha256:6ec0c021cd9fe732e5bab6401adea5a409214ca5592cd92a114f7067febcba0c \ + --hash=sha256:7094891dcf79ccc6bc2a1f30428fa5edb1e6fb955411ffff3401fb4ea93780a8 \ + --hash=sha256:84e789a085aabef2f36c0515f45e459f02f570c4b4c4c108ac1179c34d475ed7 \ + --hash=sha256:87a118968fba001b248aac90e502c0b13606721b1343cdaddbc6e552e8dfb56f \ + --hash=sha256:8e669fbdcdd1e945691079c2cae335f3e3a56554e06bbd45d7609a6cf568c700 \ + --hash=sha256:ad2925567f43643f51255220424c23d204024ed428afc5aad0f86f3ffc080086 \ + --hash=sha256:b0677a52f5d896e84414761531947c7a330d1adc07c3a4372262f25d84af7bf7 \ + --hash=sha256:b07b40f5fb4fa034120a5796288f24c1fe0e0580bbfff99897ba6267af42def2 \ + --hash=sha256:b09804ff570b907da323b3d762e74432fb07955701b17b08ff1b5ebaa8cfe6a9 \ + --hash=sha256:b162ac10ca38850510caf8ea33f89edcb7b0bb0dfa5592d59909419986b72407 \ + --hash=sha256:b31da69ed0c18be8b77bfce48d234e55d040793cebb25398e2a7d84199fbc7e2 \ + --hash=sha256:caf65a396c0d1f9809596be2e444e3bd4190d86d5c1ce21f5fc4be60a3bc5b36 \ + --hash=sha256:cfa1161c6ac8f92dea03d625c2d0c05e084668f4a06568b77a25a89111621566 \ + --hash=sha256:dae46bed2cb79a58d6496ff6d8da1e3b95ba09afeca2e277628171ca99b99db1 \ + --hash=sha256:ddc7ab52b322eb1e40521eb422c4e0a20716c271a306860979d450decbb51b8e \ + --hash=sha256:de92efa737875329b052982e37bd4371d52cabf469f83e7b8be9bb7752d67e51 \ + --hash=sha256:e274f0f6c7efd0d577744f52032fdd24344f11c5ae668fe8d01aac0422611df1 \ + --hash=sha256:ed5fb71d79e771ec930566fae9c02626b939e37271ec285e9efaf1b5d4370e7d \ + --hash=sha256:ef85cf1f693c88c1fd229ccd1055570cb41cdf4875873b7728b6301f12cd05bf \ + --hash=sha256:f1b739841821968798947d3afcefd386fa56da0caf97722a5de53e07c4ccedc7 + # via + # -r third_party/python_requirements.in + # h5py + # opt-einsum + # tensorboard + # tensorflow-cpu +oauthlib==3.2.2 \ + --hash=sha256:8139f29aac13e25d502680e9e19963e83f16838d48a0d71c287fe40e7067fbca \ + --hash=sha256:9859c40929662bec5d64f34d01c99e093149682a3f38915dc0655d5a633dd918 + # via requests-oauthlib +opt-einsum==3.3.0 \ + --hash=sha256:2455e59e3947d3c275477df7f5205b30635e266fe6dc300e3d9f9646bfcea147 \ + --hash=sha256:59f6475f77bbc37dcf7cd748519c0ec60722e91e63ca114e68821c0c54a46549 + # via tensorflow-cpu +packaging==22.0 \ + --hash=sha256:2198ec20bd4c017b8f9717e00f0c8714076fc2fd93816750ab48e2c41de2cfd3 \ + --hash=sha256:957e2148ba0e1a3b282772e791ef1d8083648bc131c8ab0c1feba110ce1146c3 + # via tensorflow-cpu +pillow==9.4.0 \ + --hash=sha256:0845adc64fe9886db00f5ab68c4a8cd933ab749a87747555cec1c95acea64b0b \ + --hash=sha256:0884ba7b515163a1a05440a138adeb722b8a6ae2c2b33aea93ea3118dd3a899e \ + --hash=sha256:09b89ddc95c248ee788328528e6a2996e09eaccddeeb82a5356e92645733be35 \ + --hash=sha256:0dd4c681b82214b36273c18ca7ee87065a50e013112eea7d78c7a1b89a739153 \ + --hash=sha256:0e51f608da093e5d9038c592b5b575cadc12fd748af1479b5e858045fff955a9 \ + --hash=sha256:0f3269304c1a7ce82f1759c12ce731ef9b6e95b6df829dccd9fe42912cc48569 \ + --hash=sha256:16a8df99701f9095bea8a6c4b3197da105df6f74e6176c5b410bc2df2fd29a57 \ + --hash=sha256:19005a8e58b7c1796bc0167862b1f54a64d3b44ee5d48152b06bb861458bc0f8 \ + --hash=sha256:28676836c7796805914b76b1837a40f76827ee0d5398f72f7dcc634bae7c6264 \ + --hash=sha256:2968c58feca624bb6c8502f9564dd187d0e1389964898f5e9e1fbc8533169157 \ + --hash=sha256:3fa1284762aacca6dc97474ee9c16f83990b8eeb6697f2ba17140d54b453e133 \ + --hash=sha256:451f10ef963918e65b8869e17d67db5e2f4ab40e716ee6ce7129b0cde2876eab \ + --hash=sha256:46c259e87199041583658457372a183636ae8cd56dbf3f0755e0f376a7f9d0e6 \ + --hash=sha256:46f39cab8bbf4a384ba7cb0bc8bae7b7062b6a11cfac1ca4bc144dea90d4a9f5 \ + --hash=sha256:519e14e2c49fcf7616d6d2cfc5c70adae95682ae20f0395e9280db85e8d6c4df \ + --hash=sha256:53dcb50fbdc3fb2c55431a9b30caeb2f7027fcd2aeb501459464f0214200a503 \ + --hash=sha256:54614444887e0d3043557d9dbc697dbb16cfb5a35d672b7a0fcc1ed0cf1c600b \ + --hash=sha256:575d8912dca808edd9acd6f7795199332696d3469665ef26163cd090fa1f8bfa \ + --hash=sha256:5dd5a9c3091a0f414a963d427f920368e2b6a4c2f7527fdd82cde8ef0bc7a327 \ + --hash=sha256:5f532a2ad4d174eb73494e7397988e22bf427f91acc8e6ebf5bb10597b49c493 \ + --hash=sha256:60e7da3a3ad1812c128750fc1bc14a7ceeb8d29f77e0a2356a8fb2aa8925287d \ + --hash=sha256:653d7fb2df65efefbcbf81ef5fe5e5be931f1ee4332c2893ca638c9b11a409c4 \ + --hash=sha256:6663977496d616b618b6cfa43ec86e479ee62b942e1da76a2c3daa1c75933ef4 \ + --hash=sha256:6abfb51a82e919e3933eb137e17c4ae9c0475a25508ea88993bb59faf82f3b35 \ + --hash=sha256:6c6b1389ed66cdd174d040105123a5a1bc91d0aa7059c7261d20e583b6d8cbd2 \ + --hash=sha256:6d9dfb9959a3b0039ee06c1a1a90dc23bac3b430842dcb97908ddde05870601c \ + --hash=sha256:765cb54c0b8724a7c12c55146ae4647e0274a839fb6de7bcba841e04298e1011 \ + --hash=sha256:7a21222644ab69ddd9967cfe6f2bb420b460dae4289c9d40ff9a4896e7c35c9a \ + --hash=sha256:7ac7594397698f77bce84382929747130765f66406dc2cd8b4ab4da68ade4c6e \ + --hash=sha256:7cfc287da09f9d2a7ec146ee4d72d6ea1342e770d975e49a8621bf54eaa8f30f \ + --hash=sha256:847b114580c5cc9ebaf216dd8c8dbc6b00a3b7ab0131e173d7120e6deade1f57 \ + --hash=sha256:8f127e7b028900421cad64f51f75c051b628db17fb00e099eb148761eed598c9 \ + --hash=sha256:94cdff45173b1919350601f82d61365e792895e3c3a3443cf99819e6fbf717a5 \ + --hash=sha256:9a3049a10261d7f2b6514d35bbb7a4dfc3ece4c4de14ef5876c4b7a23a0e566d \ + --hash=sha256:a1c2d7780448eb93fbcc3789bf3916aa5720d942e37945f4056680317f1cd23e \ + --hash=sha256:a2e0f87144fcbbe54297cae708c5e7f9da21a4646523456b00cc956bd4c65815 \ + --hash=sha256:a4dfdae195335abb4e89cc9762b2edc524f3c6e80d647a9a81bf81e17e3fb6f0 \ + --hash=sha256:a96e6e23f2b79433390273eaf8cc94fec9c6370842e577ab10dabdcc7ea0a66b \ + --hash=sha256:aabdab8ec1e7ca7f1434d042bf8b1e92056245fb179790dc97ed040361f16bfd \ + --hash=sha256:b222090c455d6d1a64e6b7bb5f4035c4dff479e22455c9eaa1bdd4c75b52c80c \ + --hash=sha256:b52ff4f4e002f828ea6483faf4c4e8deea8d743cf801b74910243c58acc6eda3 \ + --hash=sha256:b9b752ab91e78234941e44abdecc07f1f0d8f51fb62941d32995b8161f68cfe5 \ + --hash=sha256:ba6612b6548220ff5e9df85261bddc811a057b0b465a1226b39bfb8550616aee \ + --hash=sha256:bd752c5ff1b4a870b7661234694f24b1d2b9076b8bf337321a814c612665f343 \ + --hash=sha256:c3c4ed2ff6760e98d262e0cc9c9a7f7b8a9f61aa4d47c58835cdaf7b0b8811bb \ + --hash=sha256:c5c1362c14aee73f50143d74389b2c158707b4abce2cb055b7ad37ce60738d47 \ + --hash=sha256:cb362e3b0976dc994857391b776ddaa8c13c28a16f80ac6522c23d5257156bed \ + --hash=sha256:d197df5489004db87d90b918033edbeee0bd6df3848a204bca3ff0a903bef837 \ + --hash=sha256:d3b56206244dc8711f7e8b7d6cad4663917cd5b2d950799425076681e8766286 \ + --hash=sha256:d5b2f8a31bd43e0f18172d8ac82347c8f37ef3e0b414431157718aa234991b28 \ + --hash=sha256:d7081c084ceb58278dd3cf81f836bc818978c0ccc770cbbb202125ddabec6628 \ + --hash=sha256:db74f5562c09953b2c5f8ec4b7dfd3f5421f31811e97d1dbc0a7c93d6e3a24df \ + --hash=sha256:df41112ccce5d47770a0c13651479fbcd8793f34232a2dd9faeccb75eb5d0d0d \ + --hash=sha256:e1339790c083c5a4de48f688b4841f18df839eb3c9584a770cbd818b33e26d5d \ + --hash=sha256:e621b0246192d3b9cb1dc62c78cfa4c6f6d2ddc0ec207d43c0dedecb914f152a \ + --hash=sha256:e8c5cf126889a4de385c02a2c3d3aba4b00f70234bfddae82a5eaa3ee6d5e3e6 \ + --hash=sha256:e9d7747847c53a16a729b6ee5e737cf170f7a16611c143d95aa60a109a59c336 \ + --hash=sha256:eaef5d2de3c7e9b21f1e762f289d17b726c2239a42b11e25446abf82b26ac132 \ + --hash=sha256:ed3e4b4e1e6de75fdc16d3259098de7c6571b1a6cc863b1a49e7d3d53e036070 \ + --hash=sha256:ef21af928e807f10bf4141cad4746eee692a0dd3ff56cfb25fce076ec3cc8abe \ + --hash=sha256:f09598b416ba39a8f489c124447b007fe865f786a89dbfa48bb5cf395693132a \ + --hash=sha256:f6e78171be3fb7941f9910ea15b4b14ec27725865a73c15277bc39f5ca4f8391 \ + --hash=sha256:f715c32e774a60a337b2bb8ad9839b4abf75b267a0f18806f6f4f5f1688c4b5a + # via -r third_party/python_requirements.in +protobuf==3.19.6 \ + --hash=sha256:010be24d5a44be7b0613750ab40bc8b8cedc796db468eae6c779b395f50d1fa1 \ + --hash=sha256:0469bc66160180165e4e29de7f445e57a34ab68f49357392c5b2f54c656ab25e \ + --hash=sha256:0c0714b025ec057b5a7600cb66ce7c693815f897cfda6d6efb58201c472e3437 \ + --hash=sha256:11478547958c2dfea921920617eb457bc26867b0d1aa065ab05f35080c5d9eb6 \ + --hash=sha256:14082457dc02be946f60b15aad35e9f5c69e738f80ebbc0900a19bc83734a5a4 \ + --hash=sha256:2b2d2913bcda0e0ec9a784d194bc490f5dc3d9d71d322d070b11a0ade32ff6ba \ + --hash=sha256:30a15015d86b9c3b8d6bf78d5b8c7749f2512c29f168ca259c9d7727604d0e39 \ + --hash=sha256:30f5370d50295b246eaa0296533403961f7e64b03ea12265d6dfce3a391d8992 \ + --hash=sha256:347b393d4dd06fb93a77620781e11c058b3b0a5289262f094379ada2920a3730 \ + --hash=sha256:4bc98de3cdccfb5cd769620d5785b92c662b6bfad03a202b83799b6ed3fa1fa7 \ + --hash=sha256:5057c64052a1f1dd7d4450e9aac25af6bf36cfbfb3a1cd89d16393a036c49157 \ + --hash=sha256:559670e006e3173308c9254d63facb2c03865818f22204037ab76f7a0ff70b5f \ + --hash=sha256:5a0d7539a1b1fb7e76bf5faa0b44b30f812758e989e59c40f77a7dab320e79b9 \ + --hash=sha256:5f5540d57a43042389e87661c6eaa50f47c19c6176e8cf1c4f287aeefeccb5c4 \ + --hash=sha256:7a552af4dc34793803f4e735aabe97ffc45962dfd3a237bdde242bff5a3de684 \ + --hash=sha256:84a04134866861b11556a82dd91ea6daf1f4925746b992f277b84013a7cc1229 \ + --hash=sha256:878b4cd080a21ddda6ac6d1e163403ec6eea2e206cf225982ae04567d39be7b0 \ + --hash=sha256:90b0d02163c4e67279ddb6dc25e063db0130fc299aefabb5d481053509fae5c8 \ + --hash=sha256:91d5f1e139ff92c37e0ff07f391101df77e55ebb97f46bbc1535298d72019462 \ + --hash=sha256:a8ce5ae0de28b51dff886fb922012dad885e66176663950cb2344c0439ecb473 \ + --hash=sha256:aa3b82ca1f24ab5326dcf4ea00fcbda703e986b22f3d27541654f749564d778b \ + --hash=sha256:bb6776bd18f01ffe9920e78e03a8676530a5d6c5911934c6a1ac6eb78973ecb6 \ + --hash=sha256:bbf5cea5048272e1c60d235c7bd12ce1b14b8a16e76917f371c718bd3005f045 \ + --hash=sha256:c0ccd3f940fe7f3b35a261b1dd1b4fc850c8fde9f74207015431f174be5976b3 \ + --hash=sha256:d0b635cefebd7a8a0f92020562dead912f81f401af7e71f16bf9506ff3bdbb38 + # via + # -r third_party/python_requirements.in + # tensorboard + # tensorflow-cpu +pyasn1==0.4.8 \ + --hash=sha256:39c7e2ec30515947ff4e87fb6f456dfc6e84857d34be479c9d4a4ba4bf46aa5d \ + --hash=sha256:aef77c9fb94a3ac588e87841208bdec464471d9871bd5050a287cc9a475cd0ba + # via + # pyasn1-modules + # rsa +pyasn1-modules==0.2.8 \ + --hash=sha256:905f84c712230b2c592c19470d3ca8d552de726050d1d1716282a1f6146be65e \ + --hash=sha256:a50b808ffeb97cb3601dd25981f6b016cbb3d31fbf57a8b8a87428e6158d0c74 + # via google-auth +requests==2.28.1 \ + --hash=sha256:7c5599b102feddaa661c826c56ab4fee28bfd17f5abca1ebbe3e7f19d7c97983 \ + --hash=sha256:8fefa2a1a1365bf5520aac41836fbee479da67864514bdb821f31ce07ce65349 + # via + # requests-oauthlib + # tensorboard +requests-oauthlib==1.3.1 \ + --hash=sha256:2577c501a2fb8d05a304c09d090d6e47c306fef15809d102b327cf8364bddab5 \ + --hash=sha256:75beac4a47881eeb94d5ea5d6ad31ef88856affe2332b9aafb52c6452ccf0d7a + # via google-auth-oauthlib +rsa==4.9 \ + --hash=sha256:90260d9058e514786967344d0ef75fa8727eed8a7d2e43ce9f4bcf1b536174f7 \ + --hash=sha256:e38464a49c6c85d7f1351b0126661487a7e0a14a50f1675ec50eb34d4f20ef21 + # via google-auth +six==1.16.0 \ + --hash=sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 \ + --hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 + # via + # astunparse + # google-auth + # google-pasta + # tensorflow-cpu +tensorboard==2.11.0 \ + --hash=sha256:a0e592ee87962e17af3f0dce7faae3fbbd239030159e9e625cce810b7e35c53d + # via tensorflow-cpu +tensorboard-data-server==0.6.1 \ + --hash=sha256:809fe9887682d35c1f7d1f54f0f40f98bb1f771b14265b453ca051e2ce58fca7 \ + --hash=sha256:d8237580755e58eff68d1f3abefb5b1e39ae5c8b127cc40920f9c4fb33f4b98a \ + --hash=sha256:fa8cef9be4fcae2f2363c88176638baf2da19c5ec90addb49b1cde05c95c88ee + # via tensorboard +tensorboard-plugin-wit==1.8.1 \ + --hash=sha256:ff26bdd583d155aa951ee3b152b3d0cffae8005dc697f72b44a8e8c2a77a8cbe + # via tensorboard +tensorflow-cpu==2.11.0 \ + --hash=sha256:08cc63ea4728ac0246063cef4f79911367c194515a45cc247ac05eb6684cd4aa \ + --hash=sha256:0c9bbd54abc00858bd4722ddaa6ba6469f9730d626786b7bd19a544defb61f11 \ + --hash=sha256:1954bccbd78681c3df0d4ac9f020a0ee44b17bd6b5962ebb8848479879f45bc7 \ + --hash=sha256:57aee7f2f3eed2f6e26bc3695c967fa889c98cefb4b8bfb2f47e171d96c13a0a \ + --hash=sha256:6bb3f3a8b6a96025fdffde2526ca2c58bb36410a74163a498ca9b2d68d3ccfcf \ + --hash=sha256:8a125157fdb2b1191ca6321e78127f032ce06ae17349e9affd75595782cca4cf \ + --hash=sha256:91bac68200ddbdff757c9d3aec8a03ad12b5fef21b937ff287721076e43b58b4 \ + --hash=sha256:b318429219392b2e73f72099db5b92cfd516171c1e10e4ef37b0f53166f627da \ + --hash=sha256:c302c1b9728b4ce32eca8041e1375d51896832d84c84ce8eeb2577b73ffb0392 \ + --hash=sha256:d47df7bf4e684639d3d83cc27d150c6d29b8bd5f0586ca0a9a040af6840a92b0 \ + --hash=sha256:d5e3c0666abdc0d9c63790238a1b91a41f2e622b488df7276750f61351b12ccc \ + --hash=sha256:fdcc9f733285bb1c917cde6731edcbf2ecc5ca4bd8c6a4c168a7f478e4056654 + # via -r third_party/python_requirements.in +tensorflow-estimator==2.11.0 \ + --hash=sha256:ea3b64acfff3d9a244f06178c9bdedcbdd3f125b67d0888dba8229498d06468b + # via tensorflow-cpu +tensorflow-io-gcs-filesystem==0.29.0 \ + --hash=sha256:049b21d5056f57952b0450c2bac9c2bf2fabc4bbb571470abf0cba4243a41dfe \ + --hash=sha256:571fc6ba4960f3a749a362d487b60e248eb43f0abcfb0ace4f04ddb91ae04faf \ + --hash=sha256:630372fe2f1c05b57c4ad0c9050b570bc67e474ec513cf046832f8889002fab7 \ + --hash=sha256:655af38843d83ef322db190d162e21060ca143935a04f4b64b29f60c1c4dc073 \ + --hash=sha256:6617054b8ac75cf2f19ec24ddf3a696a500758d1f755b847f3ba42aec6ad7b9e \ + --hash=sha256:7ff4b18f1a74e1a56603fa204cf82b1af5b24ad18c579692c487b4fb4a2baec8 \ + --hash=sha256:8543e14b2f32771e7a7eca7a3d34a8fbdf1f4e9ae7d346bcacff011f43c693cb \ + --hash=sha256:931e225b406d67d0a8a8f549242a0a1d173a02e0179d86b88351de19c393e06f \ + --hash=sha256:975b674d7816c08cf47a50cfc5b73a36ca0b3ef32d8e37a788b7cae38b9e1549 \ + --hash=sha256:9db8dc3f2c4ddfdf02f33a492600be35d0bca085aa12121a5feef173e6b5914e \ + --hash=sha256:a6297b68677a17ce388594fcf76c70718b837dba59e858280898521a858a8e4c \ + --hash=sha256:bcb7405474ed136b3a2e2181a732968c52ba9f35a03fe296acc9f1ec4e7044ee \ + --hash=sha256:c826154e0c6bd9a1a0395a1b985976ac255a3d79d147d3eb10343b6d15710267 \ + --hash=sha256:d0736853c35030e027c0f9577f07355e5cd21463321008ef4ee8b390f913fdd6 \ + --hash=sha256:d8eb242b118721c8a23d598af69c25ad450c1e18bd1cd7ef7e8274ae0e7781ca \ + --hash=sha256:e114d672fc565985468d6a26a1e54e2f0002ab76c711f49a56d948ad05718c80 \ + --hash=sha256:ec87a475a4024bc8c4427c6cbeba009fd76b1b95ad764755fdf958c234470acd \ + --hash=sha256:ef5656932c1f4d4e4d366cdae469562344ecd38cd51de70ebf60e68ee0834da1 \ + --hash=sha256:ff107ac28d56bdd4c50ac69b18cc237d3a9342be8c2d11e458e19a0fac31fb9d + # via tensorflow-cpu +termcolor==2.1.1 \ + --hash=sha256:67cee2009adc6449c650f6bcf3bdeed00c8ba53a8cda5362733c53e0a39fb70b \ + --hash=sha256:fa852e957f97252205e105dd55bbc23b419a70fec0085708fc0515e399f304fd + # via tensorflow-cpu +typing-extensions==4.4.0 \ + --hash=sha256:1511434bb92bf8dd198c12b1cc812e800d4181cfcb867674e0f8279cc93087aa \ + --hash=sha256:16fa4864408f655d35ec496218b85f79b3437c829e93320c7c9215ccfd92489e + # via tensorflow-cpu +urllib3==1.26.13 \ + --hash=sha256:47cc05d99aaa09c9e72ed5809b60e7ba354e64b59c9c173ac3018642d8bb41fc \ + --hash=sha256:c083dd0dce68dbfbe1129d5271cb90f9447dea7d52097c6e0126120c521ddea8 + # via requests +werkzeug==2.2.2 \ + --hash=sha256:7ea2d48322cc7c0f8b3a215ed73eabd7b5d75d0b50e31ab006286ccff9e00b8f \ + --hash=sha256:f979ab81f58d7318e064e99c4506445d60135ac5cd2e177a2de0089bfd4c9bd5 + # via tensorboard +wheel==0.38.4 \ + --hash=sha256:965f5259b566725405b05e7cf774052044b1ed30119b5d586b2703aafe8719ac \ + --hash=sha256:b60533f3f5d530e971d6737ca6d58681ee434818fab630c83a734bb10c083ce8 + # via + # astunparse + # tensorboard +wrapt==1.14.1 \ + --hash=sha256:00b6d4ea20a906c0ca56d84f93065b398ab74b927a7a3dbd470f6fc503f95dc3 \ + --hash=sha256:01c205616a89d09827986bc4e859bcabd64f5a0662a7fe95e0d359424e0e071b \ + --hash=sha256:02b41b633c6261feff8ddd8d11c711df6842aba629fdd3da10249a53211a72c4 \ + --hash=sha256:07f7a7d0f388028b2df1d916e94bbb40624c59b48ecc6cbc232546706fac74c2 \ + --hash=sha256:11871514607b15cfeb87c547a49bca19fde402f32e2b1c24a632506c0a756656 \ + --hash=sha256:1b376b3f4896e7930f1f772ac4b064ac12598d1c38d04907e696cc4d794b43d3 \ + --hash=sha256:21ac0156c4b089b330b7666db40feee30a5d52634cc4560e1905d6529a3897ff \ + --hash=sha256:257fd78c513e0fb5cdbe058c27a0624c9884e735bbd131935fd49e9fe719d310 \ + --hash=sha256:2b39d38039a1fdad98c87279b48bc5dce2c0ca0d73483b12cb72aa9609278e8a \ + --hash=sha256:2cf71233a0ed05ccdabe209c606fe0bac7379fdcf687f39b944420d2a09fdb57 \ + --hash=sha256:2fe803deacd09a233e4762a1adcea5db5d31e6be577a43352936179d14d90069 \ + --hash=sha256:3232822c7d98d23895ccc443bbdf57c7412c5a65996c30442ebe6ed3df335383 \ + --hash=sha256:34aa51c45f28ba7f12accd624225e2b1e5a3a45206aa191f6f9aac931d9d56fe \ + --hash=sha256:36f582d0c6bc99d5f39cd3ac2a9062e57f3cf606ade29a0a0d6b323462f4dd87 \ + --hash=sha256:380a85cf89e0e69b7cfbe2ea9f765f004ff419f34194018a6827ac0e3edfed4d \ + --hash=sha256:40e7bc81c9e2b2734ea4bc1aceb8a8f0ceaac7c5299bc5d69e37c44d9081d43b \ + --hash=sha256:43ca3bbbe97af00f49efb06e352eae40434ca9d915906f77def219b88e85d907 \ + --hash=sha256:4fcc4649dc762cddacd193e6b55bc02edca674067f5f98166d7713b193932b7f \ + --hash=sha256:5a0f54ce2c092aaf439813735584b9537cad479575a09892b8352fea5e988dc0 \ + --hash=sha256:5a9a0d155deafd9448baff28c08e150d9b24ff010e899311ddd63c45c2445e28 \ + --hash=sha256:5b02d65b9ccf0ef6c34cba6cf5bf2aab1bb2f49c6090bafeecc9cd81ad4ea1c1 \ + --hash=sha256:60db23fa423575eeb65ea430cee741acb7c26a1365d103f7b0f6ec412b893853 \ + --hash=sha256:642c2e7a804fcf18c222e1060df25fc210b9c58db7c91416fb055897fc27e8cc \ + --hash=sha256:6a9a25751acb379b466ff6be78a315e2b439d4c94c1e99cb7266d40a537995d3 \ + --hash=sha256:6b1a564e6cb69922c7fe3a678b9f9a3c54e72b469875aa8018f18b4d1dd1adf3 \ + --hash=sha256:6d323e1554b3d22cfc03cd3243b5bb815a51f5249fdcbb86fda4bf62bab9e164 \ + --hash=sha256:6e743de5e9c3d1b7185870f480587b75b1cb604832e380d64f9504a0535912d1 \ + --hash=sha256:709fe01086a55cf79d20f741f39325018f4df051ef39fe921b1ebe780a66184c \ + --hash=sha256:7b7c050ae976e286906dd3f26009e117eb000fb2cf3533398c5ad9ccc86867b1 \ + --hash=sha256:7d2872609603cb35ca513d7404a94d6d608fc13211563571117046c9d2bcc3d7 \ + --hash=sha256:7ef58fb89674095bfc57c4069e95d7a31cfdc0939e2a579882ac7d55aadfd2a1 \ + --hash=sha256:80bb5c256f1415f747011dc3604b59bc1f91c6e7150bd7db03b19170ee06b320 \ + --hash=sha256:81b19725065dcb43df02b37e03278c011a09e49757287dca60c5aecdd5a0b8ed \ + --hash=sha256:833b58d5d0b7e5b9832869f039203389ac7cbf01765639c7309fd50ef619e0b1 \ + --hash=sha256:88bd7b6bd70a5b6803c1abf6bca012f7ed963e58c68d76ee20b9d751c74a3248 \ + --hash=sha256:8ad85f7f4e20964db4daadcab70b47ab05c7c1cf2a7c1e51087bfaa83831854c \ + --hash=sha256:8c0ce1e99116d5ab21355d8ebe53d9460366704ea38ae4d9f6933188f327b456 \ + --hash=sha256:8d649d616e5c6a678b26d15ece345354f7c2286acd6db868e65fcc5ff7c24a77 \ + --hash=sha256:903500616422a40a98a5a3c4ff4ed9d0066f3b4c951fa286018ecdf0750194ef \ + --hash=sha256:9736af4641846491aedb3c3f56b9bc5568d92b0692303b5a305301a95dfd38b1 \ + --hash=sha256:988635d122aaf2bdcef9e795435662bcd65b02f4f4c1ae37fbee7401c440b3a7 \ + --hash=sha256:9cca3c2cdadb362116235fdbd411735de4328c61425b0aa9f872fd76d02c4e86 \ + --hash=sha256:9e0fd32e0148dd5dea6af5fee42beb949098564cc23211a88d799e434255a1f4 \ + --hash=sha256:9f3e6f9e05148ff90002b884fbc2a86bd303ae847e472f44ecc06c2cd2fcdb2d \ + --hash=sha256:a85d2b46be66a71bedde836d9e41859879cc54a2a04fad1191eb50c2066f6e9d \ + --hash=sha256:a9a52172be0b5aae932bef82a79ec0a0ce87288c7d132946d645eba03f0ad8a8 \ + --hash=sha256:aa31fdcc33fef9eb2552cbcbfee7773d5a6792c137b359e82879c101e98584c5 \ + --hash=sha256:b014c23646a467558be7da3d6b9fa409b2c567d2110599b7cf9a0c5992b3b471 \ + --hash=sha256:b21bb4c09ffabfa0e85e3a6b623e19b80e7acd709b9f91452b8297ace2a8ab00 \ + --hash=sha256:b5901a312f4d14c59918c221323068fad0540e34324925c8475263841dbdfe68 \ + --hash=sha256:b9b7a708dd92306328117d8c4b62e2194d00c365f18eff11a9b53c6f923b01e3 \ + --hash=sha256:d1967f46ea8f2db647c786e78d8cc7e4313dbd1b0aca360592d8027b8508e24d \ + --hash=sha256:d52a25136894c63de15a35bc0bdc5adb4b0e173b9c0d07a2be9d3ca64a332735 \ + --hash=sha256:d77c85fedff92cf788face9bfa3ebaa364448ebb1d765302e9af11bf449ca36d \ + --hash=sha256:d79d7d5dc8a32b7093e81e97dad755127ff77bcc899e845f41bf71747af0c569 \ + --hash=sha256:dbcda74c67263139358f4d188ae5faae95c30929281bc6866d00573783c422b7 \ + --hash=sha256:ddaea91abf8b0d13443f6dac52e89051a5063c7d014710dcb4d4abb2ff811a59 \ + --hash=sha256:dee0ce50c6a2dd9056c20db781e9c1cfd33e77d2d569f5d1d9321c641bb903d5 \ + --hash=sha256:dee60e1de1898bde3b238f18340eec6148986da0455d8ba7848d50470a7a32fb \ + --hash=sha256:e2f83e18fe2f4c9e7db597e988f72712c0c3676d337d8b101f6758107c42425b \ + --hash=sha256:e3fb1677c720409d5f671e39bac6c9e0e422584e5f518bfd50aa4cbbea02433f \ + --hash=sha256:ee2b1b1769f6707a8a445162ea16dddf74285c3964f605877a20e38545c3c462 \ + --hash=sha256:ee6acae74a2b91865910eef5e7de37dc6895ad96fa23603d1d27ea69df545015 \ + --hash=sha256:ef3f72c9666bba2bab70d2a8b79f2c6d2c1a42a7f7e2b0ec83bb2f9e383950af + # via tensorflow-cpu +yapf==0.32.0 \ + --hash=sha256:8fea849025584e486fd06d6ba2bed717f396080fd3cc236ba10cb97c4c51cf32 \ + --hash=sha256:a3f5085d37ef7e3e004c4ba9f9b3e40c54ff1901cd111f05145ae313a7c67d1b + # via -r third_party/python_requirements.in +zipp==3.11.0 \ + --hash=sha256:83a28fcb75844b5c0cdaf5aa4003c2d728c77e05f5aeabe8e95e56727005fbaa \ + --hash=sha256:a7a22e05929290a67401440b39690ae6563279bced5f314609d9d03798f56766 + # via importlib-metadata + +# The following packages are considered to be unsafe in a requirements file: +setuptools==65.6.3 \ + --hash=sha256:57f6f22bde4e042978bcd50176fdb381d7c21a9efa4041202288d3737a0c6a54 \ + --hash=sha256:a7620757bf984b58deaf32fc8a4577a9bbc0850cf92c20e1ce41c38c19e5fb75 + # via + # tensorboard + # tensorflow-cpu diff --git a/third_party/requirements.txt b/third_party/requirements.txt deleted file mode 100644 index ec7b7e7a..00000000 --- a/third_party/requirements.txt +++ /dev/null @@ -1,6 +0,0 @@ -tensorflow-cpu -numpy -mako -pillow -yapf -protobuf