tensorflow 0.21.0

Rust language bindings for TensorFlow.
Documentation
#!/bin/bash

set -e

function run {
    echo "----------------------------------------------------------------------"
    echo "Running $@"
    "$@"
    echo
}

# Make sure the Tensorflow version in the -sys build script matches the one in
# the run-valgrind script.
version_build_script=`grep "const VERSION" tensorflow-sys/build.rs | sed 's|.*"\([^"]*\)";|\1|g'`
version_run_valgrind=`grep "tensorflow_version=" run-valgrind | sed "s|.*=\(.*\)|\1|g"`
version_requirements=`grep "tensorflow\s*=" .github/workflows/requirements.txt | sed "s|.*== \(.*\)|\1|g"`
if [[ "${version_build_script}" != "${version_run_valgrind}" || \
    "${version_build_script}" != "${version_requirements}" ]]; then
    echo "ERROR: Tensorflow version specified in build script does not match the one in the"
    echo "       valgrind run script."
    echo "       tensorflow-sys/build.rs: ${version_build_script}"
    echo "       run-valgrind: ${version_run_valgrind}"
    echo "       ./github/workflows/requirements.txt: ${version_requirements}"
    exit 1
fi

# Make sure the crate version matches the one in README.md.
version_tensorflow_crate=`grep "^version =" Cargo.toml | sed 's|.*= "\(.*\)"|\1|g'`
version_tensorflow_readme=`sed -En 's|tensorflow *= *"([^"]*)"|\1|p' < README.md`
version_tensorflow_readme2=`sed -En 's|tensorflow *= *\{ *version *= *"([^"]*)".*$|\1|p' < README.md`
if [[ "${version_tensorflow_crate}" != "${version_tensorflow_readme}" || \
          "${version_tensorflow_crate}" != "${version_tensorflow_readme2}" ]]; then
    echo "ERROR: tensorflow crate version does not match the ones in README.md."
    echo "       Cargo.toml: ${version_tensorflow_crate}"
    echo "       README.md: ${version_tensorflow_readme}"
    echo "       README.md: ${version_tensorflow_readme2}"
    exit 1
fi

# Make sure the crate version matches the one in README.md for tensorflow-sys.
version_tensorflow_sys_crate=`grep "^version =" tensorflow-sys/Cargo.toml | sed 's|.*= "\(.*\)"|\1|g'`
version_tensorflow_sys_readme=`sed -En 's|tensorflow-sys *= *\{ *version *= *"([^"]*)".*$|\1|p' < tensorflow-sys/README.md`
if [[ "${version_tensorflow_sys_crate}" != "${version_tensorflow_sys_readme}" ]]; then
    echo "ERROR: tensorflow-sys crate version does not match the one in README.md."
    echo "       Cargo.toml: ${version_tensorflow_sys_crate}"
    echo "       README.md: ${version_tensorflow_sys_readme}"
    exit 1
fi

run python3 examples/mobilenetv3/create_model.py
# TODO(#391): Re-enable: (cd test_resources/library && ./build-test-op)
run cargo fmt --all -- --check
run cargo test -vv -j 2
run cargo test -vv -j 2 --features eager
run cargo test -vv -j 2 --features tensorflow_unstable
run cargo test -vv -j 2 --features ndarray
run cargo run --example regression
run cargo run --example xor
run cargo run --features tensorflow_unstable --example expressions
run cargo run --features eager --example mobilenetv3
run cargo doc -vv --features experimental,tensorflow_unstable,ndarray,eager
run cargo doc -vv --features experimental,tensorflow_unstable,ndarray,eager,private-docs-rs
# TODO(#66): Re-enable: (cd tensorflow-sys && cargo test -vv -j 1)
(cd tensorflow-sys && run cargo run --example multiplication)
(cd tensorflow-sys && run cargo run --example tf_version)
(cd tensorflow-sys && run cargo doc -vv)

run cargo clippy
(cd tensorflow-sys && run cargo clippy)
(cd tensorflow-op-codegen && run cargo clippy)
(cd tensorflow-proto-codegen && run cargo clippy)
(cd tensorflow-internal-macros && run cargo clippy)

for file in $(find . -name target -prune -o -name '*.rs' -print); do
    bad_deprecations="$(rustfmt --emit stdout --config max_width=1000 "$file" | grep '#\[deprecated' | grep -E -v '([^"\\]|\\.|"([^"\\]|\\.)*")*since' || true)"
    if [[ "${bad_deprecations}" != "" ]]; then
        echo "ERROR: #[deprecated] attribute(s) found with no 'since' key in $file:"
        echo "${bad_deprecations}"
        exit 1
    fi
    bad_deprecations="$(rustfmt --emit stdout --config max_width=1000 "$file" | grep '#\[deprecated' | grep -E -v '([^"\\]|\\.|"([^"\\]|\\.)*")*note' || true)"
    if [[ "${bad_deprecations}" != "" ]]; then
        echo "ERROR: #[deprecated] attribute(s) found with no 'note' key in $file:"
        echo "${bad_deprecations}"
        exit 1
    fi
done