From 252f1359bccc0978ad2014b017e9dcf4bb1482a2 Mon Sep 17 00:00:00 2001 From: Jim Kitchen Date: Thu, 30 Mar 2023 11:44:44 -0500 Subject: [PATCH 01/43] Build non-Arm wheels using CI (#73) * Setup cibuildwheel with Linux, macOS, Windows wheels * Ignore GraphBLAS-{version}/ checkout folder to avoid modifying the version * Disable less common dtypes for smaller package * Remove mac arm options --------- Co-authored-by: Adam Lugowski --- .github/workflows/wheels.yml | 183 ++++++++++++++++++++---- .gitignore | 3 + add_arm_to_libomp_dylib.sh | 18 +++ build_graphblas_cffi.py | 6 + pyproject.toml | 6 +- setup.py | 4 +- suitesparse.sh | 77 +++++++++- suitesparse_graphblas/tests/__init__.py | 0 8 files changed, 264 insertions(+), 33 deletions(-) create mode 100755 add_arm_to_libomp_dylib.sh mode change 100644 => 100755 suitesparse.sh delete mode 100644 suitesparse_graphblas/tests/__init__.py diff --git a/.github/workflows/wheels.yml b/.github/workflows/wheels.yml index f2fda55..7d59053 100644 --- a/.github/workflows/wheels.yml +++ b/.github/workflows/wheels.yml @@ -4,36 +4,165 @@ on: release: types: [created] + # Enable Run Workflow button in GitHub UI + workflow_dispatch: + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + jobs: - wheels: + build_sdist: + name: Build SDist + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + with: + fetch-depth: 0 + + - name: Build SDist + run: pipx run build --sdist + + - name: Check metadata + run: pipx run twine check dist/* + + - uses: actions/upload-artifact@v3 + with: + path: dist/*.tar.gz + + + build_wheels: + name: Wheels on ${{ matrix.platform_id }} - ${{ matrix.os }} runs-on: ${{ matrix.os }} - defaults: - run: - shell: bash -l {0} strategy: fail-fast: false matrix: - os: ["ubuntu-latest"] + # Loosely based on scikit-learn's config: + # https://github.com/scikit-learn/scikit-learn/blob/main/.github/workflows/wheels.yml + include: + - os: windows-latest + python-version: "3.8" + platform_id: win_amd64 + + # Linux 64 bit manylinux2014 + - os: ubuntu-latest + python-version: "3.8" + platform_id: manylinux_x86_64 + manylinux_image: manylinux2014 + + # Use x86 macOS runner to build both x86 and ARM. GitHub does not offer M1/M2 yet (only self-hosted). + - os: macos-latest + python-version: "3.8" + platform_id: macosx_x86_64 + steps: - - name: Checkout - uses: actions/checkout@v3 - - name: Set up Python - uses: actions/setup-python@v4 - with: - python-version: '3.8' - - name: Upgrade pip - run: | - python -m pip install --upgrade pip - - name: Build manylinux Python wheels - uses: RalfG/python-wheels-manylinux-build@v0.4.2-manylinux2014_x86_64 - with: - python-versions: 'cp38-cp38 cp39-cp39' - build-requirements: 'cffi numpy>=1.19,<1.20 cython' - pre-build-command: ${{ format('sh suitesparse.sh {0}', github.ref) }} - - name: Publish wheels to PyPI - env: - TWINE_USERNAME: __token__ - TWINE_PASSWORD: ${{ secrets.PYPI_TOKEN }} - run: | - pip install twine - twine upload dist/*-manylinux*.whl + - uses: actions/checkout@v3 + with: + fetch-depth: 0 + + - uses: actions/setup-python@v4 + with: + python-version: ${{ matrix.python-version }} + +# - name: Install tools (macOS) +# if: contains(matrix.os, 'macos') +# # Install coreutils which includes `nproc` used by `make -j` in suitesparse.sh +# # +# # GitHub actions comes with libomp already installed, but for its native arch only. Must build universal one +# # manually so that both x86 and arm builds can be built. +# run: | +# brew install coreutils +# brew install libomp +# sh add_arm_to_libomp_dylib.sh + + - name: Build Wheels + env: + # very verbose + CIBW_BUILD_VERBOSITY: 3 + + # Build SuiteSparse + CIBW_BEFORE_ALL: bash suitesparse.sh ${{ github.ref }} + + # CMAKE_GNUtoMS=ON asks suitesparse.sh to build libraries in MSVC style on Windows. + CIBW_ENVIRONMENT_WINDOWS: CMAKE_GNUtoMS=ON GRAPHBLAS_PREFIX="C:/GraphBLAS" + + # macOS libomp requires special configs. BREW_LIBOMP=1 asks suitesparse.sh to include them. + CIBW_ENVIRONMENT_MACOS: BREW_LIBOMP="1" + + # Uncomment to only build CPython wheels +# CIBW_BUILD: "cp*" + + # macOS: build x86_64 and arm64 + #CIBW_ARCHS_MACOS: "x86_64 arm64" + + # No 32-bit builds + CIBW_SKIP: "*-win32 *_i686 *musl*" + + # Use delvewheel on Windows. + # This copies graphblas.dll into the wheel. "repair" in cibuildwheel parlance includes copying any shared + # libraries from the build host into the wheel to make the wheel self-contained. + # Cibuildwheel includes tools for this for Linux and macOS, and they recommend delvewheel for Windows. + # Note: Currently using a workaround: --no-mangle instead of stripping graphblas.dll + # see https://github.com/adang1345/delvewheel/issues/33 + CIBW_BEFORE_BUILD_WINDOWS: "pip install delvewheel" + CIBW_REPAIR_WHEEL_COMMAND_WINDOWS: "delvewheel repair --add-path \"C:\\GraphBLAS\\bin\" --no-mangle \"libgomp-1.dll;libgcc_s_seh-1.dll\" -w {dest_dir} {wheel}" + + # make cibuildwheel install test dependencies from pyproject.toml + CIBW_TEST_EXTRAS: "test" + + # run tests + CIBW_TEST_COMMAND: "pytest {project}/suitesparse_graphblas/tests" + + # GitHub Actions macOS Intel runner cannot run ARM tests. + CIBW_TEST_SKIP: "*-macosx_arm64" + + run: | + python -m pip install cibuildwheel + python -m cibuildwheel --output-dir wheelhouse . + shell: bash + + - uses: actions/upload-artifact@v3 + id: uploadAttempt1 + continue-on-error: true + with: + path: wheelhouse/*.whl + if-no-files-found: error + + # Retry upload if first attempt failed. This happens somewhat randomly and for irregular reasons. + # Logic is a duplicate of previous step. + - uses: actions/upload-artifact@v3 + id: uploadAttempt2 + if: steps.uploadAttempt1.outcome == 'failure' + continue-on-error: false + with: + path: wheelhouse/*.whl + if-no-files-found: error + + upload_all: + name: Upload to PyPI + needs: [build_wheels, build_sdist] + runs-on: ubuntu-latest + if: github.repository == 'GraphBLAS/python-suitesparse-graphblas' +# if: github.event_name == 'release' && github.event.action == 'published' + + steps: + - uses: actions/setup-python@v4 + with: + python-version: "3.x" + + - uses: actions/download-artifact@v3 + with: + name: artifact + path: dist + + - uses: pypa/gh-action-pypi-publish@release/v1 + with: + # PyPI does not allow replacing a file. Without this flag the entire action fails if even a single duplicate exists. + skip_existing: true + verbose: true + # Real PyPI: + password: ${{ secrets.PYPI_TOKEN }} + + # Test PyPI: +# password: ${{ secrets.TEST_PYPI_API_TOKEN }} +# repository_url: https://test.pypi.org/legacy/ diff --git a/.gitignore b/.gitignore index 609ca66..e382cda 100644 --- a/.gitignore +++ b/.gitignore @@ -30,6 +30,9 @@ share/python-wheels/ MANIFEST wheelhouse +# Wheel building stuff +GraphBLAS-*/ + # PyInstaller # Usually these files are written by a python script from a template # before PyInstaller builds the exe, so as to inject date/other infos into it. diff --git a/add_arm_to_libomp_dylib.sh b/add_arm_to_libomp_dylib.sh new file mode 100755 index 0000000..8492c7c --- /dev/null +++ b/add_arm_to_libomp_dylib.sh @@ -0,0 +1,18 @@ +#!/bin/sh + +#mkdir x86lib +mkdir armlib + +# download and unzip both x86 and arm libomp tarballs +#brew fetch --force --bottle-tag=x86_64_monterey libomp +brew fetch --force --bottle-tag=arm64_big_sur libomp + +# untar +#tar -xzf $(brew --cache --bottle-tag=x86_64_monterey libomp) --strip-components 2 -C x86lib +tar -xzf $(brew --cache --bottle-tag=arm64_big_sur libomp) --strip-components 2 -C armlib + +# merge +lipo armlib/lib/libomp.dylib $(brew --prefix libomp)/lib/libomp.dylib -output libomp.dylib -create +cp -f libomp.dylib $(brew --prefix libomp)/lib +rm libomp.dylib +rm -rf armlib diff --git a/build_graphblas_cffi.py b/build_graphblas_cffi.py index 0de462b..dff21e6 100644 --- a/build_graphblas_cffi.py +++ b/build_graphblas_cffi.py @@ -16,6 +16,12 @@ include_dirs.append(os.path.join(sys.prefix, "Library", "include")) library_dirs.append(os.path.join(sys.prefix, "Library", "lib")) + # wheels.yml configures suitesparse.sh to install GraphBLAS here. + prefix = "C:\\GraphBLAS" + include_dirs.append(os.path.join(prefix, "include")) + library_dirs.append(os.path.join(prefix, "lib")) + library_dirs.append(os.path.join(prefix, "bin")) + ffibuilder.set_source( "suitesparse_graphblas._graphblas", (ss_g / "source.c").read_text(), diff --git a/pyproject.toml b/pyproject.toml index 4059c4e..beccc7a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ requires = [ "setuptools >=64", "setuptools-git-versioning", "wheel", - "cffi", + "cffi>=1.11", "cython", "oldest-supported-numpy", ] @@ -27,7 +27,7 @@ maintainers = [ {name = "Michel Pelletier", email = "michel@graphegon.com"}, ] classifiers = [ - "Development Status :: 4 - Beta", + "Development Status :: 5 - Production/Stable", "License :: OSI Approved :: Apache Software License", "Operating System :: MacOS :: MacOS X", "Operating System :: POSIX :: Linux", @@ -45,7 +45,7 @@ classifiers = [ ] dependencies = [ # These are super-old; can/should we update them? - "cffi>=1.0.0", + "cffi>=1.11", "numpy>=1.19", ] [project.urls] diff --git a/setup.py b/setup.py index 53d4d58..860cd3a 100644 --- a/setup.py +++ b/setup.py @@ -58,8 +58,10 @@ if use_cython: ext_modules = cythonize(ext_modules, include_path=include_dirs) -ext_modules.append(build_graphblas_cffi.get_extension(extra_compile_args=extra_compile_args)) +if build_graphblas_cffi.is_win: + ext_modules.append(build_graphblas_cffi.get_extension(extra_compile_args=extra_compile_args)) setup( ext_modules=ext_modules, + cffi_modules=None if build_graphblas_cffi.is_win else ["build_graphblas_cffi.py:ffibuilder"], ) diff --git a/suitesparse.sh b/suitesparse.sh old mode 100644 new mode 100755 index 77410fc..72d805f --- a/suitesparse.sh +++ b/suitesparse.sh @@ -1,14 +1,87 @@ +#!/bin/bash +# parse SuiteSparse version from first argument, a git tag that ends in the version (no leading v) if [[ $1 =~ refs/tags/([0-9]*\.[0-9]*\.[0-9]*)\..*$ ]]; then VERSION=${BASH_REMATCH[1]} else + echo "Specify a SuiteSparse version, such as: $0 refs/tags/7.4.3.0" exit -1 fi echo VERSION: $VERSION +NPROC="$(nproc)" +if [ -z "${NPROC}" ]; then + # Default for platforms that don't have nproc. Mostly Windows. + NPROC="2" +fi + +cmake_params=() +if [ -n "${BREW_LIBOMP}" ]; then + # macOS OpenMP flags. + # FindOpenMP doesn't find brew's libomp, so set the necessary configs manually. + cmake_params+=(-DOpenMP_C_FLAGS="-Xclang -fopenmp -I$(brew --prefix libomp)/include") + cmake_params+=(-DOpenMP_C_LIB_NAMES="libomp") + cmake_params+=(-DOpenMP_libomp_LIBRARY="omp") + export LDFLAGS="-L$(brew --prefix libomp)/lib" + + export CFLAGS="-arch x86_64" +# # build both x86 and ARM +# export CFLAGS="-arch x86_64 -arch arm64" +fi + +if [ -n "${CMAKE_GNUtoMS}" ]; then + # Windows needs .lib libraries, not .a + cmake_params+=(-DCMAKE_GNUtoMS=ON) + # Windows expects 'graphblas.lib', not 'libgraphblas.lib' + cmake_params+=(-DCMAKE_SHARED_LIBRARY_PREFIX=) + cmake_params+=(-DCMAKE_STATIC_LIBRARY_PREFIX=) +fi + +if [ -n "${GRAPHBLAS_PREFIX}" ]; then + echo "GRAPHBLAS_PREFIX=${GRAPHBLAS_PREFIX}" + cmake_params+=(-DCMAKE_INSTALL_PREFIX="${GRAPHBLAS_PREFIX}") +fi + curl -L https://github.com/DrTimothyAldenDavis/GraphBLAS/archive/refs/tags/v${VERSION}.tar.gz | tar xzf - cd GraphBLAS-${VERSION}/build -cmake .. -DCMAKE_BUILD_TYPE=Release -make -j$(nproc) + +# Disable optimizing some rarely-used types for significantly faster builds and significantly smaller wheel size. +# Also the build with all types enabled sometimes stalls on GitHub Actions. Probably due to exceeded resource limits. +# These can still be used, they'll just have reduced performance (AFAIK similar to UDTs). +# echo "#define GxB_NO_BOOL 1" >> ../Source/GB_control.h # +# echo "#define GxB_NO_FP32 1" >> ../Source/GB_control.h # +# echo "#define GxB_NO_FP64 1" >> ../Source/GB_control.h # +echo "#define GxB_NO_FC32 1" >> ../Source/GB_control.h # +echo "#define GxB_NO_FC64 1" >> ../Source/GB_control.h # +# echo "#define GxB_NO_INT16 1" >> ../Source/GB_control.h +# echo "#define GxB_NO_INT32 1" >> ../Source/GB_control.h +# echo "#define GxB_NO_INT64 1" >> ../Source/GB_control.h # +# echo "#define GxB_NO_INT8 1" >> ../Source/GB_control.h +echo "#define GxB_NO_UINT16 1" >> ../Source/GB_control.h +echo "#define GxB_NO_UINT32 1" >> ../Source/GB_control.h +# echo "#define GxB_NO_UINT64 1" >> ../Source/GB_control.h +echo "#define GxB_NO_UINT8 1" >> ../Source/GB_control.h + +# Disable all Source/Generated2 kernels. For workflow development only. +#cmake_params+=(-DCMAKE_CUDA_DEV=1) + +cmake .. -DCMAKE_BUILD_TYPE=Release -G 'Unix Makefiles' "${cmake_params[@]}" +make -j$NPROC make install + +if [ -n "${CMAKE_GNUtoMS}" ]; then + if [ -z "${GRAPHBLAS_PREFIX}" ]; then + # Windows default + GRAPHBLAS_PREFIX="C:/Program Files (x86)" + fi + + # Windows: + # CMAKE_STATIC_LIBRARY_PREFIX is sometimes ignored, possibly when the MinGW toolchain is selected. + # Drop the 'lib' prefix manually. + echo "manually removing lib prefix" + mv "${GRAPHBLAS_PREFIX}/lib/libgraphblas.lib" "${GRAPHBLAS_PREFIX}/lib/graphblas.lib" + mv "${GRAPHBLAS_PREFIX}/lib/libgraphblas.dll.a" "${GRAPHBLAS_PREFIX}/lib/graphblas.dll.a" + # cp instead of mv because the GNU tools expect libgraphblas.dll and the MS tools expect graphblas.dll. + cp "${GRAPHBLAS_PREFIX}/bin/libgraphblas.dll" "${GRAPHBLAS_PREFIX}/bin/graphblas.dll" +fi diff --git a/suitesparse_graphblas/tests/__init__.py b/suitesparse_graphblas/tests/__init__.py deleted file mode 100644 index e69de29..0000000 From 611bb442a4a42f78cd8fd43cfb7ea5622886b77f Mon Sep 17 00:00:00 2001 From: Erik Welch Date: Thu, 30 Mar 2023 16:20:56 -0500 Subject: [PATCH 02/43] Include tests as a module in the package (#75) * Include tests as a module in the package * consistently mark the dtypes we do/don't support --- .github/workflows/wheels.yml | 2 +- MANIFEST.in | 1 - pyproject.toml | 2 +- suitesparse.sh | 12 ++++++------ suitesparse_graphblas/tests/__init__.py | 0 5 files changed, 8 insertions(+), 9 deletions(-) create mode 100644 suitesparse_graphblas/tests/__init__.py diff --git a/.github/workflows/wheels.yml b/.github/workflows/wheels.yml index 7d59053..f8ade8f 100644 --- a/.github/workflows/wheels.yml +++ b/.github/workflows/wheels.yml @@ -111,7 +111,7 @@ jobs: CIBW_TEST_EXTRAS: "test" # run tests - CIBW_TEST_COMMAND: "pytest {project}/suitesparse_graphblas/tests" + CIBW_TEST_COMMAND: "pytest --pyargs suitesparse_graphblas" # GitHub Actions macOS Intel runner cannot run ARM tests. CIBW_TEST_SKIP: "*-macosx_arm64" diff --git a/MANIFEST.in b/MANIFEST.in index c2e230d..61cd04d 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -6,4 +6,3 @@ include suitesparse_graphblas/*.pxd include suitesparse_graphblas/*.pyx include suitesparse_graphblas/*.c include suitesparse_graphblas/*.h -include suitesparse_graphblas/tests/*.py diff --git a/pyproject.toml b/pyproject.toml index beccc7a..1a5d5fd 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -61,7 +61,7 @@ test = [ [tool.setuptools] packages = [ 'suitesparse_graphblas', - # 'suitesparse_graphblas.tests', + 'suitesparse_graphblas.tests', 'suitesparse_graphblas.io', ] diff --git a/suitesparse.sh b/suitesparse.sh index 72d805f..26b29fb 100755 --- a/suitesparse.sh +++ b/suitesparse.sh @@ -52,15 +52,15 @@ cd GraphBLAS-${VERSION}/build # echo "#define GxB_NO_BOOL 1" >> ../Source/GB_control.h # # echo "#define GxB_NO_FP32 1" >> ../Source/GB_control.h # # echo "#define GxB_NO_FP64 1" >> ../Source/GB_control.h # -echo "#define GxB_NO_FC32 1" >> ../Source/GB_control.h # -echo "#define GxB_NO_FC64 1" >> ../Source/GB_control.h # -# echo "#define GxB_NO_INT16 1" >> ../Source/GB_control.h -# echo "#define GxB_NO_INT32 1" >> ../Source/GB_control.h +echo "#define GxB_NO_FC32 1" >> ../Source/GB_control.h +echo "#define GxB_NO_FC64 1" >> ../Source/GB_control.h +# echo "#define GxB_NO_INT16 1" >> ../Source/GB_control.h # +# echo "#define GxB_NO_INT32 1" >> ../Source/GB_control.h # # echo "#define GxB_NO_INT64 1" >> ../Source/GB_control.h # -# echo "#define GxB_NO_INT8 1" >> ../Source/GB_control.h +# echo "#define GxB_NO_INT8 1" >> ../Source/GB_control.h # echo "#define GxB_NO_UINT16 1" >> ../Source/GB_control.h echo "#define GxB_NO_UINT32 1" >> ../Source/GB_control.h -# echo "#define GxB_NO_UINT64 1" >> ../Source/GB_control.h +# echo "#define GxB_NO_UINT64 1" >> ../Source/GB_control.h # echo "#define GxB_NO_UINT8 1" >> ../Source/GB_control.h # Disable all Source/Generated2 kernels. For workflow development only. diff --git a/suitesparse_graphblas/tests/__init__.py b/suitesparse_graphblas/tests/__init__.py new file mode 100644 index 0000000..e69de29 From 1a5e9f4eafd70b084dd5c31d027f53adcec6b57f Mon Sep 17 00:00:00 2001 From: Erik Welch Date: Fri, 31 Mar 2023 07:39:32 -0500 Subject: [PATCH 03/43] s/skip_existing/skip-existing/g (#77) --- .github/workflows/wheels.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/wheels.yml b/.github/workflows/wheels.yml index f8ade8f..0799d87 100644 --- a/.github/workflows/wheels.yml +++ b/.github/workflows/wheels.yml @@ -158,7 +158,7 @@ jobs: - uses: pypa/gh-action-pypi-publish@release/v1 with: # PyPI does not allow replacing a file. Without this flag the entire action fails if even a single duplicate exists. - skip_existing: true + skip-existing: true verbose: true # Real PyPI: password: ${{ secrets.PYPI_TOKEN }} From 40fd47ddc8af3004107517cd54e05789dc9bba5d Mon Sep 17 00:00:00 2001 From: Erik Welch Date: Fri, 31 Mar 2023 09:20:20 -0500 Subject: [PATCH 04/43] We no longer need suitesparse_graphblas_arm64.h (#78) --- suitesparse_graphblas/create_headers.py | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/suitesparse_graphblas/create_headers.py b/suitesparse_graphblas/create_headers.py index 8e973a3..cd9c0b9 100644 --- a/suitesparse_graphblas/create_headers.py +++ b/suitesparse_graphblas/create_headers.py @@ -799,7 +799,7 @@ def main(): # final files used by cffi (with and without complex numbers) final_h = os.path.join(thisdir, "suitesparse_graphblas.h") - final_arm64_h = os.path.join(thisdir, "suitesparse_graphblas_arm64.h") + # final_arm64_h = os.path.join(thisdir, "suitesparse_graphblas_arm64.h") final_no_complex_h = os.path.join(thisdir, "suitesparse_graphblas_no_complex.h") source_c = os.path.join(thisdir, "source.c") @@ -827,30 +827,31 @@ def main(): with open(final_h, "w") as f: f.write("\n".join(text) + "\n") - # Create final header file (arm64) - # Replace all variadic arguments (...) with "char *" - print(f"Step 4: parse header file to create {final_arm64_h}") - orig_text = text - patt = re.compile(r"^(extern GrB_Info .*\(.*)(\.\.\.)(\);)$") - text = [patt.sub(r"\1char *\3", line) for line in orig_text] - with open(final_arm64_h, "w") as f: - f.write("\n".join(text) + "\n") + # NOTE:suitesparse_graphblas.h and suitesparse_graphblas_arm64.h are the same now + # # Create final header file (arm64) + # # Replace all variadic arguments (...) with "char *" + # print(f"Step 4: parse header file to create {final_arm64_h}") + # orig_text = text + # patt = re.compile(r"^(extern GrB_Info .*\(.*)(\.\.\.)(\);)$") + # text = [patt.sub(r"\1char *\3", line) for line in orig_text] + # with open(final_arm64_h, "w") as f: + # f.write("\n".join(text) + "\n") # Create final header file (no complex) - print(f"Step 5: parse header file to create {final_no_complex_h}") + print(f"Step 4: parse header file to create {final_no_complex_h}") groups_no_complex = parse_header(processed_h, skip_complex=True) text = create_header_text(groups_no_complex) with open(final_no_complex_h, "w") as f: f.write("\n".join(text) + "\n") # Create source - print(f"Step 6: create {source_c}") + print(f"Step 5: create {source_c}") text = create_source_text(groups) with open(source_c, "w") as f: f.write("\n".join(text) + "\n") # Check defines - print("Step 7: check #define definitions") + print("Step 6: check #define definitions") with open(graphblas_h) as f: text = f.read() define_lines = re.compile(r".*?#define\s+\w+\s+") From 0062aecd267777242ad73a4f7bf74295a744481f Mon Sep 17 00:00:00 2001 From: Erik Welch Date: Fri, 31 Mar 2023 16:48:56 -0500 Subject: [PATCH 05/43] Update versions in pre-commit (#80) --- .pre-commit-config.yaml | 19 +++++++++++++------ pyproject.toml | 21 ++++++++++++++++++++- 2 files changed, 33 insertions(+), 7 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 6f4c629..9ece09c 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -20,12 +20,12 @@ repos: - id: mixed-line-ending # - id: trailing-whitespace - repo: https://github.com/abravalheri/validate-pyproject - rev: v0.12.1 + rev: v0.12.2 hooks: - id: validate-pyproject name: Validate pyproject.toml - repo: https://github.com/myint/autoflake - rev: v2.0.1 + rev: v2.0.2 hooks: - id: autoflake args: [--in-place] @@ -44,7 +44,7 @@ repos: # - id: auto-walrus # args: [--line-length, "100"] - repo: https://github.com/psf/black - rev: 23.1.0 + rev: 23.3.0 hooks: - id: black # - id: black-jupyter @@ -55,14 +55,21 @@ repos: additional_dependencies: &flake8_dependencies # These versions need updated manually - flake8==6.0.0 - - flake8-comprehensions==3.10.1 - - flake8-bugbear==23.1.20 - # - flake8-simplify==0.19.3 + - flake8-comprehensions==3.11.1 + - flake8-bugbear==23.3.23 + # - flake8-simplify==0.20.0 - repo: https://github.com/asottile/yesqa rev: v1.4.0 hooks: - id: yesqa additional_dependencies: *flake8_dependencies + # `pyroma` may help keep our package standards up to date if best practices change. + # This is a "low value" check though and too slow to run as part of pre-commit. + # - repo: https://github.com/regebro/pyroma + # rev: "4.2" + # hooks: + # - id: pyroma + # args: [-n, "10", .] - repo: https://github.com/pre-commit/pre-commit-hooks rev: v4.4.0 hooks: diff --git a/pyproject.toml b/pyproject.toml index 1a5d5fd..7265a23 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -17,15 +17,30 @@ readme = "README.md" requires-python = ">=3.8" license = {file = "LICENSE"} authors = [ - {name = "Erik Welch"}, + {name = "Erik Welch", email = "erik.n.welch@gmail.com"}, {name = "Jim Kitchen"}, {name = "Michel Pelletier"}, + {name = "suitesparse-graphblas contributors"}, ] maintainers = [ {name = "Erik Welch", email = "erik.n.welch@gmail.com"}, {name = "Jim Kitchen", email = "jim22k@gmail.com"}, {name = "Michel Pelletier", email = "michel@graphegon.com"}, ] +keywords = [ + "graphblas", + "graph", + "sparse", + "matrix", + "lagraph", + "suitesparse", + "Networks", + "Graph Theory", + "Mathematics", + "network", + "discrete mathematics", + "math", +] classifiers = [ "Development Status :: 5 - Production/Stable", "License :: OSI Approved :: Apache Software License", @@ -39,9 +54,13 @@ classifiers = [ "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3 :: Only", + "Intended Audience :: Developers", + "Intended Audience :: Other Audience", "Intended Audience :: Science/Research", "Topic :: Scientific/Engineering", + "Topic :: Scientific/Engineering :: Information Analysis", "Topic :: Scientific/Engineering :: Mathematics", + "Topic :: Software Development :: Libraries :: Python Modules", ] dependencies = [ # These are super-old; can/should we update them? From 7bc3e93852b4291e7b00503999cda02a32628022 Mon Sep 17 00:00:00 2001 From: Erik Welch Date: Thu, 20 Apr 2023 09:19:28 -0500 Subject: [PATCH 06/43] Update to SuiteSparse:GraphBLAS v7.4.4 (#82) --- .github/workflows/test.yml | 2 +- .pre-commit-config.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index bbc911e..78f5f44 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -19,7 +19,7 @@ jobs: # os: ["ubuntu-latest"] # source: ["source"] python-version: ["3.8", "3.9", "3.10", "3.11"] - graphblas-version: ["7.4.3"] + graphblas-version: ["7.4.4"] steps: - name: Checkout uses: actions/checkout@v3 diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 9ece09c..d8ef4a1 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -25,7 +25,7 @@ repos: - id: validate-pyproject name: Validate pyproject.toml - repo: https://github.com/myint/autoflake - rev: v2.0.2 + rev: v2.1.1 hooks: - id: autoflake args: [--in-place] From 1d266a945860682b84d7404f563a8193a2c882dc Mon Sep 17 00:00:00 2001 From: Adam Lugowski Date: Wed, 3 May 2023 07:38:47 -0700 Subject: [PATCH 07/43] Linux aarch64 wheels (#84) * Mac ARM wheels * Linux aarch64 wheels Uses cibuildwheel's QEMU mechanism. --- .github/workflows/wheels.yml | 62 ++++++++++++++++++++++++++---------- add_arm_to_libomp_dylib.sh | 34 +++++++++++++++++++- suitesparse.sh | 25 +++++++++++++-- 3 files changed, 101 insertions(+), 20 deletions(-) diff --git a/.github/workflows/wheels.yml b/.github/workflows/wheels.yml index 0799d87..a0b6c9b 100644 --- a/.github/workflows/wheels.yml +++ b/.github/workflows/wheels.yml @@ -32,7 +32,7 @@ jobs: build_wheels: - name: Wheels on ${{ matrix.platform_id }} - ${{ matrix.os }} + name: Wheels - ${{ matrix.cibw_archs }} - ${{ matrix.os }} runs-on: ${{ matrix.os }} strategy: fail-fast: false @@ -43,17 +43,30 @@ jobs: - os: windows-latest python-version: "3.8" platform_id: win_amd64 + cibw_archs: "auto" # Linux 64 bit manylinux2014 - os: ubuntu-latest python-version: "3.8" platform_id: manylinux_x86_64 manylinux_image: manylinux2014 + cibw_archs: "native" - # Use x86 macOS runner to build both x86 and ARM. GitHub does not offer M1/M2 yet (only self-hosted). + # Linux 64 bit manylinux2014 for aarch64 + # Separate runner because this requires emulation (only x86 runners are available) and is very slow. + - os: ubuntu-latest + python-version: "3.8" + platform_id: manylinux_x86_64 + manylinux_image: manylinux2014 + cibw_archs: "aarch64" + + # Use x86 macOS runner to build both x86 and ARM. + # GitHub does not offer Apple Silicon yet (only for self-hosted). + # See https://github.com/github/roadmap/issues/528 - os: macos-latest python-version: "3.8" platform_id: macosx_x86_64 + cibw_archs: "x86_64 arm64" steps: - uses: actions/checkout@v3 @@ -64,16 +77,31 @@ jobs: with: python-version: ${{ matrix.python-version }} -# - name: Install tools (macOS) -# if: contains(matrix.os, 'macos') -# # Install coreutils which includes `nproc` used by `make -j` in suitesparse.sh -# # -# # GitHub actions comes with libomp already installed, but for its native arch only. Must build universal one -# # manually so that both x86 and arm builds can be built. -# run: | -# brew install coreutils -# brew install libomp -# sh add_arm_to_libomp_dylib.sh + # aarch64 Linux builds are cross-compiled on x86 runners using emulation + # see https://cibuildwheel.readthedocs.io/en/stable/faq/#emulation + - name: Setup QEMU (for aarch64) + if: matrix.cibw_archs == 'aarch64' + uses: docker/setup-qemu-action@v2 + with: + platforms: arm64 + + - name: Setup env (for aarch64) + if: matrix.cibw_archs == 'aarch64' + # Ask suitesparse.sh to compile faster by optimizing fewer types. Otherwise, the build takes too long to finish + # in 6 hour limit. + run: | + echo "SUITESPARSE_FAST_BUILD=1" >> $GITHUB_ENV + + - name: Install tools (macOS) + if: contains(matrix.os, 'macos') + # Install coreutils which includes `nproc` used by `make -j` in suitesparse.sh + # + # GitHub actions comes with libomp already installed, but for its native arch only. Must build universal one + # manually so that both x86 and arm builds can be built. + run: | + brew install coreutils + brew install libomp + sh add_arm_to_libomp_dylib.sh - name: Build Wheels env: @@ -83,6 +111,8 @@ jobs: # Build SuiteSparse CIBW_BEFORE_ALL: bash suitesparse.sh ${{ github.ref }} + CIBW_ENVIRONMENT_LINUX: SUITESPARSE_FAST_BUILD=${{ env.SUITESPARSE_FAST_BUILD }} + # CMAKE_GNUtoMS=ON asks suitesparse.sh to build libraries in MSVC style on Windows. CIBW_ENVIRONMENT_WINDOWS: CMAKE_GNUtoMS=ON GRAPHBLAS_PREFIX="C:/GraphBLAS" @@ -92,11 +122,11 @@ jobs: # Uncomment to only build CPython wheels # CIBW_BUILD: "cp*" - # macOS: build x86_64 and arm64 - #CIBW_ARCHS_MACOS: "x86_64 arm64" + # Architectures to build specified in matrix + CIBW_ARCHS: ${{ matrix.cibw_archs }} - # No 32-bit builds - CIBW_SKIP: "*-win32 *_i686 *musl*" + # No 32-bit builds, no musllinux, no PyPy aarch64 (only due to build speed, numpy does not ship aarch64 pypy wheels) + CIBW_SKIP: "*-win32 *_i686 *musl* pp*aarch64" # Use delvewheel on Windows. # This copies graphblas.dll into the wheel. "repair" in cibuildwheel parlance includes copying any shared diff --git a/add_arm_to_libomp_dylib.sh b/add_arm_to_libomp_dylib.sh index 8492c7c..5109f98 100755 --- a/add_arm_to_libomp_dylib.sh +++ b/add_arm_to_libomp_dylib.sh @@ -1,4 +1,23 @@ #!/bin/sh +# Construct a universal2 version of homebrew's libomp. +# +# Homebrew's libomp works well to patch Apple clang's missing OpenMP support. The problem is a combination of: +# - Brew installs libomp built for x86 *or* ARM, matching the architecture of the machine it is running on. +# - GitHub Actions only has x86 runners as of now. Check back in Q4 2023. https://github.com/github/roadmap/issues/528 +# - The linker will select the first found libomp, and if that version does not include the expected architecture then +# linking will fail. +# +# One solution is to build a universal2 version of libomp that includes both architectures. That's what this script +# does. It adds the ARM version of libomp to the x86 version. +# +# This script assumes it is running on x86 with x86 libomp already installed. + +if [ "$(arch)" != "x86_64" ] && [ "$(arch)" != "i386" ]; then + echo "Not running on x86 as expected. Running on:" + arch + echo "If the above says arm64 then this hack is no longer necessary. Remove this script from the build." + exit 1; +fi #mkdir x86lib mkdir armlib @@ -11,8 +30,21 @@ brew fetch --force --bottle-tag=arm64_big_sur libomp #tar -xzf $(brew --cache --bottle-tag=x86_64_monterey libomp) --strip-components 2 -C x86lib tar -xzf $(brew --cache --bottle-tag=arm64_big_sur libomp) --strip-components 2 -C armlib -# merge +# ARM and x86 dylibs have different install names due to different brew install directories. +# The x86 install name will be expected so make the ARM install name match. +X86_INSTALL_NAME="$(otool -X -D $(brew --prefix libomp)/lib/libomp.dylib)" +install_name_tool -id "${X86_INSTALL_NAME}" armlib/lib/libomp.dylib +codesign --force -s - armlib/lib/libomp.dylib + +# merge the downloaded (arm) libomp with the already installed (x86) libomp to create a universal libomp lipo armlib/lib/libomp.dylib $(brew --prefix libomp)/lib/libomp.dylib -output libomp.dylib -create + +# print contents of universal library for reference +otool -arch all -L libomp.dylib + +# replace the x86-only libomp with the newly-created universal one cp -f libomp.dylib $(brew --prefix libomp)/lib + +# clean up rm libomp.dylib rm -rf armlib diff --git a/suitesparse.sh b/suitesparse.sh index 26b29fb..5d930dc 100755 --- a/suitesparse.sh +++ b/suitesparse.sh @@ -25,9 +25,8 @@ if [ -n "${BREW_LIBOMP}" ]; then cmake_params+=(-DOpenMP_libomp_LIBRARY="omp") export LDFLAGS="-L$(brew --prefix libomp)/lib" - export CFLAGS="-arch x86_64" -# # build both x86 and ARM -# export CFLAGS="-arch x86_64 -arch arm64" + # build both x86 and ARM + export CFLAGS="-arch x86_64 -arch arm64" fi if [ -n "${CMAKE_GNUtoMS}" ]; then @@ -63,6 +62,26 @@ echo "#define GxB_NO_UINT32 1" >> ../Source/GB_control.h # echo "#define GxB_NO_UINT64 1" >> ../Source/GB_control.h # echo "#define GxB_NO_UINT8 1" >> ../Source/GB_control.h +if [ -n "${SUITESPARSE_FAST_BUILD}" ]; then + echo "suitesparse.sh: Fast build requested." + # Disable optimizing even more types. This is for builds that don't finish in runner resource limits, + # such as emulated aarm64. + + echo "#define GxB_NO_BOOL 1" >> ../Source/GB_control.h +# echo "#define GxB_NO_FP32 1" >> ../Source/GB_control.h +# echo "#define GxB_NO_FP64 1" >> ../Source/GB_control.h + echo "#define GxB_NO_FC32 1" >> ../Source/GB_control.h + echo "#define GxB_NO_FC64 1" >> ../Source/GB_control.h + echo "#define GxB_NO_INT16 1" >> ../Source/GB_control.h + echo "#define GxB_NO_INT32 1" >> ../Source/GB_control.h +# echo "#define GxB_NO_INT64 1" >> ../Source/GB_control.h +# echo "#define GxB_NO_INT8 1" >> ../Source/GB_control.h + echo "#define GxB_NO_UINT16 1" >> ../Source/GB_control.h + echo "#define GxB_NO_UINT32 1" >> ../Source/GB_control.h + echo "#define GxB_NO_UINT64 1" >> ../Source/GB_control.h + echo "#define GxB_NO_UINT8 1" >> ../Source/GB_control.h +fi + # Disable all Source/Generated2 kernels. For workflow development only. #cmake_params+=(-DCMAKE_CUDA_DEV=1) From 329f944cb645078eb70380f6a37a0a0bdd64ff8f Mon Sep 17 00:00:00 2001 From: Adam Lugowski Date: Wed, 3 May 2023 12:45:06 -0700 Subject: [PATCH 08/43] Support building from source with user-specified GraphBLAS (#85) * Support building from source with user-specified GraphBLAS Look for GraphBLAS first in GraphBLAS_ROOT env var, if empty then fallback to current paths * Add note about LD_LIBRARY_PATH --- README.md | 30 ++++++++++++++++++++++++++++++ build_graphblas_cffi.py | 20 +++++++++++++------- 2 files changed, 43 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 17f7ffa..2d15f15 100644 --- a/README.md +++ b/README.md @@ -12,3 +12,33 @@ This is a base package that exposes only the low level CFFI API bindings and symbols. This package is shared by the syntax bindings [pygraphblas](https://github.com/Graphegon/pygraphblas) and [python-graphblas](https://github.com/python-graphblas/python-graphblas). + + +## Installation from pre-built wheels +Pre-built wheels for common platforms are available from PyPI and conda. These bundle a compiled copy of SuiteSparse:GraphBLAS. + +```bash +pip install suitesparse-graphblas +``` + +or + +```bash +conda install -c conda-forge python-suitesparse-graphblas +``` + +## Installation from source +If you wish to link against your own copy of SuiteSparse:GraphBLAS you may build from source. + +Specify the location of your SuiteSparse:GraphBLAS installation in the `GraphBLAS_ROOT` environment variable then use the standard pip build from source mechanism. This location must contain `include/GraphBLAS.h` and `lib/`. + +```bash +export GraphBLAS_ROOT="/path/to/graphblas" +pip install suitesparse-graphblas-*.tar.gz +``` +You may also have to appropriately set `LD_LIBRARY_PATH` to find `libgraphblas` at runtime. + +For example, to use Homebrew's SuiteSparse:GraphBLAS on macOS, with the sdist from PyPI, and with all dependencies using wheels: +```bash +GraphBLAS_ROOT="$(brew --prefix suitesparse)" pip install --no-binary suitesparse-graphblas suitesparse-graphblas +``` diff --git a/build_graphblas_cffi.py b/build_graphblas_cffi.py index dff21e6..1c73e1c 100644 --- a/build_graphblas_cffi.py +++ b/build_graphblas_cffi.py @@ -10,17 +10,23 @@ ffibuilder = FFI() -include_dirs = [os.path.join(sys.prefix, "include")] -library_dirs = [os.path.join(sys.prefix, "lib")] +# GraphBLAS_ROOT env var can point to the root directory of GraphBLAS to link against. +# Expected subdirectories: include/ (contains GraphBLAS.h), lib/, and bin/ (on Windows only) +# Otherwise fallback to default system folders. +graphblas_root = os.environ.get("GraphBLAS_ROOT", None) +if not graphblas_root: + # Windows wheels.yml configures suitesparse.sh to install GraphBLAS to "C:\\GraphBLAS". + graphblas_root = "C:\\GraphBLAS" if is_win else sys.prefix + +include_dirs = [os.path.join(graphblas_root, "include")] +library_dirs = [os.path.join(graphblas_root, "lib")] if is_win: include_dirs.append(os.path.join(sys.prefix, "Library", "include")) library_dirs.append(os.path.join(sys.prefix, "Library", "lib")) - # wheels.yml configures suitesparse.sh to install GraphBLAS here. - prefix = "C:\\GraphBLAS" - include_dirs.append(os.path.join(prefix, "include")) - library_dirs.append(os.path.join(prefix, "lib")) - library_dirs.append(os.path.join(prefix, "bin")) + include_dirs.append(os.path.join(graphblas_root, "include")) + library_dirs.append(os.path.join(graphblas_root, "lib")) + library_dirs.append(os.path.join(graphblas_root, "bin")) ffibuilder.set_source( "suitesparse_graphblas._graphblas", From 79522ce3c4e47a86c30a84a3ac1ff7088e7d4433 Mon Sep 17 00:00:00 2001 From: Erik Welch Date: Thu, 4 May 2023 20:59:04 -0500 Subject: [PATCH 09/43] Replace INT8 with BOOL for SUITESPARSE_FAST_BUILD (#86) This should hopefully allow aarch64 wheel builds to build faster in CI. --- .pre-commit-config.yaml | 4 ++-- suitesparse.sh | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index d8ef4a1..1ec8879 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -24,7 +24,7 @@ repos: hooks: - id: validate-pyproject name: Validate pyproject.toml - - repo: https://github.com/myint/autoflake + - repo: https://github.com/PyCQA/autoflake rev: v2.1.1 hooks: - id: autoflake @@ -34,7 +34,7 @@ repos: hooks: - id: isort - repo: https://github.com/asottile/pyupgrade - rev: v3.3.1 + rev: v3.3.2 hooks: - id: pyupgrade args: [--py38-plus] diff --git a/suitesparse.sh b/suitesparse.sh index 5d930dc..12a42e9 100755 --- a/suitesparse.sh +++ b/suitesparse.sh @@ -67,7 +67,7 @@ if [ -n "${SUITESPARSE_FAST_BUILD}" ]; then # Disable optimizing even more types. This is for builds that don't finish in runner resource limits, # such as emulated aarm64. - echo "#define GxB_NO_BOOL 1" >> ../Source/GB_control.h +# echo "#define GxB_NO_BOOL 1" >> ../Source/GB_control.h # echo "#define GxB_NO_FP32 1" >> ../Source/GB_control.h # echo "#define GxB_NO_FP64 1" >> ../Source/GB_control.h echo "#define GxB_NO_FC32 1" >> ../Source/GB_control.h @@ -75,7 +75,7 @@ if [ -n "${SUITESPARSE_FAST_BUILD}" ]; then echo "#define GxB_NO_INT16 1" >> ../Source/GB_control.h echo "#define GxB_NO_INT32 1" >> ../Source/GB_control.h # echo "#define GxB_NO_INT64 1" >> ../Source/GB_control.h -# echo "#define GxB_NO_INT8 1" >> ../Source/GB_control.h + echo "#define GxB_NO_INT8 1" >> ../Source/GB_control.h echo "#define GxB_NO_UINT16 1" >> ../Source/GB_control.h echo "#define GxB_NO_UINT32 1" >> ../Source/GB_control.h echo "#define GxB_NO_UINT64 1" >> ../Source/GB_control.h From 892e2d2514d70b1ee01d1494e8640cc44a1ff8f5 Mon Sep 17 00:00:00 2001 From: Adam Lugowski Date: Thu, 4 May 2023 19:00:18 -0700 Subject: [PATCH 10/43] Split macos architectures (#87) --- .github/workflows/wheels.yml | 17 ++++++++++++----- suitesparse.sh | 8 ++++++-- 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/.github/workflows/wheels.yml b/.github/workflows/wheels.yml index a0b6c9b..98b8ab6 100644 --- a/.github/workflows/wheels.yml +++ b/.github/workflows/wheels.yml @@ -60,13 +60,19 @@ jobs: manylinux_image: manylinux2014 cibw_archs: "aarch64" - # Use x86 macOS runner to build both x86 and ARM. + # macOS x86 + - os: macos-latest + python-version: "3.8" + platform_id: macosx_x86_64 + cibw_archs: "x86_64" + + # Use x86 macOS runner to build ARM. # GitHub does not offer Apple Silicon yet (only for self-hosted). # See https://github.com/github/roadmap/issues/528 - os: macos-latest python-version: "3.8" platform_id: macosx_x86_64 - cibw_archs: "x86_64 arm64" + cibw_archs: "arm64" steps: - uses: actions/checkout@v3 @@ -117,7 +123,8 @@ jobs: CIBW_ENVIRONMENT_WINDOWS: CMAKE_GNUtoMS=ON GRAPHBLAS_PREFIX="C:/GraphBLAS" # macOS libomp requires special configs. BREW_LIBOMP=1 asks suitesparse.sh to include them. - CIBW_ENVIRONMENT_MACOS: BREW_LIBOMP="1" + # SUITESPARSE_MACOS_ARCH asks to build a particular architecture. Either x86 or arm64. + CIBW_ENVIRONMENT_MACOS: BREW_LIBOMP="1" SUITESPARSE_MACOS_ARCH=${{ matrix.cibw_archs }} # Uncomment to only build CPython wheels # CIBW_BUILD: "cp*" @@ -143,8 +150,8 @@ jobs: # run tests CIBW_TEST_COMMAND: "pytest --pyargs suitesparse_graphblas" - # GitHub Actions macOS Intel runner cannot run ARM tests. - CIBW_TEST_SKIP: "*-macosx_arm64" + # GitHub Actions macOS Intel runner cannot run ARM tests. Uncomment to silence warning. +# CIBW_TEST_SKIP: "*-macosx_arm64" run: | python -m pip install cibuildwheel diff --git a/suitesparse.sh b/suitesparse.sh index 12a42e9..2dd719b 100755 --- a/suitesparse.sh +++ b/suitesparse.sh @@ -25,8 +25,12 @@ if [ -n "${BREW_LIBOMP}" ]; then cmake_params+=(-DOpenMP_libomp_LIBRARY="omp") export LDFLAGS="-L$(brew --prefix libomp)/lib" - # build both x86 and ARM - export CFLAGS="-arch x86_64 -arch arm64" + if [ -n "${SUITESPARSE_MACOS_ARCH}" ]; then + export CFLAGS="-arch ${SUITESPARSE_MACOS_ARCH}" + else + # build both x86 and ARM + export CFLAGS="-arch x86_64 -arch arm64" + fi fi if [ -n "${CMAKE_GNUtoMS}" ]; then From 7e746165c0edcfa300b27052b8280f171937d0ff Mon Sep 17 00:00:00 2001 From: Erik Welch Date: Fri, 19 May 2023 17:03:06 -0500 Subject: [PATCH 11/43] Update to SuiteSparse:GraphBLAS v8.0.0 (#76) * Update to v8.0.0! --- .github/workflows/test.yml | 23 +- suitesparse.sh | 3 +- suitesparse_graphblas/__init__.py | 1 - suitesparse_graphblas/create_headers.py | 6 +- suitesparse_graphblas/suitesparse_graphblas.h | 160 +- .../suitesparse_graphblas_arm64.h | 3491 ----------------- .../suitesparse_graphblas_no_complex.h | 160 +- 7 files changed, 195 insertions(+), 3649 deletions(-) delete mode 100644 suitesparse_graphblas/suitesparse_graphblas_arm64.h diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 78f5f44..07d7016 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -19,7 +19,7 @@ jobs: # os: ["ubuntu-latest"] # source: ["source"] python-version: ["3.8", "3.9", "3.10", "3.11"] - graphblas-version: ["7.4.4"] + graphblas-version: ["8.0.0"] steps: - name: Checkout uses: actions/checkout@v3 @@ -36,27 +36,26 @@ jobs: - name: GraphBLAS (from conda-forge) if: (contains(matrix.source, 'conda-forge')) run: | - conda install -c conda-forge graphblas=${{ matrix.graphblas-version }} pytest pytest-randomly + conda install -c conda-forge graphblas=${{ matrix.graphblas-version }} pytest-randomly - name: GraphBLAS (from source) if: (contains(matrix.source, 'source')) run: | - # This isn't working! Why not? - # sh suitesparse.sh refs/tags/${{ matrix.graphblas-version }} + GRAPHBLAS_PREFIX=${CONDA_PREFIX} bash suitesparse.sh refs/tags/${{ matrix.graphblas-version }}.0 # From tag - curl -L https://github.com/DrTimothyAldenDavis/GraphBLAS/archive/refs/tags/v${{ matrix.graphblas-version }}.tar.gz | tar xzf - - pushd GraphBLAS-${{ matrix.graphblas-version }}/build + # curl -L https://github.com/DrTimothyAldenDavis/GraphBLAS/archive/refs/tags/v${{ matrix.graphblas-version }}.tar.gz | tar xzf - + # pushd GraphBLAS-${{ matrix.graphblas-version }}/build # From branch # curl -L https://github.com/DrTimothyAldenDavis/GraphBLAS/tarball/${{ matrix.graphblas-version }} | tar xzf - # pushd DrTim*/build - echo ${CONDA_PREFIX} - cmake -DCMAKE_INSTALL_PREFIX=${CONDA_PREFIX} -DCMAKE_INSTALL_LIBDIR=lib -DCMAKE_BUILD_TYPE=Release .. - cat Makefile - make all JOBS=16 - make install - popd + # echo ${CONDA_PREFIX} + # cmake -DCMAKE_INSTALL_PREFIX=${CONDA_PREFIX} -DCMAKE_INSTALL_LIBDIR=lib -DCMAKE_BUILD_TYPE=Release .. + # cat Makefile + # make all JOBS=16 + # make install + # popd - name: Build run: | pip install -e . --no-deps diff --git a/suitesparse.sh b/suitesparse.sh index 2dd719b..080201a 100755 --- a/suitesparse.sh +++ b/suitesparse.sh @@ -1,8 +1,7 @@ #!/bin/bash # parse SuiteSparse version from first argument, a git tag that ends in the version (no leading v) -if [[ $1 =~ refs/tags/([0-9]*\.[0-9]*\.[0-9]*)\..*$ ]]; -then +if [[ $1 =~ refs/tags/([0-9]*\.[0-9]*\.[0-9]*)\..*$ ]]; then VERSION=${BASH_REMATCH[1]} else echo "Specify a SuiteSparse version, such as: $0 refs/tags/7.4.3.0" diff --git a/suitesparse_graphblas/__init__.py b/suitesparse_graphblas/__init__.py index 15931d7..c61a6b9 100644 --- a/suitesparse_graphblas/__init__.py +++ b/suitesparse_graphblas/__init__.py @@ -181,7 +181,6 @@ def libget(name): "struct GB_Type_opaque *": lib.GrB_Type_error, "struct GB_UnaryOp_opaque *": lib.GrB_UnaryOp_error, "struct GB_BinaryOp_opaque *": lib.GrB_BinaryOp_error, - "struct GB_SelectOp_opaque *": lib.GxB_SelectOp_error, "struct GB_Monoid_opaque *": lib.GrB_Monoid_error, "struct GB_Semiring_opaque *": lib.GrB_Semiring_error, "struct GB_Scalar_opaque *": lib.GxB_Scalar_error, diff --git a/suitesparse_graphblas/create_headers.py b/suitesparse_graphblas/create_headers.py index cd9c0b9..89c199c 100644 --- a/suitesparse_graphblas/create_headers.py +++ b/suitesparse_graphblas/create_headers.py @@ -276,8 +276,7 @@ def groupby(index, seq): "GRB_SUBVERSION", "GxB_NTHREADS", "GxB_CHUNK", - "GxB_GPU_CONTROL", - "GxB_GPU_CHUNK", + "GxB_GPU_ID", "GxB_HYPERSPARSE", "GxB_SPARSE", "GxB_BITMAP", @@ -294,7 +293,6 @@ def groupby(index, seq): "GxB_FAST_IMPORT", "GxB_MAX_NAME_LEN", "GxB_COMPRESSION_DEFAULT", - "GxB_COMPRESSION_INTEL", "GxB_COMPRESSION_LZ4", "GxB_COMPRESSION_LZ4HC", "GxB_COMPRESSION_ZSTD", @@ -316,6 +314,7 @@ def groupby(index, seq): "CMPLX", "CMPLXF", "GB_GLOBAL", + "GB_HAS_CMPLX_MACROS", "GB_PUBLIC", "GB_restrict", "GRAPHBLAS_H", @@ -625,6 +624,7 @@ def handle_function_node(node): "UnaryOp": "unary", "IndexUnaryOp": "indexunary", "Iterator": "iterator", + "Context": "context", # "everything else" is "core" "getVersion": "core", "Global": "core", diff --git a/suitesparse_graphblas/suitesparse_graphblas.h b/suitesparse_graphblas/suitesparse_graphblas.h index 39630af..4fcb6d0 100644 --- a/suitesparse_graphblas/suitesparse_graphblas.h +++ b/suitesparse_graphblas/suitesparse_graphblas.h @@ -15,12 +15,12 @@ typedef uint64_t GrB_Index; /* GxB typedefs */ typedef double _Complex GxB_FC64_t; typedef float _Complex GxB_FC32_t; +typedef struct GB_Context_opaque *GxB_Context; typedef struct GB_Iterator_opaque *GxB_Iterator; typedef struct GB_Scalar_opaque *GxB_Scalar; typedef struct GB_SelectOp_opaque *GxB_SelectOp; /* GxB typedefs (functions) */ -typedef bool (*GxB_select_function)(GrB_Index i, GrB_Index j, const void *x, const void *thunk); typedef void (*GxB_binary_function)(void *, const void *, const void *); typedef void (*GxB_index_unary_function)(void *z, const void *x, GrB_Index i, GrB_Index j, const void *y); typedef void (*GxB_unary_function)(void *, const void *); @@ -32,14 +32,10 @@ typedef enum GrB_MASK = 1, GrB_INP0 = 2, GrB_INP1 = 3, - GxB_DESCRIPTOR_NTHREADS = 5, - GxB_DESCRIPTOR_CHUNK = 7, - GxB_DESCRIPTOR_GPU_CONTROL = 21, - GxB_DESCRIPTOR_GPU_CHUNK = 22, - GxB_AxB_METHOD = 1000, - GxB_SORT = 35, - GxB_COMPRESSION = 36, - GxB_IMPORT = 37 + GxB_AxB_METHOD = 7090, + GxB_SORT = 7091, + GxB_COMPRESSION = 7092, + GxB_IMPORT = 7093 } GrB_Desc_Field; typedef enum @@ -49,13 +45,11 @@ typedef enum GrB_COMP = 2, GrB_STRUCTURE = 4, GrB_TRAN = 3, - GxB_GPU_ALWAYS = 2001, - GxB_GPU_NEVER = 2002, - GxB_AxB_GUSTAVSON = 1001, - GxB_AxB_DOT = 1003, - GxB_AxB_HASH = 1004, - GxB_AxB_SAXPY = 1005, - GxB_SECURE_IMPORT = 502 + GxB_AxB_GUSTAVSON = 7081, + GxB_AxB_DOT = 7083, + GxB_AxB_HASH = 7084, + GxB_AxB_SAXPY = 7085, + GxB_SECURE_IMPORT = 7080 } GrB_Desc_Value; typedef enum @@ -69,7 +63,7 @@ typedef enum { GrB_SUCCESS = 0, GrB_NO_VALUE = 1, - GxB_EXHAUSTED = 2, + GxB_EXHAUSTED = 7089, GrB_UNINITIALIZED_OBJECT = -1, GrB_NULL_POINTER = -2, GrB_INVALID_VALUE = -3, @@ -90,8 +84,8 @@ typedef enum { GrB_NONBLOCKING = 0, GrB_BLOCKING = 1, - GxB_NONBLOCKING_GPU = 2, - GxB_BLOCKING_GPU = 3 + GxB_NONBLOCKING_GPU = 7099, + GxB_BLOCKING_GPU = 7098 } GrB_Mode; typedef enum @@ -101,6 +95,13 @@ typedef enum } GrB_WaitMode; /* GxB enums */ +typedef enum +{ + GxB_CONTEXT_NTHREADS = 7086, + GxB_CONTEXT_CHUNK = 7087, + GxB_CONTEXT_GPU_ID = 7088 +} GxB_Context_Field; + typedef enum { GxB_BY_ROW = 0, @@ -110,36 +111,58 @@ typedef enum typedef enum { - GxB_HYPER_SWITCH = 0, - GxB_BITMAP_SWITCH = 34, - GxB_FORMAT = 1, - GxB_MODE = 2, - GxB_LIBRARY_NAME = 8, - GxB_LIBRARY_VERSION = 9, - GxB_LIBRARY_DATE = 10, - GxB_LIBRARY_ABOUT = 11, - GxB_LIBRARY_URL = 12, - GxB_LIBRARY_LICENSE = 13, - GxB_LIBRARY_COMPILE_DATE = 14, - GxB_LIBRARY_COMPILE_TIME = 15, - GxB_API_VERSION = 16, - GxB_API_DATE = 17, - GxB_API_ABOUT = 18, - GxB_API_URL = 19, - GxB_COMPILER_VERSION = 23, - GxB_COMPILER_NAME = 24, - GxB_LIBRARY_OPENMP = 25, - GxB_GLOBAL_NTHREADS = 5, - GxB_GLOBAL_CHUNK = 7, - GxB_BURBLE = 99, - GxB_PRINTF = 101, - GxB_FLUSH = 102, - GxB_MEMORY_POOL = 103, - GxB_PRINT_1BASED = 104, - GxB_SPARSITY_STATUS = 33, - GxB_SPARSITY_CONTROL = 32, - GxB_GLOBAL_GPU_CONTROL = 21, - GxB_GLOBAL_GPU_CHUNK = 22 + GxB_JIT_OFF = 0, + GxB_JIT_PAUSE = 1, + GxB_JIT_RUN = 2, + GxB_JIT_LOAD = 3, + GxB_JIT_ON = 4 +} GxB_JIT_Control; + +typedef enum +{ + GxB_HYPER_SWITCH = 7000, + GxB_BITMAP_SWITCH = 7001, + GxB_FORMAT = 7002, + GxB_MODE = 7003, + GxB_LIBRARY_NAME = 7004, + GxB_LIBRARY_VERSION = 7005, + GxB_LIBRARY_DATE = 7006, + GxB_LIBRARY_ABOUT = 7007, + GxB_LIBRARY_URL = 7008, + GxB_LIBRARY_LICENSE = 7009, + GxB_LIBRARY_COMPILE_DATE = 7010, + GxB_LIBRARY_COMPILE_TIME = 7011, + GxB_API_VERSION = 7012, + GxB_API_DATE = 7013, + GxB_API_ABOUT = 7014, + GxB_API_URL = 7015, + GxB_COMPILER_VERSION = 7016, + GxB_COMPILER_NAME = 7017, + GxB_LIBRARY_OPENMP = 7018, + GxB_GLOBAL_NTHREADS = 7086, + GxB_GLOBAL_CHUNK = 7087, + GxB_GLOBAL_GPU_ID = 7088, + GxB_BURBLE = 7019, + GxB_PRINTF = 7020, + GxB_FLUSH = 7021, + GxB_MEMORY_POOL = 7022, + GxB_PRINT_1BASED = 7023, + GxB_JIT_C_COMPILER_NAME = 7024, + GxB_JIT_C_COMPILER_FLAGS = 7025, + GxB_JIT_C_LINKER_FLAGS = 7026, + GxB_JIT_C_LIBRARIES = 7027, + GxB_JIT_C_PREFACE = 7028, + GxB_JIT_C_CONTROL = 7029, + GxB_JIT_CACHE_PATH = 7030, + GxB_JIT_C_CMAKE_LIBS = 7031, + GxB_JIT_USE_CMAKE = 7032, + GxB_JIT_ERROR_LOG = 7033, + GxB_SPARSITY_STATUS = 7034, + GxB_SPARSITY_CONTROL = 7036, + GxB_MALLOC_FUNCTION = 7037, + GxB_CALLOC_FUNCTION = 7038, + GxB_REALLOC_FUNCTION = 7039, + GxB_FREE_FUNCTION = 7040 } GxB_Option_Field; typedef enum @@ -2603,6 +2626,7 @@ extern GrB_UnaryOp GxB_TRUNC_FP32; extern GrB_UnaryOp GxB_TRUNC_FP64; /* GxB objects */ +extern GxB_Context GxB_CONTEXT_WORLD; extern GxB_SelectOp GxB_DIAG; extern GxB_SelectOp GxB_EQ_THUNK; extern GxB_SelectOp GxB_EQ_ZERO; @@ -3063,9 +3087,6 @@ GrB_Info GrB_Vector_wait(GrB_Vector v, GrB_WaitMode waitmode); * GB functions * ***************/ -/* binary */ -GrB_Info GB_BinaryOp_new(GrB_BinaryOp *binaryop, GxB_binary_function function, GrB_Type ztype, GrB_Type xtype, GrB_Type ytype, const char *binop_name); - /* iterator */ GrB_Info GB_Iterator_rc_bitmap_next(GxB_Iterator iterator); GrB_Info GB_Iterator_rc_seek(GxB_Iterator iterator, GrB_Index j, bool jth_vector); @@ -3074,15 +3095,6 @@ GrB_Info GB_Vector_Iterator_bitmap_seek(GxB_Iterator iterator, GrB_Index unused) /* matrix */ GrB_Info GB_Iterator_attach(GxB_Iterator iterator, GrB_Matrix A, GxB_Format_Value format, GrB_Descriptor desc); -/* selectop */ -GrB_Info GB_SelectOp_new(GxB_SelectOp *selectop, GxB_select_function function, GrB_Type xtype, GrB_Type ttype, const char *name); - -/* type */ -GrB_Info GB_Type_new(GrB_Type *type, size_t sizeof_ctype, const char *type_name); - -/* unary */ -GrB_Info GB_UnaryOp_new(GrB_UnaryOp *unaryop, GxB_unary_function function, GrB_Type ztype, GrB_Type xtype, const char *unop_name); - /**************** * GxB functions * ****************/ @@ -3097,14 +3109,28 @@ GrB_Info GxB_BinaryOp_ytype_name(char *type_name, const GrB_BinaryOp binaryop); GrB_Info GxB_BinaryOp_ztype(GrB_Type *ztype, GrB_BinaryOp binaryop); GrB_Info GxB_BinaryOp_ztype_name(char *type_name, const GrB_BinaryOp binaryop); +/* context */ +GrB_Info GxB_Context_disengage(GxB_Context Context); +GrB_Info GxB_Context_engage(GxB_Context Context); +GrB_Info GxB_Context_fprint(GxB_Context Context, const char *name, GxB_Print_Level pr, FILE *f); +GrB_Info GxB_Context_free(GxB_Context *Context); +GrB_Info GxB_Context_get(GxB_Context Context, GxB_Context_Field field, ...); +GrB_Info GxB_Context_get_FP64(GxB_Context Context, GxB_Context_Field field, double *value); +GrB_Info GxB_Context_get_INT32(GxB_Context Context, GxB_Context_Field field, int32_t *value); +GrB_Info GxB_Context_new(GxB_Context *Context); +GrB_Info GxB_Context_set(GxB_Context Context, GxB_Context_Field field, ...); +GrB_Info GxB_Context_set_FP64(GxB_Context Context, GxB_Context_Field field, double value); +GrB_Info GxB_Context_set_INT32(GxB_Context Context, GxB_Context_Field field, int32_t value); + /* core */ GrB_Info GxB_Global_Option_get(GxB_Option_Field field, ...); -GrB_Info GxB_Global_Option_get_CHAR(GxB_Option_Field field, char **value); +GrB_Info GxB_Global_Option_get_CHAR(GxB_Option_Field field, const char **value); GrB_Info GxB_Global_Option_get_FP64(GxB_Option_Field field, double *value); GrB_Info GxB_Global_Option_get_FUNCTION(GxB_Option_Field field, void **value); GrB_Info GxB_Global_Option_get_INT32(GxB_Option_Field field, int32_t *value); GrB_Info GxB_Global_Option_get_INT64(GxB_Option_Field field, int64_t *value); GrB_Info GxB_Global_Option_set(GxB_Option_Field field, ...); +GrB_Info GxB_Global_Option_set_CHAR(GxB_Option_Field field, const char *value); GrB_Info GxB_Global_Option_set_FP64(GxB_Option_Field field, double value); GrB_Info GxB_Global_Option_set_FP64_ARRAY(GxB_Option_Field field, double *value); GrB_Info GxB_Global_Option_set_FUNCTION(GxB_Option_Field field, void *value); @@ -3343,12 +3369,8 @@ GrB_Info GxB_Scalar_type_name(char *type_name, const GrB_Scalar s); GrB_Info GxB_Scalar_wait(GrB_Scalar *s); /* selectop */ -GrB_Info GxB_SelectOp_error(const char **error, const GxB_SelectOp op); -GrB_Info GxB_SelectOp_fprint(GxB_SelectOp selectop, const char *name, GxB_Print_Level pr, FILE *f); -GrB_Info GxB_SelectOp_free(GxB_SelectOp *selectop); -GrB_Info GxB_SelectOp_new(GxB_SelectOp *selectop, GxB_select_function function, GrB_Type xtype, GrB_Type ttype); +GrB_Info GxB_SelectOp_fprint(GxB_SelectOp op, const char *name, GxB_Print_Level pr, FILE *f); GrB_Info GxB_SelectOp_ttype(GrB_Type *ttype, GxB_SelectOp selectop); -GrB_Info GxB_SelectOp_wait(GxB_SelectOp op, GrB_WaitMode waitmode); GrB_Info GxB_SelectOp_xtype(GrB_Type *xtype, GxB_SelectOp selectop); /* semiring */ @@ -3453,7 +3475,6 @@ GrB_Info GxB_Vector_unpack_Full(GrB_Vector v, void **vx, GrB_Index *vx_size, boo #define GxB_BITMAP ... #define GxB_CHUNK ... #define GxB_COMPRESSION_DEFAULT ... -#define GxB_COMPRESSION_INTEL ... #define GxB_COMPRESSION_LZ4 ... #define GxB_COMPRESSION_LZ4HC ... #define GxB_COMPRESSION_NONE ... @@ -3461,8 +3482,7 @@ GrB_Info GxB_Vector_unpack_Full(GrB_Vector v, void **vx, GrB_Index *vx_size, boo #define GxB_END ... #define GxB_FAST_IMPORT ... #define GxB_FULL ... -#define GxB_GPU_CHUNK ... -#define GxB_GPU_CONTROL ... +#define GxB_GPU_ID ... #define GxB_HYPERSPARSE ... #define GxB_IMPLEMENTATION ... #define GxB_IMPLEMENTATION_MAJOR ... diff --git a/suitesparse_graphblas/suitesparse_graphblas_arm64.h b/suitesparse_graphblas/suitesparse_graphblas_arm64.h deleted file mode 100644 index 39630af..0000000 --- a/suitesparse_graphblas/suitesparse_graphblas_arm64.h +++ /dev/null @@ -1,3491 +0,0 @@ -/* This file is automatically generated */ -/* GrB typedefs */ -typedef struct GB_BinaryOp_opaque *GrB_BinaryOp; -typedef struct GB_Descriptor_opaque *GrB_Descriptor; -typedef struct GB_IndexUnaryOp_opaque *GrB_IndexUnaryOp; -typedef struct GB_Matrix_opaque *GrB_Matrix; -typedef struct GB_Monoid_opaque *GrB_Monoid; -typedef struct GB_Scalar_opaque *GrB_Scalar; -typedef struct GB_Semiring_opaque *GrB_Semiring; -typedef struct GB_Type_opaque *GrB_Type; -typedef struct GB_UnaryOp_opaque *GrB_UnaryOp; -typedef struct GB_Vector_opaque *GrB_Vector; -typedef uint64_t GrB_Index; - -/* GxB typedefs */ -typedef double _Complex GxB_FC64_t; -typedef float _Complex GxB_FC32_t; -typedef struct GB_Iterator_opaque *GxB_Iterator; -typedef struct GB_Scalar_opaque *GxB_Scalar; -typedef struct GB_SelectOp_opaque *GxB_SelectOp; - -/* GxB typedefs (functions) */ -typedef bool (*GxB_select_function)(GrB_Index i, GrB_Index j, const void *x, const void *thunk); -typedef void (*GxB_binary_function)(void *, const void *, const void *); -typedef void (*GxB_index_unary_function)(void *z, const void *x, GrB_Index i, GrB_Index j, const void *y); -typedef void (*GxB_unary_function)(void *, const void *); - -/* GrB enums */ -typedef enum -{ - GrB_OUTP = 0, - GrB_MASK = 1, - GrB_INP0 = 2, - GrB_INP1 = 3, - GxB_DESCRIPTOR_NTHREADS = 5, - GxB_DESCRIPTOR_CHUNK = 7, - GxB_DESCRIPTOR_GPU_CONTROL = 21, - GxB_DESCRIPTOR_GPU_CHUNK = 22, - GxB_AxB_METHOD = 1000, - GxB_SORT = 35, - GxB_COMPRESSION = 36, - GxB_IMPORT = 37 -} GrB_Desc_Field; - -typedef enum -{ - GxB_DEFAULT = 0, - GrB_REPLACE = 1, - GrB_COMP = 2, - GrB_STRUCTURE = 4, - GrB_TRAN = 3, - GxB_GPU_ALWAYS = 2001, - GxB_GPU_NEVER = 2002, - GxB_AxB_GUSTAVSON = 1001, - GxB_AxB_DOT = 1003, - GxB_AxB_HASH = 1004, - GxB_AxB_SAXPY = 1005, - GxB_SECURE_IMPORT = 502 -} GrB_Desc_Value; - -typedef enum -{ - GrB_CSR_FORMAT = 0, - GrB_CSC_FORMAT = 1, - GrB_COO_FORMAT = 2 -} GrB_Format; - -typedef enum -{ - GrB_SUCCESS = 0, - GrB_NO_VALUE = 1, - GxB_EXHAUSTED = 2, - GrB_UNINITIALIZED_OBJECT = -1, - GrB_NULL_POINTER = -2, - GrB_INVALID_VALUE = -3, - GrB_INVALID_INDEX = -4, - GrB_DOMAIN_MISMATCH = -5, - GrB_DIMENSION_MISMATCH = -6, - GrB_OUTPUT_NOT_EMPTY = -7, - GrB_NOT_IMPLEMENTED = -8, - GrB_PANIC = -101, - GrB_OUT_OF_MEMORY = -102, - GrB_INSUFFICIENT_SPACE = -103, - GrB_INVALID_OBJECT = -104, - GrB_INDEX_OUT_OF_BOUNDS = -105, - GrB_EMPTY_OBJECT = -106 -} GrB_Info; - -typedef enum -{ - GrB_NONBLOCKING = 0, - GrB_BLOCKING = 1, - GxB_NONBLOCKING_GPU = 2, - GxB_BLOCKING_GPU = 3 -} GrB_Mode; - -typedef enum -{ - GrB_COMPLETE = 0, - GrB_MATERIALIZE = 1 -} GrB_WaitMode; - -/* GxB enums */ -typedef enum -{ - GxB_BY_ROW = 0, - GxB_BY_COL = 1, - GxB_NO_FORMAT = -1 -} GxB_Format_Value; - -typedef enum -{ - GxB_HYPER_SWITCH = 0, - GxB_BITMAP_SWITCH = 34, - GxB_FORMAT = 1, - GxB_MODE = 2, - GxB_LIBRARY_NAME = 8, - GxB_LIBRARY_VERSION = 9, - GxB_LIBRARY_DATE = 10, - GxB_LIBRARY_ABOUT = 11, - GxB_LIBRARY_URL = 12, - GxB_LIBRARY_LICENSE = 13, - GxB_LIBRARY_COMPILE_DATE = 14, - GxB_LIBRARY_COMPILE_TIME = 15, - GxB_API_VERSION = 16, - GxB_API_DATE = 17, - GxB_API_ABOUT = 18, - GxB_API_URL = 19, - GxB_COMPILER_VERSION = 23, - GxB_COMPILER_NAME = 24, - GxB_LIBRARY_OPENMP = 25, - GxB_GLOBAL_NTHREADS = 5, - GxB_GLOBAL_CHUNK = 7, - GxB_BURBLE = 99, - GxB_PRINTF = 101, - GxB_FLUSH = 102, - GxB_MEMORY_POOL = 103, - GxB_PRINT_1BASED = 104, - GxB_SPARSITY_STATUS = 33, - GxB_SPARSITY_CONTROL = 32, - GxB_GLOBAL_GPU_CONTROL = 21, - GxB_GLOBAL_GPU_CHUNK = 22 -} GxB_Option_Field; - -typedef enum -{ - GxB_SILENT = 0, - GxB_SUMMARY = 1, - GxB_SHORT = 2, - GxB_COMPLETE = 3, - GxB_SHORT_VERBOSE = 4, - GxB_COMPLETE_VERBOSE = 5 -} GxB_Print_Level; - -/* GrB consts */ -extern const uint64_t *GrB_ALL; - -/* GxB consts */ -extern const GxB_Format_Value GxB_FORMAT_DEFAULT; -extern const double GxB_ALWAYS_HYPER; -extern const double GxB_HYPER_DEFAULT; -extern const double GxB_NEVER_HYPER; - -/* GrB objects */ -extern GrB_BinaryOp GrB_BAND_INT8; -extern GrB_BinaryOp GrB_BAND_INT16; -extern GrB_BinaryOp GrB_BAND_INT32; -extern GrB_BinaryOp GrB_BAND_INT64; -extern GrB_BinaryOp GrB_BAND_UINT8; -extern GrB_BinaryOp GrB_BAND_UINT16; -extern GrB_BinaryOp GrB_BAND_UINT32; -extern GrB_BinaryOp GrB_BAND_UINT64; -extern GrB_BinaryOp GrB_BOR_INT8; -extern GrB_BinaryOp GrB_BOR_INT16; -extern GrB_BinaryOp GrB_BOR_INT32; -extern GrB_BinaryOp GrB_BOR_INT64; -extern GrB_BinaryOp GrB_BOR_UINT8; -extern GrB_BinaryOp GrB_BOR_UINT16; -extern GrB_BinaryOp GrB_BOR_UINT32; -extern GrB_BinaryOp GrB_BOR_UINT64; -extern GrB_BinaryOp GrB_BXNOR_INT8; -extern GrB_BinaryOp GrB_BXNOR_INT16; -extern GrB_BinaryOp GrB_BXNOR_INT32; -extern GrB_BinaryOp GrB_BXNOR_INT64; -extern GrB_BinaryOp GrB_BXNOR_UINT8; -extern GrB_BinaryOp GrB_BXNOR_UINT16; -extern GrB_BinaryOp GrB_BXNOR_UINT32; -extern GrB_BinaryOp GrB_BXNOR_UINT64; -extern GrB_BinaryOp GrB_BXOR_INT8; -extern GrB_BinaryOp GrB_BXOR_INT16; -extern GrB_BinaryOp GrB_BXOR_INT32; -extern GrB_BinaryOp GrB_BXOR_INT64; -extern GrB_BinaryOp GrB_BXOR_UINT8; -extern GrB_BinaryOp GrB_BXOR_UINT16; -extern GrB_BinaryOp GrB_BXOR_UINT32; -extern GrB_BinaryOp GrB_BXOR_UINT64; -extern GrB_BinaryOp GrB_DIV_BOOL; -extern GrB_BinaryOp GrB_DIV_FP32; -extern GrB_BinaryOp GrB_DIV_FP64; -extern GrB_BinaryOp GrB_DIV_INT8; -extern GrB_BinaryOp GrB_DIV_INT16; -extern GrB_BinaryOp GrB_DIV_INT32; -extern GrB_BinaryOp GrB_DIV_INT64; -extern GrB_BinaryOp GrB_DIV_UINT8; -extern GrB_BinaryOp GrB_DIV_UINT16; -extern GrB_BinaryOp GrB_DIV_UINT32; -extern GrB_BinaryOp GrB_DIV_UINT64; -extern GrB_BinaryOp GrB_EQ_BOOL; -extern GrB_BinaryOp GrB_EQ_FP32; -extern GrB_BinaryOp GrB_EQ_FP64; -extern GrB_BinaryOp GrB_EQ_INT8; -extern GrB_BinaryOp GrB_EQ_INT16; -extern GrB_BinaryOp GrB_EQ_INT32; -extern GrB_BinaryOp GrB_EQ_INT64; -extern GrB_BinaryOp GrB_EQ_UINT8; -extern GrB_BinaryOp GrB_EQ_UINT16; -extern GrB_BinaryOp GrB_EQ_UINT32; -extern GrB_BinaryOp GrB_EQ_UINT64; -extern GrB_BinaryOp GrB_FIRST_BOOL; -extern GrB_BinaryOp GrB_FIRST_FP32; -extern GrB_BinaryOp GrB_FIRST_FP64; -extern GrB_BinaryOp GrB_FIRST_INT8; -extern GrB_BinaryOp GrB_FIRST_INT16; -extern GrB_BinaryOp GrB_FIRST_INT32; -extern GrB_BinaryOp GrB_FIRST_INT64; -extern GrB_BinaryOp GrB_FIRST_UINT8; -extern GrB_BinaryOp GrB_FIRST_UINT16; -extern GrB_BinaryOp GrB_FIRST_UINT32; -extern GrB_BinaryOp GrB_FIRST_UINT64; -extern GrB_BinaryOp GrB_GE_BOOL; -extern GrB_BinaryOp GrB_GE_FP32; -extern GrB_BinaryOp GrB_GE_FP64; -extern GrB_BinaryOp GrB_GE_INT8; -extern GrB_BinaryOp GrB_GE_INT16; -extern GrB_BinaryOp GrB_GE_INT32; -extern GrB_BinaryOp GrB_GE_INT64; -extern GrB_BinaryOp GrB_GE_UINT8; -extern GrB_BinaryOp GrB_GE_UINT16; -extern GrB_BinaryOp GrB_GE_UINT32; -extern GrB_BinaryOp GrB_GE_UINT64; -extern GrB_BinaryOp GrB_GT_BOOL; -extern GrB_BinaryOp GrB_GT_FP32; -extern GrB_BinaryOp GrB_GT_FP64; -extern GrB_BinaryOp GrB_GT_INT8; -extern GrB_BinaryOp GrB_GT_INT16; -extern GrB_BinaryOp GrB_GT_INT32; -extern GrB_BinaryOp GrB_GT_INT64; -extern GrB_BinaryOp GrB_GT_UINT8; -extern GrB_BinaryOp GrB_GT_UINT16; -extern GrB_BinaryOp GrB_GT_UINT32; -extern GrB_BinaryOp GrB_GT_UINT64; -extern GrB_BinaryOp GrB_LAND; -extern GrB_BinaryOp GrB_LE_BOOL; -extern GrB_BinaryOp GrB_LE_FP32; -extern GrB_BinaryOp GrB_LE_FP64; -extern GrB_BinaryOp GrB_LE_INT8; -extern GrB_BinaryOp GrB_LE_INT16; -extern GrB_BinaryOp GrB_LE_INT32; -extern GrB_BinaryOp GrB_LE_INT64; -extern GrB_BinaryOp GrB_LE_UINT8; -extern GrB_BinaryOp GrB_LE_UINT16; -extern GrB_BinaryOp GrB_LE_UINT32; -extern GrB_BinaryOp GrB_LE_UINT64; -extern GrB_BinaryOp GrB_LOR; -extern GrB_BinaryOp GrB_LT_BOOL; -extern GrB_BinaryOp GrB_LT_FP32; -extern GrB_BinaryOp GrB_LT_FP64; -extern GrB_BinaryOp GrB_LT_INT8; -extern GrB_BinaryOp GrB_LT_INT16; -extern GrB_BinaryOp GrB_LT_INT32; -extern GrB_BinaryOp GrB_LT_INT64; -extern GrB_BinaryOp GrB_LT_UINT8; -extern GrB_BinaryOp GrB_LT_UINT16; -extern GrB_BinaryOp GrB_LT_UINT32; -extern GrB_BinaryOp GrB_LT_UINT64; -extern GrB_BinaryOp GrB_LXNOR; -extern GrB_BinaryOp GrB_LXOR; -extern GrB_BinaryOp GrB_MAX_BOOL; -extern GrB_BinaryOp GrB_MAX_FP32; -extern GrB_BinaryOp GrB_MAX_FP64; -extern GrB_BinaryOp GrB_MAX_INT8; -extern GrB_BinaryOp GrB_MAX_INT16; -extern GrB_BinaryOp GrB_MAX_INT32; -extern GrB_BinaryOp GrB_MAX_INT64; -extern GrB_BinaryOp GrB_MAX_UINT8; -extern GrB_BinaryOp GrB_MAX_UINT16; -extern GrB_BinaryOp GrB_MAX_UINT32; -extern GrB_BinaryOp GrB_MAX_UINT64; -extern GrB_BinaryOp GrB_MINUS_BOOL; -extern GrB_BinaryOp GrB_MINUS_FP32; -extern GrB_BinaryOp GrB_MINUS_FP64; -extern GrB_BinaryOp GrB_MINUS_INT8; -extern GrB_BinaryOp GrB_MINUS_INT16; -extern GrB_BinaryOp GrB_MINUS_INT32; -extern GrB_BinaryOp GrB_MINUS_INT64; -extern GrB_BinaryOp GrB_MINUS_UINT8; -extern GrB_BinaryOp GrB_MINUS_UINT16; -extern GrB_BinaryOp GrB_MINUS_UINT32; -extern GrB_BinaryOp GrB_MINUS_UINT64; -extern GrB_BinaryOp GrB_MIN_BOOL; -extern GrB_BinaryOp GrB_MIN_FP32; -extern GrB_BinaryOp GrB_MIN_FP64; -extern GrB_BinaryOp GrB_MIN_INT8; -extern GrB_BinaryOp GrB_MIN_INT16; -extern GrB_BinaryOp GrB_MIN_INT32; -extern GrB_BinaryOp GrB_MIN_INT64; -extern GrB_BinaryOp GrB_MIN_UINT8; -extern GrB_BinaryOp GrB_MIN_UINT16; -extern GrB_BinaryOp GrB_MIN_UINT32; -extern GrB_BinaryOp GrB_MIN_UINT64; -extern GrB_BinaryOp GrB_NE_BOOL; -extern GrB_BinaryOp GrB_NE_FP32; -extern GrB_BinaryOp GrB_NE_FP64; -extern GrB_BinaryOp GrB_NE_INT8; -extern GrB_BinaryOp GrB_NE_INT16; -extern GrB_BinaryOp GrB_NE_INT32; -extern GrB_BinaryOp GrB_NE_INT64; -extern GrB_BinaryOp GrB_NE_UINT8; -extern GrB_BinaryOp GrB_NE_UINT16; -extern GrB_BinaryOp GrB_NE_UINT32; -extern GrB_BinaryOp GrB_NE_UINT64; -extern GrB_BinaryOp GrB_ONEB_BOOL; -extern GrB_BinaryOp GrB_ONEB_FP32; -extern GrB_BinaryOp GrB_ONEB_FP64; -extern GrB_BinaryOp GrB_ONEB_INT8; -extern GrB_BinaryOp GrB_ONEB_INT16; -extern GrB_BinaryOp GrB_ONEB_INT32; -extern GrB_BinaryOp GrB_ONEB_INT64; -extern GrB_BinaryOp GrB_ONEB_UINT8; -extern GrB_BinaryOp GrB_ONEB_UINT16; -extern GrB_BinaryOp GrB_ONEB_UINT32; -extern GrB_BinaryOp GrB_ONEB_UINT64; -extern GrB_BinaryOp GrB_PLUS_BOOL; -extern GrB_BinaryOp GrB_PLUS_FP32; -extern GrB_BinaryOp GrB_PLUS_FP64; -extern GrB_BinaryOp GrB_PLUS_INT8; -extern GrB_BinaryOp GrB_PLUS_INT16; -extern GrB_BinaryOp GrB_PLUS_INT32; -extern GrB_BinaryOp GrB_PLUS_INT64; -extern GrB_BinaryOp GrB_PLUS_UINT8; -extern GrB_BinaryOp GrB_PLUS_UINT16; -extern GrB_BinaryOp GrB_PLUS_UINT32; -extern GrB_BinaryOp GrB_PLUS_UINT64; -extern GrB_BinaryOp GrB_SECOND_BOOL; -extern GrB_BinaryOp GrB_SECOND_FP32; -extern GrB_BinaryOp GrB_SECOND_FP64; -extern GrB_BinaryOp GrB_SECOND_INT8; -extern GrB_BinaryOp GrB_SECOND_INT16; -extern GrB_BinaryOp GrB_SECOND_INT32; -extern GrB_BinaryOp GrB_SECOND_INT64; -extern GrB_BinaryOp GrB_SECOND_UINT8; -extern GrB_BinaryOp GrB_SECOND_UINT16; -extern GrB_BinaryOp GrB_SECOND_UINT32; -extern GrB_BinaryOp GrB_SECOND_UINT64; -extern GrB_BinaryOp GrB_TIMES_BOOL; -extern GrB_BinaryOp GrB_TIMES_FP32; -extern GrB_BinaryOp GrB_TIMES_FP64; -extern GrB_BinaryOp GrB_TIMES_INT8; -extern GrB_BinaryOp GrB_TIMES_INT16; -extern GrB_BinaryOp GrB_TIMES_INT32; -extern GrB_BinaryOp GrB_TIMES_INT64; -extern GrB_BinaryOp GrB_TIMES_UINT8; -extern GrB_BinaryOp GrB_TIMES_UINT16; -extern GrB_BinaryOp GrB_TIMES_UINT32; -extern GrB_BinaryOp GrB_TIMES_UINT64; -extern GrB_Descriptor GrB_DESC_C; -extern GrB_Descriptor GrB_DESC_CT0; -extern GrB_Descriptor GrB_DESC_CT0T1; -extern GrB_Descriptor GrB_DESC_CT1; -extern GrB_Descriptor GrB_DESC_R; -extern GrB_Descriptor GrB_DESC_RC; -extern GrB_Descriptor GrB_DESC_RCT0; -extern GrB_Descriptor GrB_DESC_RCT0T1; -extern GrB_Descriptor GrB_DESC_RCT1; -extern GrB_Descriptor GrB_DESC_RS; -extern GrB_Descriptor GrB_DESC_RSC; -extern GrB_Descriptor GrB_DESC_RSCT0; -extern GrB_Descriptor GrB_DESC_RSCT0T1; -extern GrB_Descriptor GrB_DESC_RSCT1; -extern GrB_Descriptor GrB_DESC_RST0; -extern GrB_Descriptor GrB_DESC_RST0T1; -extern GrB_Descriptor GrB_DESC_RST1; -extern GrB_Descriptor GrB_DESC_RT0; -extern GrB_Descriptor GrB_DESC_RT0T1; -extern GrB_Descriptor GrB_DESC_RT1; -extern GrB_Descriptor GrB_DESC_S; -extern GrB_Descriptor GrB_DESC_SC; -extern GrB_Descriptor GrB_DESC_SCT0; -extern GrB_Descriptor GrB_DESC_SCT0T1; -extern GrB_Descriptor GrB_DESC_SCT1; -extern GrB_Descriptor GrB_DESC_ST0; -extern GrB_Descriptor GrB_DESC_ST0T1; -extern GrB_Descriptor GrB_DESC_ST1; -extern GrB_Descriptor GrB_DESC_T0; -extern GrB_Descriptor GrB_DESC_T0T1; -extern GrB_Descriptor GrB_DESC_T1; -extern GrB_IndexUnaryOp GrB_COLGT; -extern GrB_IndexUnaryOp GrB_COLINDEX_INT32; -extern GrB_IndexUnaryOp GrB_COLINDEX_INT64; -extern GrB_IndexUnaryOp GrB_COLLE; -extern GrB_IndexUnaryOp GrB_DIAG; -extern GrB_IndexUnaryOp GrB_DIAGINDEX_INT32; -extern GrB_IndexUnaryOp GrB_DIAGINDEX_INT64; -extern GrB_IndexUnaryOp GrB_OFFDIAG; -extern GrB_IndexUnaryOp GrB_ROWGT; -extern GrB_IndexUnaryOp GrB_ROWINDEX_INT32; -extern GrB_IndexUnaryOp GrB_ROWINDEX_INT64; -extern GrB_IndexUnaryOp GrB_ROWLE; -extern GrB_IndexUnaryOp GrB_TRIL; -extern GrB_IndexUnaryOp GrB_TRIU; -extern GrB_IndexUnaryOp GrB_VALUEEQ_BOOL; -extern GrB_IndexUnaryOp GrB_VALUEEQ_FP32; -extern GrB_IndexUnaryOp GrB_VALUEEQ_FP64; -extern GrB_IndexUnaryOp GrB_VALUEEQ_INT8; -extern GrB_IndexUnaryOp GrB_VALUEEQ_INT16; -extern GrB_IndexUnaryOp GrB_VALUEEQ_INT32; -extern GrB_IndexUnaryOp GrB_VALUEEQ_INT64; -extern GrB_IndexUnaryOp GrB_VALUEEQ_UINT8; -extern GrB_IndexUnaryOp GrB_VALUEEQ_UINT16; -extern GrB_IndexUnaryOp GrB_VALUEEQ_UINT32; -extern GrB_IndexUnaryOp GrB_VALUEEQ_UINT64; -extern GrB_IndexUnaryOp GrB_VALUEGE_BOOL; -extern GrB_IndexUnaryOp GrB_VALUEGE_FP32; -extern GrB_IndexUnaryOp GrB_VALUEGE_FP64; -extern GrB_IndexUnaryOp GrB_VALUEGE_INT8; -extern GrB_IndexUnaryOp GrB_VALUEGE_INT16; -extern GrB_IndexUnaryOp GrB_VALUEGE_INT32; -extern GrB_IndexUnaryOp GrB_VALUEGE_INT64; -extern GrB_IndexUnaryOp GrB_VALUEGE_UINT8; -extern GrB_IndexUnaryOp GrB_VALUEGE_UINT16; -extern GrB_IndexUnaryOp GrB_VALUEGE_UINT32; -extern GrB_IndexUnaryOp GrB_VALUEGE_UINT64; -extern GrB_IndexUnaryOp GrB_VALUEGT_BOOL; -extern GrB_IndexUnaryOp GrB_VALUEGT_FP32; -extern GrB_IndexUnaryOp GrB_VALUEGT_FP64; -extern GrB_IndexUnaryOp GrB_VALUEGT_INT8; -extern GrB_IndexUnaryOp GrB_VALUEGT_INT16; -extern GrB_IndexUnaryOp GrB_VALUEGT_INT32; -extern GrB_IndexUnaryOp GrB_VALUEGT_INT64; -extern GrB_IndexUnaryOp GrB_VALUEGT_UINT8; -extern GrB_IndexUnaryOp GrB_VALUEGT_UINT16; -extern GrB_IndexUnaryOp GrB_VALUEGT_UINT32; -extern GrB_IndexUnaryOp GrB_VALUEGT_UINT64; -extern GrB_IndexUnaryOp GrB_VALUELE_BOOL; -extern GrB_IndexUnaryOp GrB_VALUELE_FP32; -extern GrB_IndexUnaryOp GrB_VALUELE_FP64; -extern GrB_IndexUnaryOp GrB_VALUELE_INT8; -extern GrB_IndexUnaryOp GrB_VALUELE_INT16; -extern GrB_IndexUnaryOp GrB_VALUELE_INT32; -extern GrB_IndexUnaryOp GrB_VALUELE_INT64; -extern GrB_IndexUnaryOp GrB_VALUELE_UINT8; -extern GrB_IndexUnaryOp GrB_VALUELE_UINT16; -extern GrB_IndexUnaryOp GrB_VALUELE_UINT32; -extern GrB_IndexUnaryOp GrB_VALUELE_UINT64; -extern GrB_IndexUnaryOp GrB_VALUELT_BOOL; -extern GrB_IndexUnaryOp GrB_VALUELT_FP32; -extern GrB_IndexUnaryOp GrB_VALUELT_FP64; -extern GrB_IndexUnaryOp GrB_VALUELT_INT8; -extern GrB_IndexUnaryOp GrB_VALUELT_INT16; -extern GrB_IndexUnaryOp GrB_VALUELT_INT32; -extern GrB_IndexUnaryOp GrB_VALUELT_INT64; -extern GrB_IndexUnaryOp GrB_VALUELT_UINT8; -extern GrB_IndexUnaryOp GrB_VALUELT_UINT16; -extern GrB_IndexUnaryOp GrB_VALUELT_UINT32; -extern GrB_IndexUnaryOp GrB_VALUELT_UINT64; -extern GrB_IndexUnaryOp GrB_VALUENE_BOOL; -extern GrB_IndexUnaryOp GrB_VALUENE_FP32; -extern GrB_IndexUnaryOp GrB_VALUENE_FP64; -extern GrB_IndexUnaryOp GrB_VALUENE_INT8; -extern GrB_IndexUnaryOp GrB_VALUENE_INT16; -extern GrB_IndexUnaryOp GrB_VALUENE_INT32; -extern GrB_IndexUnaryOp GrB_VALUENE_INT64; -extern GrB_IndexUnaryOp GrB_VALUENE_UINT8; -extern GrB_IndexUnaryOp GrB_VALUENE_UINT16; -extern GrB_IndexUnaryOp GrB_VALUENE_UINT32; -extern GrB_IndexUnaryOp GrB_VALUENE_UINT64; -extern GrB_Monoid GrB_LAND_MONOID_BOOL; -extern GrB_Monoid GrB_LOR_MONOID_BOOL; -extern GrB_Monoid GrB_LXNOR_MONOID_BOOL; -extern GrB_Monoid GrB_LXOR_MONOID_BOOL; -extern GrB_Monoid GrB_MAX_MONOID_FP32; -extern GrB_Monoid GrB_MAX_MONOID_FP64; -extern GrB_Monoid GrB_MAX_MONOID_INT8; -extern GrB_Monoid GrB_MAX_MONOID_INT16; -extern GrB_Monoid GrB_MAX_MONOID_INT32; -extern GrB_Monoid GrB_MAX_MONOID_INT64; -extern GrB_Monoid GrB_MAX_MONOID_UINT8; -extern GrB_Monoid GrB_MAX_MONOID_UINT16; -extern GrB_Monoid GrB_MAX_MONOID_UINT32; -extern GrB_Monoid GrB_MAX_MONOID_UINT64; -extern GrB_Monoid GrB_MIN_MONOID_FP32; -extern GrB_Monoid GrB_MIN_MONOID_FP64; -extern GrB_Monoid GrB_MIN_MONOID_INT8; -extern GrB_Monoid GrB_MIN_MONOID_INT16; -extern GrB_Monoid GrB_MIN_MONOID_INT32; -extern GrB_Monoid GrB_MIN_MONOID_INT64; -extern GrB_Monoid GrB_MIN_MONOID_UINT8; -extern GrB_Monoid GrB_MIN_MONOID_UINT16; -extern GrB_Monoid GrB_MIN_MONOID_UINT32; -extern GrB_Monoid GrB_MIN_MONOID_UINT64; -extern GrB_Monoid GrB_PLUS_MONOID_FP32; -extern GrB_Monoid GrB_PLUS_MONOID_FP64; -extern GrB_Monoid GrB_PLUS_MONOID_INT8; -extern GrB_Monoid GrB_PLUS_MONOID_INT16; -extern GrB_Monoid GrB_PLUS_MONOID_INT32; -extern GrB_Monoid GrB_PLUS_MONOID_INT64; -extern GrB_Monoid GrB_PLUS_MONOID_UINT8; -extern GrB_Monoid GrB_PLUS_MONOID_UINT16; -extern GrB_Monoid GrB_PLUS_MONOID_UINT32; -extern GrB_Monoid GrB_PLUS_MONOID_UINT64; -extern GrB_Monoid GrB_TIMES_MONOID_FP32; -extern GrB_Monoid GrB_TIMES_MONOID_FP64; -extern GrB_Monoid GrB_TIMES_MONOID_INT8; -extern GrB_Monoid GrB_TIMES_MONOID_INT16; -extern GrB_Monoid GrB_TIMES_MONOID_INT32; -extern GrB_Monoid GrB_TIMES_MONOID_INT64; -extern GrB_Monoid GrB_TIMES_MONOID_UINT8; -extern GrB_Monoid GrB_TIMES_MONOID_UINT16; -extern GrB_Monoid GrB_TIMES_MONOID_UINT32; -extern GrB_Monoid GrB_TIMES_MONOID_UINT64; -extern GrB_Semiring GrB_LAND_LOR_SEMIRING_BOOL; -extern GrB_Semiring GrB_LOR_LAND_SEMIRING_BOOL; -extern GrB_Semiring GrB_LXNOR_LOR_SEMIRING_BOOL; -extern GrB_Semiring GrB_LXOR_LAND_SEMIRING_BOOL; -extern GrB_Semiring GrB_MAX_FIRST_SEMIRING_FP32; -extern GrB_Semiring GrB_MAX_FIRST_SEMIRING_FP64; -extern GrB_Semiring GrB_MAX_FIRST_SEMIRING_INT8; -extern GrB_Semiring GrB_MAX_FIRST_SEMIRING_INT16; -extern GrB_Semiring GrB_MAX_FIRST_SEMIRING_INT32; -extern GrB_Semiring GrB_MAX_FIRST_SEMIRING_INT64; -extern GrB_Semiring GrB_MAX_FIRST_SEMIRING_UINT8; -extern GrB_Semiring GrB_MAX_FIRST_SEMIRING_UINT16; -extern GrB_Semiring GrB_MAX_FIRST_SEMIRING_UINT32; -extern GrB_Semiring GrB_MAX_FIRST_SEMIRING_UINT64; -extern GrB_Semiring GrB_MAX_MIN_SEMIRING_FP32; -extern GrB_Semiring GrB_MAX_MIN_SEMIRING_FP64; -extern GrB_Semiring GrB_MAX_MIN_SEMIRING_INT8; -extern GrB_Semiring GrB_MAX_MIN_SEMIRING_INT16; -extern GrB_Semiring GrB_MAX_MIN_SEMIRING_INT32; -extern GrB_Semiring GrB_MAX_MIN_SEMIRING_INT64; -extern GrB_Semiring GrB_MAX_MIN_SEMIRING_UINT8; -extern GrB_Semiring GrB_MAX_MIN_SEMIRING_UINT16; -extern GrB_Semiring GrB_MAX_MIN_SEMIRING_UINT32; -extern GrB_Semiring GrB_MAX_MIN_SEMIRING_UINT64; -extern GrB_Semiring GrB_MAX_PLUS_SEMIRING_FP32; -extern GrB_Semiring GrB_MAX_PLUS_SEMIRING_FP64; -extern GrB_Semiring GrB_MAX_PLUS_SEMIRING_INT8; -extern GrB_Semiring GrB_MAX_PLUS_SEMIRING_INT16; -extern GrB_Semiring GrB_MAX_PLUS_SEMIRING_INT32; -extern GrB_Semiring GrB_MAX_PLUS_SEMIRING_INT64; -extern GrB_Semiring GrB_MAX_PLUS_SEMIRING_UINT8; -extern GrB_Semiring GrB_MAX_PLUS_SEMIRING_UINT16; -extern GrB_Semiring GrB_MAX_PLUS_SEMIRING_UINT32; -extern GrB_Semiring GrB_MAX_PLUS_SEMIRING_UINT64; -extern GrB_Semiring GrB_MAX_SECOND_SEMIRING_FP32; -extern GrB_Semiring GrB_MAX_SECOND_SEMIRING_FP64; -extern GrB_Semiring GrB_MAX_SECOND_SEMIRING_INT8; -extern GrB_Semiring GrB_MAX_SECOND_SEMIRING_INT16; -extern GrB_Semiring GrB_MAX_SECOND_SEMIRING_INT32; -extern GrB_Semiring GrB_MAX_SECOND_SEMIRING_INT64; -extern GrB_Semiring GrB_MAX_SECOND_SEMIRING_UINT8; -extern GrB_Semiring GrB_MAX_SECOND_SEMIRING_UINT16; -extern GrB_Semiring GrB_MAX_SECOND_SEMIRING_UINT32; -extern GrB_Semiring GrB_MAX_SECOND_SEMIRING_UINT64; -extern GrB_Semiring GrB_MAX_TIMES_SEMIRING_FP32; -extern GrB_Semiring GrB_MAX_TIMES_SEMIRING_FP64; -extern GrB_Semiring GrB_MAX_TIMES_SEMIRING_INT8; -extern GrB_Semiring GrB_MAX_TIMES_SEMIRING_INT16; -extern GrB_Semiring GrB_MAX_TIMES_SEMIRING_INT32; -extern GrB_Semiring GrB_MAX_TIMES_SEMIRING_INT64; -extern GrB_Semiring GrB_MAX_TIMES_SEMIRING_UINT8; -extern GrB_Semiring GrB_MAX_TIMES_SEMIRING_UINT16; -extern GrB_Semiring GrB_MAX_TIMES_SEMIRING_UINT32; -extern GrB_Semiring GrB_MAX_TIMES_SEMIRING_UINT64; -extern GrB_Semiring GrB_MIN_FIRST_SEMIRING_FP32; -extern GrB_Semiring GrB_MIN_FIRST_SEMIRING_FP64; -extern GrB_Semiring GrB_MIN_FIRST_SEMIRING_INT8; -extern GrB_Semiring GrB_MIN_FIRST_SEMIRING_INT16; -extern GrB_Semiring GrB_MIN_FIRST_SEMIRING_INT32; -extern GrB_Semiring GrB_MIN_FIRST_SEMIRING_INT64; -extern GrB_Semiring GrB_MIN_FIRST_SEMIRING_UINT8; -extern GrB_Semiring GrB_MIN_FIRST_SEMIRING_UINT16; -extern GrB_Semiring GrB_MIN_FIRST_SEMIRING_UINT32; -extern GrB_Semiring GrB_MIN_FIRST_SEMIRING_UINT64; -extern GrB_Semiring GrB_MIN_MAX_SEMIRING_FP32; -extern GrB_Semiring GrB_MIN_MAX_SEMIRING_FP64; -extern GrB_Semiring GrB_MIN_MAX_SEMIRING_INT8; -extern GrB_Semiring GrB_MIN_MAX_SEMIRING_INT16; -extern GrB_Semiring GrB_MIN_MAX_SEMIRING_INT32; -extern GrB_Semiring GrB_MIN_MAX_SEMIRING_INT64; -extern GrB_Semiring GrB_MIN_MAX_SEMIRING_UINT8; -extern GrB_Semiring GrB_MIN_MAX_SEMIRING_UINT16; -extern GrB_Semiring GrB_MIN_MAX_SEMIRING_UINT32; -extern GrB_Semiring GrB_MIN_MAX_SEMIRING_UINT64; -extern GrB_Semiring GrB_MIN_PLUS_SEMIRING_FP32; -extern GrB_Semiring GrB_MIN_PLUS_SEMIRING_FP64; -extern GrB_Semiring GrB_MIN_PLUS_SEMIRING_INT8; -extern GrB_Semiring GrB_MIN_PLUS_SEMIRING_INT16; -extern GrB_Semiring GrB_MIN_PLUS_SEMIRING_INT32; -extern GrB_Semiring GrB_MIN_PLUS_SEMIRING_INT64; -extern GrB_Semiring GrB_MIN_PLUS_SEMIRING_UINT8; -extern GrB_Semiring GrB_MIN_PLUS_SEMIRING_UINT16; -extern GrB_Semiring GrB_MIN_PLUS_SEMIRING_UINT32; -extern GrB_Semiring GrB_MIN_PLUS_SEMIRING_UINT64; -extern GrB_Semiring GrB_MIN_SECOND_SEMIRING_FP32; -extern GrB_Semiring GrB_MIN_SECOND_SEMIRING_FP64; -extern GrB_Semiring GrB_MIN_SECOND_SEMIRING_INT8; -extern GrB_Semiring GrB_MIN_SECOND_SEMIRING_INT16; -extern GrB_Semiring GrB_MIN_SECOND_SEMIRING_INT32; -extern GrB_Semiring GrB_MIN_SECOND_SEMIRING_INT64; -extern GrB_Semiring GrB_MIN_SECOND_SEMIRING_UINT8; -extern GrB_Semiring GrB_MIN_SECOND_SEMIRING_UINT16; -extern GrB_Semiring GrB_MIN_SECOND_SEMIRING_UINT32; -extern GrB_Semiring GrB_MIN_SECOND_SEMIRING_UINT64; -extern GrB_Semiring GrB_MIN_TIMES_SEMIRING_FP32; -extern GrB_Semiring GrB_MIN_TIMES_SEMIRING_FP64; -extern GrB_Semiring GrB_MIN_TIMES_SEMIRING_INT8; -extern GrB_Semiring GrB_MIN_TIMES_SEMIRING_INT16; -extern GrB_Semiring GrB_MIN_TIMES_SEMIRING_INT32; -extern GrB_Semiring GrB_MIN_TIMES_SEMIRING_INT64; -extern GrB_Semiring GrB_MIN_TIMES_SEMIRING_UINT8; -extern GrB_Semiring GrB_MIN_TIMES_SEMIRING_UINT16; -extern GrB_Semiring GrB_MIN_TIMES_SEMIRING_UINT32; -extern GrB_Semiring GrB_MIN_TIMES_SEMIRING_UINT64; -extern GrB_Semiring GrB_PLUS_MIN_SEMIRING_FP32; -extern GrB_Semiring GrB_PLUS_MIN_SEMIRING_FP64; -extern GrB_Semiring GrB_PLUS_MIN_SEMIRING_INT8; -extern GrB_Semiring GrB_PLUS_MIN_SEMIRING_INT16; -extern GrB_Semiring GrB_PLUS_MIN_SEMIRING_INT32; -extern GrB_Semiring GrB_PLUS_MIN_SEMIRING_INT64; -extern GrB_Semiring GrB_PLUS_MIN_SEMIRING_UINT8; -extern GrB_Semiring GrB_PLUS_MIN_SEMIRING_UINT16; -extern GrB_Semiring GrB_PLUS_MIN_SEMIRING_UINT32; -extern GrB_Semiring GrB_PLUS_MIN_SEMIRING_UINT64; -extern GrB_Semiring GrB_PLUS_TIMES_SEMIRING_FP32; -extern GrB_Semiring GrB_PLUS_TIMES_SEMIRING_FP64; -extern GrB_Semiring GrB_PLUS_TIMES_SEMIRING_INT8; -extern GrB_Semiring GrB_PLUS_TIMES_SEMIRING_INT16; -extern GrB_Semiring GrB_PLUS_TIMES_SEMIRING_INT32; -extern GrB_Semiring GrB_PLUS_TIMES_SEMIRING_INT64; -extern GrB_Semiring GrB_PLUS_TIMES_SEMIRING_UINT8; -extern GrB_Semiring GrB_PLUS_TIMES_SEMIRING_UINT16; -extern GrB_Semiring GrB_PLUS_TIMES_SEMIRING_UINT32; -extern GrB_Semiring GrB_PLUS_TIMES_SEMIRING_UINT64; -extern GrB_Type GrB_BOOL; -extern GrB_Type GrB_FP32; -extern GrB_Type GrB_FP64; -extern GrB_Type GrB_INT8; -extern GrB_Type GrB_INT16; -extern GrB_Type GrB_INT32; -extern GrB_Type GrB_INT64; -extern GrB_Type GrB_UINT8; -extern GrB_Type GrB_UINT16; -extern GrB_Type GrB_UINT32; -extern GrB_Type GrB_UINT64; -extern GrB_UnaryOp GrB_ABS_BOOL; -extern GrB_UnaryOp GrB_ABS_FP32; -extern GrB_UnaryOp GrB_ABS_FP64; -extern GrB_UnaryOp GrB_ABS_INT8; -extern GrB_UnaryOp GrB_ABS_INT16; -extern GrB_UnaryOp GrB_ABS_INT32; -extern GrB_UnaryOp GrB_ABS_INT64; -extern GrB_UnaryOp GrB_ABS_UINT8; -extern GrB_UnaryOp GrB_ABS_UINT16; -extern GrB_UnaryOp GrB_ABS_UINT32; -extern GrB_UnaryOp GrB_ABS_UINT64; -extern GrB_UnaryOp GrB_AINV_BOOL; -extern GrB_UnaryOp GrB_AINV_FP32; -extern GrB_UnaryOp GrB_AINV_FP64; -extern GrB_UnaryOp GrB_AINV_INT8; -extern GrB_UnaryOp GrB_AINV_INT16; -extern GrB_UnaryOp GrB_AINV_INT32; -extern GrB_UnaryOp GrB_AINV_INT64; -extern GrB_UnaryOp GrB_AINV_UINT8; -extern GrB_UnaryOp GrB_AINV_UINT16; -extern GrB_UnaryOp GrB_AINV_UINT32; -extern GrB_UnaryOp GrB_AINV_UINT64; -extern GrB_UnaryOp GrB_BNOT_INT8; -extern GrB_UnaryOp GrB_BNOT_INT16; -extern GrB_UnaryOp GrB_BNOT_INT32; -extern GrB_UnaryOp GrB_BNOT_INT64; -extern GrB_UnaryOp GrB_BNOT_UINT8; -extern GrB_UnaryOp GrB_BNOT_UINT16; -extern GrB_UnaryOp GrB_BNOT_UINT32; -extern GrB_UnaryOp GrB_BNOT_UINT64; -extern GrB_UnaryOp GrB_IDENTITY_BOOL; -extern GrB_UnaryOp GrB_IDENTITY_FP32; -extern GrB_UnaryOp GrB_IDENTITY_FP64; -extern GrB_UnaryOp GrB_IDENTITY_INT8; -extern GrB_UnaryOp GrB_IDENTITY_INT16; -extern GrB_UnaryOp GrB_IDENTITY_INT32; -extern GrB_UnaryOp GrB_IDENTITY_INT64; -extern GrB_UnaryOp GrB_IDENTITY_UINT8; -extern GrB_UnaryOp GrB_IDENTITY_UINT16; -extern GrB_UnaryOp GrB_IDENTITY_UINT32; -extern GrB_UnaryOp GrB_IDENTITY_UINT64; -extern GrB_UnaryOp GrB_LNOT; -extern GrB_UnaryOp GrB_MINV_BOOL; -extern GrB_UnaryOp GrB_MINV_FP32; -extern GrB_UnaryOp GrB_MINV_FP64; -extern GrB_UnaryOp GrB_MINV_INT8; -extern GrB_UnaryOp GrB_MINV_INT16; -extern GrB_UnaryOp GrB_MINV_INT32; -extern GrB_UnaryOp GrB_MINV_INT64; -extern GrB_UnaryOp GrB_MINV_UINT8; -extern GrB_UnaryOp GrB_MINV_UINT16; -extern GrB_UnaryOp GrB_MINV_UINT32; -extern GrB_UnaryOp GrB_MINV_UINT64; - -/* GrB objects (extended) */ -extern GrB_BinaryOp GxB_ANY_BOOL; -extern GrB_BinaryOp GxB_ANY_FC32; -extern GrB_BinaryOp GxB_ANY_FC64; -extern GrB_BinaryOp GxB_ANY_FP32; -extern GrB_BinaryOp GxB_ANY_FP64; -extern GrB_BinaryOp GxB_ANY_INT8; -extern GrB_BinaryOp GxB_ANY_INT16; -extern GrB_BinaryOp GxB_ANY_INT32; -extern GrB_BinaryOp GxB_ANY_INT64; -extern GrB_BinaryOp GxB_ANY_UINT8; -extern GrB_BinaryOp GxB_ANY_UINT16; -extern GrB_BinaryOp GxB_ANY_UINT32; -extern GrB_BinaryOp GxB_ANY_UINT64; -extern GrB_BinaryOp GxB_ATAN2_FP32; -extern GrB_BinaryOp GxB_ATAN2_FP64; -extern GrB_BinaryOp GxB_BCLR_INT8; -extern GrB_BinaryOp GxB_BCLR_INT16; -extern GrB_BinaryOp GxB_BCLR_INT32; -extern GrB_BinaryOp GxB_BCLR_INT64; -extern GrB_BinaryOp GxB_BCLR_UINT8; -extern GrB_BinaryOp GxB_BCLR_UINT16; -extern GrB_BinaryOp GxB_BCLR_UINT32; -extern GrB_BinaryOp GxB_BCLR_UINT64; -extern GrB_BinaryOp GxB_BGET_INT8; -extern GrB_BinaryOp GxB_BGET_INT16; -extern GrB_BinaryOp GxB_BGET_INT32; -extern GrB_BinaryOp GxB_BGET_INT64; -extern GrB_BinaryOp GxB_BGET_UINT8; -extern GrB_BinaryOp GxB_BGET_UINT16; -extern GrB_BinaryOp GxB_BGET_UINT32; -extern GrB_BinaryOp GxB_BGET_UINT64; -extern GrB_BinaryOp GxB_BSET_INT8; -extern GrB_BinaryOp GxB_BSET_INT16; -extern GrB_BinaryOp GxB_BSET_INT32; -extern GrB_BinaryOp GxB_BSET_INT64; -extern GrB_BinaryOp GxB_BSET_UINT8; -extern GrB_BinaryOp GxB_BSET_UINT16; -extern GrB_BinaryOp GxB_BSET_UINT32; -extern GrB_BinaryOp GxB_BSET_UINT64; -extern GrB_BinaryOp GxB_BSHIFT_INT8; -extern GrB_BinaryOp GxB_BSHIFT_INT16; -extern GrB_BinaryOp GxB_BSHIFT_INT32; -extern GrB_BinaryOp GxB_BSHIFT_INT64; -extern GrB_BinaryOp GxB_BSHIFT_UINT8; -extern GrB_BinaryOp GxB_BSHIFT_UINT16; -extern GrB_BinaryOp GxB_BSHIFT_UINT32; -extern GrB_BinaryOp GxB_BSHIFT_UINT64; -extern GrB_BinaryOp GxB_CMPLX_FP32; -extern GrB_BinaryOp GxB_CMPLX_FP64; -extern GrB_BinaryOp GxB_COPYSIGN_FP32; -extern GrB_BinaryOp GxB_COPYSIGN_FP64; -extern GrB_BinaryOp GxB_DIV_FC32; -extern GrB_BinaryOp GxB_DIV_FC64; -extern GrB_BinaryOp GxB_EQ_FC32; -extern GrB_BinaryOp GxB_EQ_FC64; -extern GrB_BinaryOp GxB_FIRSTI1_INT32; -extern GrB_BinaryOp GxB_FIRSTI1_INT64; -extern GrB_BinaryOp GxB_FIRSTI_INT32; -extern GrB_BinaryOp GxB_FIRSTI_INT64; -extern GrB_BinaryOp GxB_FIRSTJ1_INT32; -extern GrB_BinaryOp GxB_FIRSTJ1_INT64; -extern GrB_BinaryOp GxB_FIRSTJ_INT32; -extern GrB_BinaryOp GxB_FIRSTJ_INT64; -extern GrB_BinaryOp GxB_FIRST_FC32; -extern GrB_BinaryOp GxB_FIRST_FC64; -extern GrB_BinaryOp GxB_FMOD_FP32; -extern GrB_BinaryOp GxB_FMOD_FP64; -extern GrB_BinaryOp GxB_HYPOT_FP32; -extern GrB_BinaryOp GxB_HYPOT_FP64; -extern GrB_BinaryOp GxB_IGNORE_DUP; -extern GrB_BinaryOp GxB_ISEQ_BOOL; -extern GrB_BinaryOp GxB_ISEQ_FC32; -extern GrB_BinaryOp GxB_ISEQ_FC64; -extern GrB_BinaryOp GxB_ISEQ_FP32; -extern GrB_BinaryOp GxB_ISEQ_FP64; -extern GrB_BinaryOp GxB_ISEQ_INT8; -extern GrB_BinaryOp GxB_ISEQ_INT16; -extern GrB_BinaryOp GxB_ISEQ_INT32; -extern GrB_BinaryOp GxB_ISEQ_INT64; -extern GrB_BinaryOp GxB_ISEQ_UINT8; -extern GrB_BinaryOp GxB_ISEQ_UINT16; -extern GrB_BinaryOp GxB_ISEQ_UINT32; -extern GrB_BinaryOp GxB_ISEQ_UINT64; -extern GrB_BinaryOp GxB_ISGE_BOOL; -extern GrB_BinaryOp GxB_ISGE_FP32; -extern GrB_BinaryOp GxB_ISGE_FP64; -extern GrB_BinaryOp GxB_ISGE_INT8; -extern GrB_BinaryOp GxB_ISGE_INT16; -extern GrB_BinaryOp GxB_ISGE_INT32; -extern GrB_BinaryOp GxB_ISGE_INT64; -extern GrB_BinaryOp GxB_ISGE_UINT8; -extern GrB_BinaryOp GxB_ISGE_UINT16; -extern GrB_BinaryOp GxB_ISGE_UINT32; -extern GrB_BinaryOp GxB_ISGE_UINT64; -extern GrB_BinaryOp GxB_ISGT_BOOL; -extern GrB_BinaryOp GxB_ISGT_FP32; -extern GrB_BinaryOp GxB_ISGT_FP64; -extern GrB_BinaryOp GxB_ISGT_INT8; -extern GrB_BinaryOp GxB_ISGT_INT16; -extern GrB_BinaryOp GxB_ISGT_INT32; -extern GrB_BinaryOp GxB_ISGT_INT64; -extern GrB_BinaryOp GxB_ISGT_UINT8; -extern GrB_BinaryOp GxB_ISGT_UINT16; -extern GrB_BinaryOp GxB_ISGT_UINT32; -extern GrB_BinaryOp GxB_ISGT_UINT64; -extern GrB_BinaryOp GxB_ISLE_BOOL; -extern GrB_BinaryOp GxB_ISLE_FP32; -extern GrB_BinaryOp GxB_ISLE_FP64; -extern GrB_BinaryOp GxB_ISLE_INT8; -extern GrB_BinaryOp GxB_ISLE_INT16; -extern GrB_BinaryOp GxB_ISLE_INT32; -extern GrB_BinaryOp GxB_ISLE_INT64; -extern GrB_BinaryOp GxB_ISLE_UINT8; -extern GrB_BinaryOp GxB_ISLE_UINT16; -extern GrB_BinaryOp GxB_ISLE_UINT32; -extern GrB_BinaryOp GxB_ISLE_UINT64; -extern GrB_BinaryOp GxB_ISLT_BOOL; -extern GrB_BinaryOp GxB_ISLT_FP32; -extern GrB_BinaryOp GxB_ISLT_FP64; -extern GrB_BinaryOp GxB_ISLT_INT8; -extern GrB_BinaryOp GxB_ISLT_INT16; -extern GrB_BinaryOp GxB_ISLT_INT32; -extern GrB_BinaryOp GxB_ISLT_INT64; -extern GrB_BinaryOp GxB_ISLT_UINT8; -extern GrB_BinaryOp GxB_ISLT_UINT16; -extern GrB_BinaryOp GxB_ISLT_UINT32; -extern GrB_BinaryOp GxB_ISLT_UINT64; -extern GrB_BinaryOp GxB_ISNE_BOOL; -extern GrB_BinaryOp GxB_ISNE_FC32; -extern GrB_BinaryOp GxB_ISNE_FC64; -extern GrB_BinaryOp GxB_ISNE_FP32; -extern GrB_BinaryOp GxB_ISNE_FP64; -extern GrB_BinaryOp GxB_ISNE_INT8; -extern GrB_BinaryOp GxB_ISNE_INT16; -extern GrB_BinaryOp GxB_ISNE_INT32; -extern GrB_BinaryOp GxB_ISNE_INT64; -extern GrB_BinaryOp GxB_ISNE_UINT8; -extern GrB_BinaryOp GxB_ISNE_UINT16; -extern GrB_BinaryOp GxB_ISNE_UINT32; -extern GrB_BinaryOp GxB_ISNE_UINT64; -extern GrB_BinaryOp GxB_LAND_BOOL; -extern GrB_BinaryOp GxB_LAND_FP32; -extern GrB_BinaryOp GxB_LAND_FP64; -extern GrB_BinaryOp GxB_LAND_INT8; -extern GrB_BinaryOp GxB_LAND_INT16; -extern GrB_BinaryOp GxB_LAND_INT32; -extern GrB_BinaryOp GxB_LAND_INT64; -extern GrB_BinaryOp GxB_LAND_UINT8; -extern GrB_BinaryOp GxB_LAND_UINT16; -extern GrB_BinaryOp GxB_LAND_UINT32; -extern GrB_BinaryOp GxB_LAND_UINT64; -extern GrB_BinaryOp GxB_LDEXP_FP32; -extern GrB_BinaryOp GxB_LDEXP_FP64; -extern GrB_BinaryOp GxB_LOR_BOOL; -extern GrB_BinaryOp GxB_LOR_FP32; -extern GrB_BinaryOp GxB_LOR_FP64; -extern GrB_BinaryOp GxB_LOR_INT8; -extern GrB_BinaryOp GxB_LOR_INT16; -extern GrB_BinaryOp GxB_LOR_INT32; -extern GrB_BinaryOp GxB_LOR_INT64; -extern GrB_BinaryOp GxB_LOR_UINT8; -extern GrB_BinaryOp GxB_LOR_UINT16; -extern GrB_BinaryOp GxB_LOR_UINT32; -extern GrB_BinaryOp GxB_LOR_UINT64; -extern GrB_BinaryOp GxB_LXOR_BOOL; -extern GrB_BinaryOp GxB_LXOR_FP32; -extern GrB_BinaryOp GxB_LXOR_FP64; -extern GrB_BinaryOp GxB_LXOR_INT8; -extern GrB_BinaryOp GxB_LXOR_INT16; -extern GrB_BinaryOp GxB_LXOR_INT32; -extern GrB_BinaryOp GxB_LXOR_INT64; -extern GrB_BinaryOp GxB_LXOR_UINT8; -extern GrB_BinaryOp GxB_LXOR_UINT16; -extern GrB_BinaryOp GxB_LXOR_UINT32; -extern GrB_BinaryOp GxB_LXOR_UINT64; -extern GrB_BinaryOp GxB_MINUS_FC32; -extern GrB_BinaryOp GxB_MINUS_FC64; -extern GrB_BinaryOp GxB_NE_FC32; -extern GrB_BinaryOp GxB_NE_FC64; -extern GrB_BinaryOp GxB_ONEB_FC32; -extern GrB_BinaryOp GxB_ONEB_FC64; -extern GrB_BinaryOp GxB_PAIR_BOOL; -extern GrB_BinaryOp GxB_PAIR_FC32; -extern GrB_BinaryOp GxB_PAIR_FC64; -extern GrB_BinaryOp GxB_PAIR_FP32; -extern GrB_BinaryOp GxB_PAIR_FP64; -extern GrB_BinaryOp GxB_PAIR_INT8; -extern GrB_BinaryOp GxB_PAIR_INT16; -extern GrB_BinaryOp GxB_PAIR_INT32; -extern GrB_BinaryOp GxB_PAIR_INT64; -extern GrB_BinaryOp GxB_PAIR_UINT8; -extern GrB_BinaryOp GxB_PAIR_UINT16; -extern GrB_BinaryOp GxB_PAIR_UINT32; -extern GrB_BinaryOp GxB_PAIR_UINT64; -extern GrB_BinaryOp GxB_PLUS_FC32; -extern GrB_BinaryOp GxB_PLUS_FC64; -extern GrB_BinaryOp GxB_POW_BOOL; -extern GrB_BinaryOp GxB_POW_FC32; -extern GrB_BinaryOp GxB_POW_FC64; -extern GrB_BinaryOp GxB_POW_FP32; -extern GrB_BinaryOp GxB_POW_FP64; -extern GrB_BinaryOp GxB_POW_INT8; -extern GrB_BinaryOp GxB_POW_INT16; -extern GrB_BinaryOp GxB_POW_INT32; -extern GrB_BinaryOp GxB_POW_INT64; -extern GrB_BinaryOp GxB_POW_UINT8; -extern GrB_BinaryOp GxB_POW_UINT16; -extern GrB_BinaryOp GxB_POW_UINT32; -extern GrB_BinaryOp GxB_POW_UINT64; -extern GrB_BinaryOp GxB_RDIV_BOOL; -extern GrB_BinaryOp GxB_RDIV_FC32; -extern GrB_BinaryOp GxB_RDIV_FC64; -extern GrB_BinaryOp GxB_RDIV_FP32; -extern GrB_BinaryOp GxB_RDIV_FP64; -extern GrB_BinaryOp GxB_RDIV_INT8; -extern GrB_BinaryOp GxB_RDIV_INT16; -extern GrB_BinaryOp GxB_RDIV_INT32; -extern GrB_BinaryOp GxB_RDIV_INT64; -extern GrB_BinaryOp GxB_RDIV_UINT8; -extern GrB_BinaryOp GxB_RDIV_UINT16; -extern GrB_BinaryOp GxB_RDIV_UINT32; -extern GrB_BinaryOp GxB_RDIV_UINT64; -extern GrB_BinaryOp GxB_REMAINDER_FP32; -extern GrB_BinaryOp GxB_REMAINDER_FP64; -extern GrB_BinaryOp GxB_RMINUS_BOOL; -extern GrB_BinaryOp GxB_RMINUS_FC32; -extern GrB_BinaryOp GxB_RMINUS_FC64; -extern GrB_BinaryOp GxB_RMINUS_FP32; -extern GrB_BinaryOp GxB_RMINUS_FP64; -extern GrB_BinaryOp GxB_RMINUS_INT8; -extern GrB_BinaryOp GxB_RMINUS_INT16; -extern GrB_BinaryOp GxB_RMINUS_INT32; -extern GrB_BinaryOp GxB_RMINUS_INT64; -extern GrB_BinaryOp GxB_RMINUS_UINT8; -extern GrB_BinaryOp GxB_RMINUS_UINT16; -extern GrB_BinaryOp GxB_RMINUS_UINT32; -extern GrB_BinaryOp GxB_RMINUS_UINT64; -extern GrB_BinaryOp GxB_SECONDI1_INT32; -extern GrB_BinaryOp GxB_SECONDI1_INT64; -extern GrB_BinaryOp GxB_SECONDI_INT32; -extern GrB_BinaryOp GxB_SECONDI_INT64; -extern GrB_BinaryOp GxB_SECONDJ1_INT32; -extern GrB_BinaryOp GxB_SECONDJ1_INT64; -extern GrB_BinaryOp GxB_SECONDJ_INT32; -extern GrB_BinaryOp GxB_SECONDJ_INT64; -extern GrB_BinaryOp GxB_SECOND_FC32; -extern GrB_BinaryOp GxB_SECOND_FC64; -extern GrB_BinaryOp GxB_TIMES_FC32; -extern GrB_BinaryOp GxB_TIMES_FC64; -extern GrB_IndexUnaryOp GxB_VALUEEQ_FC32; -extern GrB_IndexUnaryOp GxB_VALUEEQ_FC64; -extern GrB_IndexUnaryOp GxB_VALUENE_FC32; -extern GrB_IndexUnaryOp GxB_VALUENE_FC64; -extern GrB_Monoid GxB_ANY_BOOL_MONOID; -extern GrB_Monoid GxB_ANY_FC32_MONOID; -extern GrB_Monoid GxB_ANY_FC64_MONOID; -extern GrB_Monoid GxB_ANY_FP32_MONOID; -extern GrB_Monoid GxB_ANY_FP64_MONOID; -extern GrB_Monoid GxB_ANY_INT8_MONOID; -extern GrB_Monoid GxB_ANY_INT16_MONOID; -extern GrB_Monoid GxB_ANY_INT32_MONOID; -extern GrB_Monoid GxB_ANY_INT64_MONOID; -extern GrB_Monoid GxB_ANY_UINT8_MONOID; -extern GrB_Monoid GxB_ANY_UINT16_MONOID; -extern GrB_Monoid GxB_ANY_UINT32_MONOID; -extern GrB_Monoid GxB_ANY_UINT64_MONOID; -extern GrB_Monoid GxB_BAND_UINT8_MONOID; -extern GrB_Monoid GxB_BAND_UINT16_MONOID; -extern GrB_Monoid GxB_BAND_UINT32_MONOID; -extern GrB_Monoid GxB_BAND_UINT64_MONOID; -extern GrB_Monoid GxB_BOR_UINT8_MONOID; -extern GrB_Monoid GxB_BOR_UINT16_MONOID; -extern GrB_Monoid GxB_BOR_UINT32_MONOID; -extern GrB_Monoid GxB_BOR_UINT64_MONOID; -extern GrB_Monoid GxB_BXNOR_UINT8_MONOID; -extern GrB_Monoid GxB_BXNOR_UINT16_MONOID; -extern GrB_Monoid GxB_BXNOR_UINT32_MONOID; -extern GrB_Monoid GxB_BXNOR_UINT64_MONOID; -extern GrB_Monoid GxB_BXOR_UINT8_MONOID; -extern GrB_Monoid GxB_BXOR_UINT16_MONOID; -extern GrB_Monoid GxB_BXOR_UINT32_MONOID; -extern GrB_Monoid GxB_BXOR_UINT64_MONOID; -extern GrB_Monoid GxB_EQ_BOOL_MONOID; -extern GrB_Monoid GxB_PLUS_FC32_MONOID; -extern GrB_Monoid GxB_PLUS_FC64_MONOID; -extern GrB_Monoid GxB_TIMES_FC32_MONOID; -extern GrB_Monoid GxB_TIMES_FC64_MONOID; -extern GrB_Semiring GxB_ANY_DIV_FC32; -extern GrB_Semiring GxB_ANY_DIV_FC64; -extern GrB_Semiring GxB_ANY_DIV_FP32; -extern GrB_Semiring GxB_ANY_DIV_FP64; -extern GrB_Semiring GxB_ANY_DIV_INT8; -extern GrB_Semiring GxB_ANY_DIV_INT16; -extern GrB_Semiring GxB_ANY_DIV_INT32; -extern GrB_Semiring GxB_ANY_DIV_INT64; -extern GrB_Semiring GxB_ANY_DIV_UINT8; -extern GrB_Semiring GxB_ANY_DIV_UINT16; -extern GrB_Semiring GxB_ANY_DIV_UINT32; -extern GrB_Semiring GxB_ANY_DIV_UINT64; -extern GrB_Semiring GxB_ANY_EQ_BOOL; -extern GrB_Semiring GxB_ANY_EQ_FP32; -extern GrB_Semiring GxB_ANY_EQ_FP64; -extern GrB_Semiring GxB_ANY_EQ_INT8; -extern GrB_Semiring GxB_ANY_EQ_INT16; -extern GrB_Semiring GxB_ANY_EQ_INT32; -extern GrB_Semiring GxB_ANY_EQ_INT64; -extern GrB_Semiring GxB_ANY_EQ_UINT8; -extern GrB_Semiring GxB_ANY_EQ_UINT16; -extern GrB_Semiring GxB_ANY_EQ_UINT32; -extern GrB_Semiring GxB_ANY_EQ_UINT64; -extern GrB_Semiring GxB_ANY_FIRSTI1_INT32; -extern GrB_Semiring GxB_ANY_FIRSTI1_INT64; -extern GrB_Semiring GxB_ANY_FIRSTI_INT32; -extern GrB_Semiring GxB_ANY_FIRSTI_INT64; -extern GrB_Semiring GxB_ANY_FIRSTJ1_INT32; -extern GrB_Semiring GxB_ANY_FIRSTJ1_INT64; -extern GrB_Semiring GxB_ANY_FIRSTJ_INT32; -extern GrB_Semiring GxB_ANY_FIRSTJ_INT64; -extern GrB_Semiring GxB_ANY_FIRST_BOOL; -extern GrB_Semiring GxB_ANY_FIRST_FC32; -extern GrB_Semiring GxB_ANY_FIRST_FC64; -extern GrB_Semiring GxB_ANY_FIRST_FP32; -extern GrB_Semiring GxB_ANY_FIRST_FP64; -extern GrB_Semiring GxB_ANY_FIRST_INT8; -extern GrB_Semiring GxB_ANY_FIRST_INT16; -extern GrB_Semiring GxB_ANY_FIRST_INT32; -extern GrB_Semiring GxB_ANY_FIRST_INT64; -extern GrB_Semiring GxB_ANY_FIRST_UINT8; -extern GrB_Semiring GxB_ANY_FIRST_UINT16; -extern GrB_Semiring GxB_ANY_FIRST_UINT32; -extern GrB_Semiring GxB_ANY_FIRST_UINT64; -extern GrB_Semiring GxB_ANY_GE_BOOL; -extern GrB_Semiring GxB_ANY_GE_FP32; -extern GrB_Semiring GxB_ANY_GE_FP64; -extern GrB_Semiring GxB_ANY_GE_INT8; -extern GrB_Semiring GxB_ANY_GE_INT16; -extern GrB_Semiring GxB_ANY_GE_INT32; -extern GrB_Semiring GxB_ANY_GE_INT64; -extern GrB_Semiring GxB_ANY_GE_UINT8; -extern GrB_Semiring GxB_ANY_GE_UINT16; -extern GrB_Semiring GxB_ANY_GE_UINT32; -extern GrB_Semiring GxB_ANY_GE_UINT64; -extern GrB_Semiring GxB_ANY_GT_BOOL; -extern GrB_Semiring GxB_ANY_GT_FP32; -extern GrB_Semiring GxB_ANY_GT_FP64; -extern GrB_Semiring GxB_ANY_GT_INT8; -extern GrB_Semiring GxB_ANY_GT_INT16; -extern GrB_Semiring GxB_ANY_GT_INT32; -extern GrB_Semiring GxB_ANY_GT_INT64; -extern GrB_Semiring GxB_ANY_GT_UINT8; -extern GrB_Semiring GxB_ANY_GT_UINT16; -extern GrB_Semiring GxB_ANY_GT_UINT32; -extern GrB_Semiring GxB_ANY_GT_UINT64; -extern GrB_Semiring GxB_ANY_ISEQ_FP32; -extern GrB_Semiring GxB_ANY_ISEQ_FP64; -extern GrB_Semiring GxB_ANY_ISEQ_INT8; -extern GrB_Semiring GxB_ANY_ISEQ_INT16; -extern GrB_Semiring GxB_ANY_ISEQ_INT32; -extern GrB_Semiring GxB_ANY_ISEQ_INT64; -extern GrB_Semiring GxB_ANY_ISEQ_UINT8; -extern GrB_Semiring GxB_ANY_ISEQ_UINT16; -extern GrB_Semiring GxB_ANY_ISEQ_UINT32; -extern GrB_Semiring GxB_ANY_ISEQ_UINT64; -extern GrB_Semiring GxB_ANY_ISGE_FP32; -extern GrB_Semiring GxB_ANY_ISGE_FP64; -extern GrB_Semiring GxB_ANY_ISGE_INT8; -extern GrB_Semiring GxB_ANY_ISGE_INT16; -extern GrB_Semiring GxB_ANY_ISGE_INT32; -extern GrB_Semiring GxB_ANY_ISGE_INT64; -extern GrB_Semiring GxB_ANY_ISGE_UINT8; -extern GrB_Semiring GxB_ANY_ISGE_UINT16; -extern GrB_Semiring GxB_ANY_ISGE_UINT32; -extern GrB_Semiring GxB_ANY_ISGE_UINT64; -extern GrB_Semiring GxB_ANY_ISGT_FP32; -extern GrB_Semiring GxB_ANY_ISGT_FP64; -extern GrB_Semiring GxB_ANY_ISGT_INT8; -extern GrB_Semiring GxB_ANY_ISGT_INT16; -extern GrB_Semiring GxB_ANY_ISGT_INT32; -extern GrB_Semiring GxB_ANY_ISGT_INT64; -extern GrB_Semiring GxB_ANY_ISGT_UINT8; -extern GrB_Semiring GxB_ANY_ISGT_UINT16; -extern GrB_Semiring GxB_ANY_ISGT_UINT32; -extern GrB_Semiring GxB_ANY_ISGT_UINT64; -extern GrB_Semiring GxB_ANY_ISLE_FP32; -extern GrB_Semiring GxB_ANY_ISLE_FP64; -extern GrB_Semiring GxB_ANY_ISLE_INT8; -extern GrB_Semiring GxB_ANY_ISLE_INT16; -extern GrB_Semiring GxB_ANY_ISLE_INT32; -extern GrB_Semiring GxB_ANY_ISLE_INT64; -extern GrB_Semiring GxB_ANY_ISLE_UINT8; -extern GrB_Semiring GxB_ANY_ISLE_UINT16; -extern GrB_Semiring GxB_ANY_ISLE_UINT32; -extern GrB_Semiring GxB_ANY_ISLE_UINT64; -extern GrB_Semiring GxB_ANY_ISLT_FP32; -extern GrB_Semiring GxB_ANY_ISLT_FP64; -extern GrB_Semiring GxB_ANY_ISLT_INT8; -extern GrB_Semiring GxB_ANY_ISLT_INT16; -extern GrB_Semiring GxB_ANY_ISLT_INT32; -extern GrB_Semiring GxB_ANY_ISLT_INT64; -extern GrB_Semiring GxB_ANY_ISLT_UINT8; -extern GrB_Semiring GxB_ANY_ISLT_UINT16; -extern GrB_Semiring GxB_ANY_ISLT_UINT32; -extern GrB_Semiring GxB_ANY_ISLT_UINT64; -extern GrB_Semiring GxB_ANY_ISNE_FP32; -extern GrB_Semiring GxB_ANY_ISNE_FP64; -extern GrB_Semiring GxB_ANY_ISNE_INT8; -extern GrB_Semiring GxB_ANY_ISNE_INT16; -extern GrB_Semiring GxB_ANY_ISNE_INT32; -extern GrB_Semiring GxB_ANY_ISNE_INT64; -extern GrB_Semiring GxB_ANY_ISNE_UINT8; -extern GrB_Semiring GxB_ANY_ISNE_UINT16; -extern GrB_Semiring GxB_ANY_ISNE_UINT32; -extern GrB_Semiring GxB_ANY_ISNE_UINT64; -extern GrB_Semiring GxB_ANY_LAND_BOOL; -extern GrB_Semiring GxB_ANY_LAND_FP32; -extern GrB_Semiring GxB_ANY_LAND_FP64; -extern GrB_Semiring GxB_ANY_LAND_INT8; -extern GrB_Semiring GxB_ANY_LAND_INT16; -extern GrB_Semiring GxB_ANY_LAND_INT32; -extern GrB_Semiring GxB_ANY_LAND_INT64; -extern GrB_Semiring GxB_ANY_LAND_UINT8; -extern GrB_Semiring GxB_ANY_LAND_UINT16; -extern GrB_Semiring GxB_ANY_LAND_UINT32; -extern GrB_Semiring GxB_ANY_LAND_UINT64; -extern GrB_Semiring GxB_ANY_LE_BOOL; -extern GrB_Semiring GxB_ANY_LE_FP32; -extern GrB_Semiring GxB_ANY_LE_FP64; -extern GrB_Semiring GxB_ANY_LE_INT8; -extern GrB_Semiring GxB_ANY_LE_INT16; -extern GrB_Semiring GxB_ANY_LE_INT32; -extern GrB_Semiring GxB_ANY_LE_INT64; -extern GrB_Semiring GxB_ANY_LE_UINT8; -extern GrB_Semiring GxB_ANY_LE_UINT16; -extern GrB_Semiring GxB_ANY_LE_UINT32; -extern GrB_Semiring GxB_ANY_LE_UINT64; -extern GrB_Semiring GxB_ANY_LOR_BOOL; -extern GrB_Semiring GxB_ANY_LOR_FP32; -extern GrB_Semiring GxB_ANY_LOR_FP64; -extern GrB_Semiring GxB_ANY_LOR_INT8; -extern GrB_Semiring GxB_ANY_LOR_INT16; -extern GrB_Semiring GxB_ANY_LOR_INT32; -extern GrB_Semiring GxB_ANY_LOR_INT64; -extern GrB_Semiring GxB_ANY_LOR_UINT8; -extern GrB_Semiring GxB_ANY_LOR_UINT16; -extern GrB_Semiring GxB_ANY_LOR_UINT32; -extern GrB_Semiring GxB_ANY_LOR_UINT64; -extern GrB_Semiring GxB_ANY_LT_BOOL; -extern GrB_Semiring GxB_ANY_LT_FP32; -extern GrB_Semiring GxB_ANY_LT_FP64; -extern GrB_Semiring GxB_ANY_LT_INT8; -extern GrB_Semiring GxB_ANY_LT_INT16; -extern GrB_Semiring GxB_ANY_LT_INT32; -extern GrB_Semiring GxB_ANY_LT_INT64; -extern GrB_Semiring GxB_ANY_LT_UINT8; -extern GrB_Semiring GxB_ANY_LT_UINT16; -extern GrB_Semiring GxB_ANY_LT_UINT32; -extern GrB_Semiring GxB_ANY_LT_UINT64; -extern GrB_Semiring GxB_ANY_LXOR_BOOL; -extern GrB_Semiring GxB_ANY_LXOR_FP32; -extern GrB_Semiring GxB_ANY_LXOR_FP64; -extern GrB_Semiring GxB_ANY_LXOR_INT8; -extern GrB_Semiring GxB_ANY_LXOR_INT16; -extern GrB_Semiring GxB_ANY_LXOR_INT32; -extern GrB_Semiring GxB_ANY_LXOR_INT64; -extern GrB_Semiring GxB_ANY_LXOR_UINT8; -extern GrB_Semiring GxB_ANY_LXOR_UINT16; -extern GrB_Semiring GxB_ANY_LXOR_UINT32; -extern GrB_Semiring GxB_ANY_LXOR_UINT64; -extern GrB_Semiring GxB_ANY_MAX_FP32; -extern GrB_Semiring GxB_ANY_MAX_FP64; -extern GrB_Semiring GxB_ANY_MAX_INT8; -extern GrB_Semiring GxB_ANY_MAX_INT16; -extern GrB_Semiring GxB_ANY_MAX_INT32; -extern GrB_Semiring GxB_ANY_MAX_INT64; -extern GrB_Semiring GxB_ANY_MAX_UINT8; -extern GrB_Semiring GxB_ANY_MAX_UINT16; -extern GrB_Semiring GxB_ANY_MAX_UINT32; -extern GrB_Semiring GxB_ANY_MAX_UINT64; -extern GrB_Semiring GxB_ANY_MINUS_FC32; -extern GrB_Semiring GxB_ANY_MINUS_FC64; -extern GrB_Semiring GxB_ANY_MINUS_FP32; -extern GrB_Semiring GxB_ANY_MINUS_FP64; -extern GrB_Semiring GxB_ANY_MINUS_INT8; -extern GrB_Semiring GxB_ANY_MINUS_INT16; -extern GrB_Semiring GxB_ANY_MINUS_INT32; -extern GrB_Semiring GxB_ANY_MINUS_INT64; -extern GrB_Semiring GxB_ANY_MINUS_UINT8; -extern GrB_Semiring GxB_ANY_MINUS_UINT16; -extern GrB_Semiring GxB_ANY_MINUS_UINT32; -extern GrB_Semiring GxB_ANY_MINUS_UINT64; -extern GrB_Semiring GxB_ANY_MIN_FP32; -extern GrB_Semiring GxB_ANY_MIN_FP64; -extern GrB_Semiring GxB_ANY_MIN_INT8; -extern GrB_Semiring GxB_ANY_MIN_INT16; -extern GrB_Semiring GxB_ANY_MIN_INT32; -extern GrB_Semiring GxB_ANY_MIN_INT64; -extern GrB_Semiring GxB_ANY_MIN_UINT8; -extern GrB_Semiring GxB_ANY_MIN_UINT16; -extern GrB_Semiring GxB_ANY_MIN_UINT32; -extern GrB_Semiring GxB_ANY_MIN_UINT64; -extern GrB_Semiring GxB_ANY_NE_FP32; -extern GrB_Semiring GxB_ANY_NE_FP64; -extern GrB_Semiring GxB_ANY_NE_INT8; -extern GrB_Semiring GxB_ANY_NE_INT16; -extern GrB_Semiring GxB_ANY_NE_INT32; -extern GrB_Semiring GxB_ANY_NE_INT64; -extern GrB_Semiring GxB_ANY_NE_UINT8; -extern GrB_Semiring GxB_ANY_NE_UINT16; -extern GrB_Semiring GxB_ANY_NE_UINT32; -extern GrB_Semiring GxB_ANY_NE_UINT64; -extern GrB_Semiring GxB_ANY_PAIR_BOOL; -extern GrB_Semiring GxB_ANY_PAIR_FC32; -extern GrB_Semiring GxB_ANY_PAIR_FC64; -extern GrB_Semiring GxB_ANY_PAIR_FP32; -extern GrB_Semiring GxB_ANY_PAIR_FP64; -extern GrB_Semiring GxB_ANY_PAIR_INT8; -extern GrB_Semiring GxB_ANY_PAIR_INT16; -extern GrB_Semiring GxB_ANY_PAIR_INT32; -extern GrB_Semiring GxB_ANY_PAIR_INT64; -extern GrB_Semiring GxB_ANY_PAIR_UINT8; -extern GrB_Semiring GxB_ANY_PAIR_UINT16; -extern GrB_Semiring GxB_ANY_PAIR_UINT32; -extern GrB_Semiring GxB_ANY_PAIR_UINT64; -extern GrB_Semiring GxB_ANY_PLUS_FC32; -extern GrB_Semiring GxB_ANY_PLUS_FC64; -extern GrB_Semiring GxB_ANY_PLUS_FP32; -extern GrB_Semiring GxB_ANY_PLUS_FP64; -extern GrB_Semiring GxB_ANY_PLUS_INT8; -extern GrB_Semiring GxB_ANY_PLUS_INT16; -extern GrB_Semiring GxB_ANY_PLUS_INT32; -extern GrB_Semiring GxB_ANY_PLUS_INT64; -extern GrB_Semiring GxB_ANY_PLUS_UINT8; -extern GrB_Semiring GxB_ANY_PLUS_UINT16; -extern GrB_Semiring GxB_ANY_PLUS_UINT32; -extern GrB_Semiring GxB_ANY_PLUS_UINT64; -extern GrB_Semiring GxB_ANY_RDIV_FC32; -extern GrB_Semiring GxB_ANY_RDIV_FC64; -extern GrB_Semiring GxB_ANY_RDIV_FP32; -extern GrB_Semiring GxB_ANY_RDIV_FP64; -extern GrB_Semiring GxB_ANY_RDIV_INT8; -extern GrB_Semiring GxB_ANY_RDIV_INT16; -extern GrB_Semiring GxB_ANY_RDIV_INT32; -extern GrB_Semiring GxB_ANY_RDIV_INT64; -extern GrB_Semiring GxB_ANY_RDIV_UINT8; -extern GrB_Semiring GxB_ANY_RDIV_UINT16; -extern GrB_Semiring GxB_ANY_RDIV_UINT32; -extern GrB_Semiring GxB_ANY_RDIV_UINT64; -extern GrB_Semiring GxB_ANY_RMINUS_FC32; -extern GrB_Semiring GxB_ANY_RMINUS_FC64; -extern GrB_Semiring GxB_ANY_RMINUS_FP32; -extern GrB_Semiring GxB_ANY_RMINUS_FP64; -extern GrB_Semiring GxB_ANY_RMINUS_INT8; -extern GrB_Semiring GxB_ANY_RMINUS_INT16; -extern GrB_Semiring GxB_ANY_RMINUS_INT32; -extern GrB_Semiring GxB_ANY_RMINUS_INT64; -extern GrB_Semiring GxB_ANY_RMINUS_UINT8; -extern GrB_Semiring GxB_ANY_RMINUS_UINT16; -extern GrB_Semiring GxB_ANY_RMINUS_UINT32; -extern GrB_Semiring GxB_ANY_RMINUS_UINT64; -extern GrB_Semiring GxB_ANY_SECONDI1_INT32; -extern GrB_Semiring GxB_ANY_SECONDI1_INT64; -extern GrB_Semiring GxB_ANY_SECONDI_INT32; -extern GrB_Semiring GxB_ANY_SECONDI_INT64; -extern GrB_Semiring GxB_ANY_SECONDJ1_INT32; -extern GrB_Semiring GxB_ANY_SECONDJ1_INT64; -extern GrB_Semiring GxB_ANY_SECONDJ_INT32; -extern GrB_Semiring GxB_ANY_SECONDJ_INT64; -extern GrB_Semiring GxB_ANY_SECOND_BOOL; -extern GrB_Semiring GxB_ANY_SECOND_FC32; -extern GrB_Semiring GxB_ANY_SECOND_FC64; -extern GrB_Semiring GxB_ANY_SECOND_FP32; -extern GrB_Semiring GxB_ANY_SECOND_FP64; -extern GrB_Semiring GxB_ANY_SECOND_INT8; -extern GrB_Semiring GxB_ANY_SECOND_INT16; -extern GrB_Semiring GxB_ANY_SECOND_INT32; -extern GrB_Semiring GxB_ANY_SECOND_INT64; -extern GrB_Semiring GxB_ANY_SECOND_UINT8; -extern GrB_Semiring GxB_ANY_SECOND_UINT16; -extern GrB_Semiring GxB_ANY_SECOND_UINT32; -extern GrB_Semiring GxB_ANY_SECOND_UINT64; -extern GrB_Semiring GxB_ANY_TIMES_FC32; -extern GrB_Semiring GxB_ANY_TIMES_FC64; -extern GrB_Semiring GxB_ANY_TIMES_FP32; -extern GrB_Semiring GxB_ANY_TIMES_FP64; -extern GrB_Semiring GxB_ANY_TIMES_INT8; -extern GrB_Semiring GxB_ANY_TIMES_INT16; -extern GrB_Semiring GxB_ANY_TIMES_INT32; -extern GrB_Semiring GxB_ANY_TIMES_INT64; -extern GrB_Semiring GxB_ANY_TIMES_UINT8; -extern GrB_Semiring GxB_ANY_TIMES_UINT16; -extern GrB_Semiring GxB_ANY_TIMES_UINT32; -extern GrB_Semiring GxB_ANY_TIMES_UINT64; -extern GrB_Semiring GxB_BAND_BAND_UINT8; -extern GrB_Semiring GxB_BAND_BAND_UINT16; -extern GrB_Semiring GxB_BAND_BAND_UINT32; -extern GrB_Semiring GxB_BAND_BAND_UINT64; -extern GrB_Semiring GxB_BAND_BOR_UINT8; -extern GrB_Semiring GxB_BAND_BOR_UINT16; -extern GrB_Semiring GxB_BAND_BOR_UINT32; -extern GrB_Semiring GxB_BAND_BOR_UINT64; -extern GrB_Semiring GxB_BAND_BXNOR_UINT8; -extern GrB_Semiring GxB_BAND_BXNOR_UINT16; -extern GrB_Semiring GxB_BAND_BXNOR_UINT32; -extern GrB_Semiring GxB_BAND_BXNOR_UINT64; -extern GrB_Semiring GxB_BAND_BXOR_UINT8; -extern GrB_Semiring GxB_BAND_BXOR_UINT16; -extern GrB_Semiring GxB_BAND_BXOR_UINT32; -extern GrB_Semiring GxB_BAND_BXOR_UINT64; -extern GrB_Semiring GxB_BOR_BAND_UINT8; -extern GrB_Semiring GxB_BOR_BAND_UINT16; -extern GrB_Semiring GxB_BOR_BAND_UINT32; -extern GrB_Semiring GxB_BOR_BAND_UINT64; -extern GrB_Semiring GxB_BOR_BOR_UINT8; -extern GrB_Semiring GxB_BOR_BOR_UINT16; -extern GrB_Semiring GxB_BOR_BOR_UINT32; -extern GrB_Semiring GxB_BOR_BOR_UINT64; -extern GrB_Semiring GxB_BOR_BXNOR_UINT8; -extern GrB_Semiring GxB_BOR_BXNOR_UINT16; -extern GrB_Semiring GxB_BOR_BXNOR_UINT32; -extern GrB_Semiring GxB_BOR_BXNOR_UINT64; -extern GrB_Semiring GxB_BOR_BXOR_UINT8; -extern GrB_Semiring GxB_BOR_BXOR_UINT16; -extern GrB_Semiring GxB_BOR_BXOR_UINT32; -extern GrB_Semiring GxB_BOR_BXOR_UINT64; -extern GrB_Semiring GxB_BXNOR_BAND_UINT8; -extern GrB_Semiring GxB_BXNOR_BAND_UINT16; -extern GrB_Semiring GxB_BXNOR_BAND_UINT32; -extern GrB_Semiring GxB_BXNOR_BAND_UINT64; -extern GrB_Semiring GxB_BXNOR_BOR_UINT8; -extern GrB_Semiring GxB_BXNOR_BOR_UINT16; -extern GrB_Semiring GxB_BXNOR_BOR_UINT32; -extern GrB_Semiring GxB_BXNOR_BOR_UINT64; -extern GrB_Semiring GxB_BXNOR_BXNOR_UINT8; -extern GrB_Semiring GxB_BXNOR_BXNOR_UINT16; -extern GrB_Semiring GxB_BXNOR_BXNOR_UINT32; -extern GrB_Semiring GxB_BXNOR_BXNOR_UINT64; -extern GrB_Semiring GxB_BXNOR_BXOR_UINT8; -extern GrB_Semiring GxB_BXNOR_BXOR_UINT16; -extern GrB_Semiring GxB_BXNOR_BXOR_UINT32; -extern GrB_Semiring GxB_BXNOR_BXOR_UINT64; -extern GrB_Semiring GxB_BXOR_BAND_UINT8; -extern GrB_Semiring GxB_BXOR_BAND_UINT16; -extern GrB_Semiring GxB_BXOR_BAND_UINT32; -extern GrB_Semiring GxB_BXOR_BAND_UINT64; -extern GrB_Semiring GxB_BXOR_BOR_UINT8; -extern GrB_Semiring GxB_BXOR_BOR_UINT16; -extern GrB_Semiring GxB_BXOR_BOR_UINT32; -extern GrB_Semiring GxB_BXOR_BOR_UINT64; -extern GrB_Semiring GxB_BXOR_BXNOR_UINT8; -extern GrB_Semiring GxB_BXOR_BXNOR_UINT16; -extern GrB_Semiring GxB_BXOR_BXNOR_UINT32; -extern GrB_Semiring GxB_BXOR_BXNOR_UINT64; -extern GrB_Semiring GxB_BXOR_BXOR_UINT8; -extern GrB_Semiring GxB_BXOR_BXOR_UINT16; -extern GrB_Semiring GxB_BXOR_BXOR_UINT32; -extern GrB_Semiring GxB_BXOR_BXOR_UINT64; -extern GrB_Semiring GxB_EQ_EQ_BOOL; -extern GrB_Semiring GxB_EQ_EQ_FP32; -extern GrB_Semiring GxB_EQ_EQ_FP64; -extern GrB_Semiring GxB_EQ_EQ_INT8; -extern GrB_Semiring GxB_EQ_EQ_INT16; -extern GrB_Semiring GxB_EQ_EQ_INT32; -extern GrB_Semiring GxB_EQ_EQ_INT64; -extern GrB_Semiring GxB_EQ_EQ_UINT8; -extern GrB_Semiring GxB_EQ_EQ_UINT16; -extern GrB_Semiring GxB_EQ_EQ_UINT32; -extern GrB_Semiring GxB_EQ_EQ_UINT64; -extern GrB_Semiring GxB_EQ_FIRST_BOOL; -extern GrB_Semiring GxB_EQ_GE_BOOL; -extern GrB_Semiring GxB_EQ_GE_FP32; -extern GrB_Semiring GxB_EQ_GE_FP64; -extern GrB_Semiring GxB_EQ_GE_INT8; -extern GrB_Semiring GxB_EQ_GE_INT16; -extern GrB_Semiring GxB_EQ_GE_INT32; -extern GrB_Semiring GxB_EQ_GE_INT64; -extern GrB_Semiring GxB_EQ_GE_UINT8; -extern GrB_Semiring GxB_EQ_GE_UINT16; -extern GrB_Semiring GxB_EQ_GE_UINT32; -extern GrB_Semiring GxB_EQ_GE_UINT64; -extern GrB_Semiring GxB_EQ_GT_BOOL; -extern GrB_Semiring GxB_EQ_GT_FP32; -extern GrB_Semiring GxB_EQ_GT_FP64; -extern GrB_Semiring GxB_EQ_GT_INT8; -extern GrB_Semiring GxB_EQ_GT_INT16; -extern GrB_Semiring GxB_EQ_GT_INT32; -extern GrB_Semiring GxB_EQ_GT_INT64; -extern GrB_Semiring GxB_EQ_GT_UINT8; -extern GrB_Semiring GxB_EQ_GT_UINT16; -extern GrB_Semiring GxB_EQ_GT_UINT32; -extern GrB_Semiring GxB_EQ_GT_UINT64; -extern GrB_Semiring GxB_EQ_LAND_BOOL; -extern GrB_Semiring GxB_EQ_LE_BOOL; -extern GrB_Semiring GxB_EQ_LE_FP32; -extern GrB_Semiring GxB_EQ_LE_FP64; -extern GrB_Semiring GxB_EQ_LE_INT8; -extern GrB_Semiring GxB_EQ_LE_INT16; -extern GrB_Semiring GxB_EQ_LE_INT32; -extern GrB_Semiring GxB_EQ_LE_INT64; -extern GrB_Semiring GxB_EQ_LE_UINT8; -extern GrB_Semiring GxB_EQ_LE_UINT16; -extern GrB_Semiring GxB_EQ_LE_UINT32; -extern GrB_Semiring GxB_EQ_LE_UINT64; -extern GrB_Semiring GxB_EQ_LOR_BOOL; -extern GrB_Semiring GxB_EQ_LT_BOOL; -extern GrB_Semiring GxB_EQ_LT_FP32; -extern GrB_Semiring GxB_EQ_LT_FP64; -extern GrB_Semiring GxB_EQ_LT_INT8; -extern GrB_Semiring GxB_EQ_LT_INT16; -extern GrB_Semiring GxB_EQ_LT_INT32; -extern GrB_Semiring GxB_EQ_LT_INT64; -extern GrB_Semiring GxB_EQ_LT_UINT8; -extern GrB_Semiring GxB_EQ_LT_UINT16; -extern GrB_Semiring GxB_EQ_LT_UINT32; -extern GrB_Semiring GxB_EQ_LT_UINT64; -extern GrB_Semiring GxB_EQ_LXOR_BOOL; -extern GrB_Semiring GxB_EQ_NE_FP32; -extern GrB_Semiring GxB_EQ_NE_FP64; -extern GrB_Semiring GxB_EQ_NE_INT8; -extern GrB_Semiring GxB_EQ_NE_INT16; -extern GrB_Semiring GxB_EQ_NE_INT32; -extern GrB_Semiring GxB_EQ_NE_INT64; -extern GrB_Semiring GxB_EQ_NE_UINT8; -extern GrB_Semiring GxB_EQ_NE_UINT16; -extern GrB_Semiring GxB_EQ_NE_UINT32; -extern GrB_Semiring GxB_EQ_NE_UINT64; -extern GrB_Semiring GxB_EQ_PAIR_BOOL; -extern GrB_Semiring GxB_EQ_SECOND_BOOL; -extern GrB_Semiring GxB_LAND_EQ_BOOL; -extern GrB_Semiring GxB_LAND_EQ_FP32; -extern GrB_Semiring GxB_LAND_EQ_FP64; -extern GrB_Semiring GxB_LAND_EQ_INT8; -extern GrB_Semiring GxB_LAND_EQ_INT16; -extern GrB_Semiring GxB_LAND_EQ_INT32; -extern GrB_Semiring GxB_LAND_EQ_INT64; -extern GrB_Semiring GxB_LAND_EQ_UINT8; -extern GrB_Semiring GxB_LAND_EQ_UINT16; -extern GrB_Semiring GxB_LAND_EQ_UINT32; -extern GrB_Semiring GxB_LAND_EQ_UINT64; -extern GrB_Semiring GxB_LAND_FIRST_BOOL; -extern GrB_Semiring GxB_LAND_GE_BOOL; -extern GrB_Semiring GxB_LAND_GE_FP32; -extern GrB_Semiring GxB_LAND_GE_FP64; -extern GrB_Semiring GxB_LAND_GE_INT8; -extern GrB_Semiring GxB_LAND_GE_INT16; -extern GrB_Semiring GxB_LAND_GE_INT32; -extern GrB_Semiring GxB_LAND_GE_INT64; -extern GrB_Semiring GxB_LAND_GE_UINT8; -extern GrB_Semiring GxB_LAND_GE_UINT16; -extern GrB_Semiring GxB_LAND_GE_UINT32; -extern GrB_Semiring GxB_LAND_GE_UINT64; -extern GrB_Semiring GxB_LAND_GT_BOOL; -extern GrB_Semiring GxB_LAND_GT_FP32; -extern GrB_Semiring GxB_LAND_GT_FP64; -extern GrB_Semiring GxB_LAND_GT_INT8; -extern GrB_Semiring GxB_LAND_GT_INT16; -extern GrB_Semiring GxB_LAND_GT_INT32; -extern GrB_Semiring GxB_LAND_GT_INT64; -extern GrB_Semiring GxB_LAND_GT_UINT8; -extern GrB_Semiring GxB_LAND_GT_UINT16; -extern GrB_Semiring GxB_LAND_GT_UINT32; -extern GrB_Semiring GxB_LAND_GT_UINT64; -extern GrB_Semiring GxB_LAND_LAND_BOOL; -extern GrB_Semiring GxB_LAND_LE_BOOL; -extern GrB_Semiring GxB_LAND_LE_FP32; -extern GrB_Semiring GxB_LAND_LE_FP64; -extern GrB_Semiring GxB_LAND_LE_INT8; -extern GrB_Semiring GxB_LAND_LE_INT16; -extern GrB_Semiring GxB_LAND_LE_INT32; -extern GrB_Semiring GxB_LAND_LE_INT64; -extern GrB_Semiring GxB_LAND_LE_UINT8; -extern GrB_Semiring GxB_LAND_LE_UINT16; -extern GrB_Semiring GxB_LAND_LE_UINT32; -extern GrB_Semiring GxB_LAND_LE_UINT64; -extern GrB_Semiring GxB_LAND_LT_BOOL; -extern GrB_Semiring GxB_LAND_LT_FP32; -extern GrB_Semiring GxB_LAND_LT_FP64; -extern GrB_Semiring GxB_LAND_LT_INT8; -extern GrB_Semiring GxB_LAND_LT_INT16; -extern GrB_Semiring GxB_LAND_LT_INT32; -extern GrB_Semiring GxB_LAND_LT_INT64; -extern GrB_Semiring GxB_LAND_LT_UINT8; -extern GrB_Semiring GxB_LAND_LT_UINT16; -extern GrB_Semiring GxB_LAND_LT_UINT32; -extern GrB_Semiring GxB_LAND_LT_UINT64; -extern GrB_Semiring GxB_LAND_LXOR_BOOL; -extern GrB_Semiring GxB_LAND_NE_FP32; -extern GrB_Semiring GxB_LAND_NE_FP64; -extern GrB_Semiring GxB_LAND_NE_INT8; -extern GrB_Semiring GxB_LAND_NE_INT16; -extern GrB_Semiring GxB_LAND_NE_INT32; -extern GrB_Semiring GxB_LAND_NE_INT64; -extern GrB_Semiring GxB_LAND_NE_UINT8; -extern GrB_Semiring GxB_LAND_NE_UINT16; -extern GrB_Semiring GxB_LAND_NE_UINT32; -extern GrB_Semiring GxB_LAND_NE_UINT64; -extern GrB_Semiring GxB_LAND_PAIR_BOOL; -extern GrB_Semiring GxB_LAND_SECOND_BOOL; -extern GrB_Semiring GxB_LOR_EQ_BOOL; -extern GrB_Semiring GxB_LOR_EQ_FP32; -extern GrB_Semiring GxB_LOR_EQ_FP64; -extern GrB_Semiring GxB_LOR_EQ_INT8; -extern GrB_Semiring GxB_LOR_EQ_INT16; -extern GrB_Semiring GxB_LOR_EQ_INT32; -extern GrB_Semiring GxB_LOR_EQ_INT64; -extern GrB_Semiring GxB_LOR_EQ_UINT8; -extern GrB_Semiring GxB_LOR_EQ_UINT16; -extern GrB_Semiring GxB_LOR_EQ_UINT32; -extern GrB_Semiring GxB_LOR_EQ_UINT64; -extern GrB_Semiring GxB_LOR_FIRST_BOOL; -extern GrB_Semiring GxB_LOR_GE_BOOL; -extern GrB_Semiring GxB_LOR_GE_FP32; -extern GrB_Semiring GxB_LOR_GE_FP64; -extern GrB_Semiring GxB_LOR_GE_INT8; -extern GrB_Semiring GxB_LOR_GE_INT16; -extern GrB_Semiring GxB_LOR_GE_INT32; -extern GrB_Semiring GxB_LOR_GE_INT64; -extern GrB_Semiring GxB_LOR_GE_UINT8; -extern GrB_Semiring GxB_LOR_GE_UINT16; -extern GrB_Semiring GxB_LOR_GE_UINT32; -extern GrB_Semiring GxB_LOR_GE_UINT64; -extern GrB_Semiring GxB_LOR_GT_BOOL; -extern GrB_Semiring GxB_LOR_GT_FP32; -extern GrB_Semiring GxB_LOR_GT_FP64; -extern GrB_Semiring GxB_LOR_GT_INT8; -extern GrB_Semiring GxB_LOR_GT_INT16; -extern GrB_Semiring GxB_LOR_GT_INT32; -extern GrB_Semiring GxB_LOR_GT_INT64; -extern GrB_Semiring GxB_LOR_GT_UINT8; -extern GrB_Semiring GxB_LOR_GT_UINT16; -extern GrB_Semiring GxB_LOR_GT_UINT32; -extern GrB_Semiring GxB_LOR_GT_UINT64; -extern GrB_Semiring GxB_LOR_LE_BOOL; -extern GrB_Semiring GxB_LOR_LE_FP32; -extern GrB_Semiring GxB_LOR_LE_FP64; -extern GrB_Semiring GxB_LOR_LE_INT8; -extern GrB_Semiring GxB_LOR_LE_INT16; -extern GrB_Semiring GxB_LOR_LE_INT32; -extern GrB_Semiring GxB_LOR_LE_INT64; -extern GrB_Semiring GxB_LOR_LE_UINT8; -extern GrB_Semiring GxB_LOR_LE_UINT16; -extern GrB_Semiring GxB_LOR_LE_UINT32; -extern GrB_Semiring GxB_LOR_LE_UINT64; -extern GrB_Semiring GxB_LOR_LOR_BOOL; -extern GrB_Semiring GxB_LOR_LT_BOOL; -extern GrB_Semiring GxB_LOR_LT_FP32; -extern GrB_Semiring GxB_LOR_LT_FP64; -extern GrB_Semiring GxB_LOR_LT_INT8; -extern GrB_Semiring GxB_LOR_LT_INT16; -extern GrB_Semiring GxB_LOR_LT_INT32; -extern GrB_Semiring GxB_LOR_LT_INT64; -extern GrB_Semiring GxB_LOR_LT_UINT8; -extern GrB_Semiring GxB_LOR_LT_UINT16; -extern GrB_Semiring GxB_LOR_LT_UINT32; -extern GrB_Semiring GxB_LOR_LT_UINT64; -extern GrB_Semiring GxB_LOR_LXOR_BOOL; -extern GrB_Semiring GxB_LOR_NE_FP32; -extern GrB_Semiring GxB_LOR_NE_FP64; -extern GrB_Semiring GxB_LOR_NE_INT8; -extern GrB_Semiring GxB_LOR_NE_INT16; -extern GrB_Semiring GxB_LOR_NE_INT32; -extern GrB_Semiring GxB_LOR_NE_INT64; -extern GrB_Semiring GxB_LOR_NE_UINT8; -extern GrB_Semiring GxB_LOR_NE_UINT16; -extern GrB_Semiring GxB_LOR_NE_UINT32; -extern GrB_Semiring GxB_LOR_NE_UINT64; -extern GrB_Semiring GxB_LOR_PAIR_BOOL; -extern GrB_Semiring GxB_LOR_SECOND_BOOL; -extern GrB_Semiring GxB_LXOR_EQ_BOOL; -extern GrB_Semiring GxB_LXOR_EQ_FP32; -extern GrB_Semiring GxB_LXOR_EQ_FP64; -extern GrB_Semiring GxB_LXOR_EQ_INT8; -extern GrB_Semiring GxB_LXOR_EQ_INT16; -extern GrB_Semiring GxB_LXOR_EQ_INT32; -extern GrB_Semiring GxB_LXOR_EQ_INT64; -extern GrB_Semiring GxB_LXOR_EQ_UINT8; -extern GrB_Semiring GxB_LXOR_EQ_UINT16; -extern GrB_Semiring GxB_LXOR_EQ_UINT32; -extern GrB_Semiring GxB_LXOR_EQ_UINT64; -extern GrB_Semiring GxB_LXOR_FIRST_BOOL; -extern GrB_Semiring GxB_LXOR_GE_BOOL; -extern GrB_Semiring GxB_LXOR_GE_FP32; -extern GrB_Semiring GxB_LXOR_GE_FP64; -extern GrB_Semiring GxB_LXOR_GE_INT8; -extern GrB_Semiring GxB_LXOR_GE_INT16; -extern GrB_Semiring GxB_LXOR_GE_INT32; -extern GrB_Semiring GxB_LXOR_GE_INT64; -extern GrB_Semiring GxB_LXOR_GE_UINT8; -extern GrB_Semiring GxB_LXOR_GE_UINT16; -extern GrB_Semiring GxB_LXOR_GE_UINT32; -extern GrB_Semiring GxB_LXOR_GE_UINT64; -extern GrB_Semiring GxB_LXOR_GT_BOOL; -extern GrB_Semiring GxB_LXOR_GT_FP32; -extern GrB_Semiring GxB_LXOR_GT_FP64; -extern GrB_Semiring GxB_LXOR_GT_INT8; -extern GrB_Semiring GxB_LXOR_GT_INT16; -extern GrB_Semiring GxB_LXOR_GT_INT32; -extern GrB_Semiring GxB_LXOR_GT_INT64; -extern GrB_Semiring GxB_LXOR_GT_UINT8; -extern GrB_Semiring GxB_LXOR_GT_UINT16; -extern GrB_Semiring GxB_LXOR_GT_UINT32; -extern GrB_Semiring GxB_LXOR_GT_UINT64; -extern GrB_Semiring GxB_LXOR_LE_BOOL; -extern GrB_Semiring GxB_LXOR_LE_FP32; -extern GrB_Semiring GxB_LXOR_LE_FP64; -extern GrB_Semiring GxB_LXOR_LE_INT8; -extern GrB_Semiring GxB_LXOR_LE_INT16; -extern GrB_Semiring GxB_LXOR_LE_INT32; -extern GrB_Semiring GxB_LXOR_LE_INT64; -extern GrB_Semiring GxB_LXOR_LE_UINT8; -extern GrB_Semiring GxB_LXOR_LE_UINT16; -extern GrB_Semiring GxB_LXOR_LE_UINT32; -extern GrB_Semiring GxB_LXOR_LE_UINT64; -extern GrB_Semiring GxB_LXOR_LOR_BOOL; -extern GrB_Semiring GxB_LXOR_LT_BOOL; -extern GrB_Semiring GxB_LXOR_LT_FP32; -extern GrB_Semiring GxB_LXOR_LT_FP64; -extern GrB_Semiring GxB_LXOR_LT_INT8; -extern GrB_Semiring GxB_LXOR_LT_INT16; -extern GrB_Semiring GxB_LXOR_LT_INT32; -extern GrB_Semiring GxB_LXOR_LT_INT64; -extern GrB_Semiring GxB_LXOR_LT_UINT8; -extern GrB_Semiring GxB_LXOR_LT_UINT16; -extern GrB_Semiring GxB_LXOR_LT_UINT32; -extern GrB_Semiring GxB_LXOR_LT_UINT64; -extern GrB_Semiring GxB_LXOR_LXOR_BOOL; -extern GrB_Semiring GxB_LXOR_NE_FP32; -extern GrB_Semiring GxB_LXOR_NE_FP64; -extern GrB_Semiring GxB_LXOR_NE_INT8; -extern GrB_Semiring GxB_LXOR_NE_INT16; -extern GrB_Semiring GxB_LXOR_NE_INT32; -extern GrB_Semiring GxB_LXOR_NE_INT64; -extern GrB_Semiring GxB_LXOR_NE_UINT8; -extern GrB_Semiring GxB_LXOR_NE_UINT16; -extern GrB_Semiring GxB_LXOR_NE_UINT32; -extern GrB_Semiring GxB_LXOR_NE_UINT64; -extern GrB_Semiring GxB_LXOR_PAIR_BOOL; -extern GrB_Semiring GxB_LXOR_SECOND_BOOL; -extern GrB_Semiring GxB_MAX_DIV_FP32; -extern GrB_Semiring GxB_MAX_DIV_FP64; -extern GrB_Semiring GxB_MAX_DIV_INT8; -extern GrB_Semiring GxB_MAX_DIV_INT16; -extern GrB_Semiring GxB_MAX_DIV_INT32; -extern GrB_Semiring GxB_MAX_DIV_INT64; -extern GrB_Semiring GxB_MAX_DIV_UINT8; -extern GrB_Semiring GxB_MAX_DIV_UINT16; -extern GrB_Semiring GxB_MAX_DIV_UINT32; -extern GrB_Semiring GxB_MAX_DIV_UINT64; -extern GrB_Semiring GxB_MAX_FIRSTI1_INT32; -extern GrB_Semiring GxB_MAX_FIRSTI1_INT64; -extern GrB_Semiring GxB_MAX_FIRSTI_INT32; -extern GrB_Semiring GxB_MAX_FIRSTI_INT64; -extern GrB_Semiring GxB_MAX_FIRSTJ1_INT32; -extern GrB_Semiring GxB_MAX_FIRSTJ1_INT64; -extern GrB_Semiring GxB_MAX_FIRSTJ_INT32; -extern GrB_Semiring GxB_MAX_FIRSTJ_INT64; -extern GrB_Semiring GxB_MAX_ISEQ_FP32; -extern GrB_Semiring GxB_MAX_ISEQ_FP64; -extern GrB_Semiring GxB_MAX_ISEQ_INT8; -extern GrB_Semiring GxB_MAX_ISEQ_INT16; -extern GrB_Semiring GxB_MAX_ISEQ_INT32; -extern GrB_Semiring GxB_MAX_ISEQ_INT64; -extern GrB_Semiring GxB_MAX_ISEQ_UINT8; -extern GrB_Semiring GxB_MAX_ISEQ_UINT16; -extern GrB_Semiring GxB_MAX_ISEQ_UINT32; -extern GrB_Semiring GxB_MAX_ISEQ_UINT64; -extern GrB_Semiring GxB_MAX_ISGE_FP32; -extern GrB_Semiring GxB_MAX_ISGE_FP64; -extern GrB_Semiring GxB_MAX_ISGE_INT8; -extern GrB_Semiring GxB_MAX_ISGE_INT16; -extern GrB_Semiring GxB_MAX_ISGE_INT32; -extern GrB_Semiring GxB_MAX_ISGE_INT64; -extern GrB_Semiring GxB_MAX_ISGE_UINT8; -extern GrB_Semiring GxB_MAX_ISGE_UINT16; -extern GrB_Semiring GxB_MAX_ISGE_UINT32; -extern GrB_Semiring GxB_MAX_ISGE_UINT64; -extern GrB_Semiring GxB_MAX_ISGT_FP32; -extern GrB_Semiring GxB_MAX_ISGT_FP64; -extern GrB_Semiring GxB_MAX_ISGT_INT8; -extern GrB_Semiring GxB_MAX_ISGT_INT16; -extern GrB_Semiring GxB_MAX_ISGT_INT32; -extern GrB_Semiring GxB_MAX_ISGT_INT64; -extern GrB_Semiring GxB_MAX_ISGT_UINT8; -extern GrB_Semiring GxB_MAX_ISGT_UINT16; -extern GrB_Semiring GxB_MAX_ISGT_UINT32; -extern GrB_Semiring GxB_MAX_ISGT_UINT64; -extern GrB_Semiring GxB_MAX_ISLE_FP32; -extern GrB_Semiring GxB_MAX_ISLE_FP64; -extern GrB_Semiring GxB_MAX_ISLE_INT8; -extern GrB_Semiring GxB_MAX_ISLE_INT16; -extern GrB_Semiring GxB_MAX_ISLE_INT32; -extern GrB_Semiring GxB_MAX_ISLE_INT64; -extern GrB_Semiring GxB_MAX_ISLE_UINT8; -extern GrB_Semiring GxB_MAX_ISLE_UINT16; -extern GrB_Semiring GxB_MAX_ISLE_UINT32; -extern GrB_Semiring GxB_MAX_ISLE_UINT64; -extern GrB_Semiring GxB_MAX_ISLT_FP32; -extern GrB_Semiring GxB_MAX_ISLT_FP64; -extern GrB_Semiring GxB_MAX_ISLT_INT8; -extern GrB_Semiring GxB_MAX_ISLT_INT16; -extern GrB_Semiring GxB_MAX_ISLT_INT32; -extern GrB_Semiring GxB_MAX_ISLT_INT64; -extern GrB_Semiring GxB_MAX_ISLT_UINT8; -extern GrB_Semiring GxB_MAX_ISLT_UINT16; -extern GrB_Semiring GxB_MAX_ISLT_UINT32; -extern GrB_Semiring GxB_MAX_ISLT_UINT64; -extern GrB_Semiring GxB_MAX_ISNE_FP32; -extern GrB_Semiring GxB_MAX_ISNE_FP64; -extern GrB_Semiring GxB_MAX_ISNE_INT8; -extern GrB_Semiring GxB_MAX_ISNE_INT16; -extern GrB_Semiring GxB_MAX_ISNE_INT32; -extern GrB_Semiring GxB_MAX_ISNE_INT64; -extern GrB_Semiring GxB_MAX_ISNE_UINT8; -extern GrB_Semiring GxB_MAX_ISNE_UINT16; -extern GrB_Semiring GxB_MAX_ISNE_UINT32; -extern GrB_Semiring GxB_MAX_ISNE_UINT64; -extern GrB_Semiring GxB_MAX_LAND_FP32; -extern GrB_Semiring GxB_MAX_LAND_FP64; -extern GrB_Semiring GxB_MAX_LAND_INT8; -extern GrB_Semiring GxB_MAX_LAND_INT16; -extern GrB_Semiring GxB_MAX_LAND_INT32; -extern GrB_Semiring GxB_MAX_LAND_INT64; -extern GrB_Semiring GxB_MAX_LAND_UINT8; -extern GrB_Semiring GxB_MAX_LAND_UINT16; -extern GrB_Semiring GxB_MAX_LAND_UINT32; -extern GrB_Semiring GxB_MAX_LAND_UINT64; -extern GrB_Semiring GxB_MAX_LOR_FP32; -extern GrB_Semiring GxB_MAX_LOR_FP64; -extern GrB_Semiring GxB_MAX_LOR_INT8; -extern GrB_Semiring GxB_MAX_LOR_INT16; -extern GrB_Semiring GxB_MAX_LOR_INT32; -extern GrB_Semiring GxB_MAX_LOR_INT64; -extern GrB_Semiring GxB_MAX_LOR_UINT8; -extern GrB_Semiring GxB_MAX_LOR_UINT16; -extern GrB_Semiring GxB_MAX_LOR_UINT32; -extern GrB_Semiring GxB_MAX_LOR_UINT64; -extern GrB_Semiring GxB_MAX_LXOR_FP32; -extern GrB_Semiring GxB_MAX_LXOR_FP64; -extern GrB_Semiring GxB_MAX_LXOR_INT8; -extern GrB_Semiring GxB_MAX_LXOR_INT16; -extern GrB_Semiring GxB_MAX_LXOR_INT32; -extern GrB_Semiring GxB_MAX_LXOR_INT64; -extern GrB_Semiring GxB_MAX_LXOR_UINT8; -extern GrB_Semiring GxB_MAX_LXOR_UINT16; -extern GrB_Semiring GxB_MAX_LXOR_UINT32; -extern GrB_Semiring GxB_MAX_LXOR_UINT64; -extern GrB_Semiring GxB_MAX_MAX_FP32; -extern GrB_Semiring GxB_MAX_MAX_FP64; -extern GrB_Semiring GxB_MAX_MAX_INT8; -extern GrB_Semiring GxB_MAX_MAX_INT16; -extern GrB_Semiring GxB_MAX_MAX_INT32; -extern GrB_Semiring GxB_MAX_MAX_INT64; -extern GrB_Semiring GxB_MAX_MAX_UINT8; -extern GrB_Semiring GxB_MAX_MAX_UINT16; -extern GrB_Semiring GxB_MAX_MAX_UINT32; -extern GrB_Semiring GxB_MAX_MAX_UINT64; -extern GrB_Semiring GxB_MAX_MINUS_FP32; -extern GrB_Semiring GxB_MAX_MINUS_FP64; -extern GrB_Semiring GxB_MAX_MINUS_INT8; -extern GrB_Semiring GxB_MAX_MINUS_INT16; -extern GrB_Semiring GxB_MAX_MINUS_INT32; -extern GrB_Semiring GxB_MAX_MINUS_INT64; -extern GrB_Semiring GxB_MAX_MINUS_UINT8; -extern GrB_Semiring GxB_MAX_MINUS_UINT16; -extern GrB_Semiring GxB_MAX_MINUS_UINT32; -extern GrB_Semiring GxB_MAX_MINUS_UINT64; -extern GrB_Semiring GxB_MAX_PAIR_FP32; -extern GrB_Semiring GxB_MAX_PAIR_FP64; -extern GrB_Semiring GxB_MAX_PAIR_INT8; -extern GrB_Semiring GxB_MAX_PAIR_INT16; -extern GrB_Semiring GxB_MAX_PAIR_INT32; -extern GrB_Semiring GxB_MAX_PAIR_INT64; -extern GrB_Semiring GxB_MAX_PAIR_UINT8; -extern GrB_Semiring GxB_MAX_PAIR_UINT16; -extern GrB_Semiring GxB_MAX_PAIR_UINT32; -extern GrB_Semiring GxB_MAX_PAIR_UINT64; -extern GrB_Semiring GxB_MAX_RDIV_FP32; -extern GrB_Semiring GxB_MAX_RDIV_FP64; -extern GrB_Semiring GxB_MAX_RDIV_INT8; -extern GrB_Semiring GxB_MAX_RDIV_INT16; -extern GrB_Semiring GxB_MAX_RDIV_INT32; -extern GrB_Semiring GxB_MAX_RDIV_INT64; -extern GrB_Semiring GxB_MAX_RDIV_UINT8; -extern GrB_Semiring GxB_MAX_RDIV_UINT16; -extern GrB_Semiring GxB_MAX_RDIV_UINT32; -extern GrB_Semiring GxB_MAX_RDIV_UINT64; -extern GrB_Semiring GxB_MAX_RMINUS_FP32; -extern GrB_Semiring GxB_MAX_RMINUS_FP64; -extern GrB_Semiring GxB_MAX_RMINUS_INT8; -extern GrB_Semiring GxB_MAX_RMINUS_INT16; -extern GrB_Semiring GxB_MAX_RMINUS_INT32; -extern GrB_Semiring GxB_MAX_RMINUS_INT64; -extern GrB_Semiring GxB_MAX_RMINUS_UINT8; -extern GrB_Semiring GxB_MAX_RMINUS_UINT16; -extern GrB_Semiring GxB_MAX_RMINUS_UINT32; -extern GrB_Semiring GxB_MAX_RMINUS_UINT64; -extern GrB_Semiring GxB_MAX_SECONDI1_INT32; -extern GrB_Semiring GxB_MAX_SECONDI1_INT64; -extern GrB_Semiring GxB_MAX_SECONDI_INT32; -extern GrB_Semiring GxB_MAX_SECONDI_INT64; -extern GrB_Semiring GxB_MAX_SECONDJ1_INT32; -extern GrB_Semiring GxB_MAX_SECONDJ1_INT64; -extern GrB_Semiring GxB_MAX_SECONDJ_INT32; -extern GrB_Semiring GxB_MAX_SECONDJ_INT64; -extern GrB_Semiring GxB_MIN_DIV_FP32; -extern GrB_Semiring GxB_MIN_DIV_FP64; -extern GrB_Semiring GxB_MIN_DIV_INT8; -extern GrB_Semiring GxB_MIN_DIV_INT16; -extern GrB_Semiring GxB_MIN_DIV_INT32; -extern GrB_Semiring GxB_MIN_DIV_INT64; -extern GrB_Semiring GxB_MIN_DIV_UINT8; -extern GrB_Semiring GxB_MIN_DIV_UINT16; -extern GrB_Semiring GxB_MIN_DIV_UINT32; -extern GrB_Semiring GxB_MIN_DIV_UINT64; -extern GrB_Semiring GxB_MIN_FIRSTI1_INT32; -extern GrB_Semiring GxB_MIN_FIRSTI1_INT64; -extern GrB_Semiring GxB_MIN_FIRSTI_INT32; -extern GrB_Semiring GxB_MIN_FIRSTI_INT64; -extern GrB_Semiring GxB_MIN_FIRSTJ1_INT32; -extern GrB_Semiring GxB_MIN_FIRSTJ1_INT64; -extern GrB_Semiring GxB_MIN_FIRSTJ_INT32; -extern GrB_Semiring GxB_MIN_FIRSTJ_INT64; -extern GrB_Semiring GxB_MIN_ISEQ_FP32; -extern GrB_Semiring GxB_MIN_ISEQ_FP64; -extern GrB_Semiring GxB_MIN_ISEQ_INT8; -extern GrB_Semiring GxB_MIN_ISEQ_INT16; -extern GrB_Semiring GxB_MIN_ISEQ_INT32; -extern GrB_Semiring GxB_MIN_ISEQ_INT64; -extern GrB_Semiring GxB_MIN_ISEQ_UINT8; -extern GrB_Semiring GxB_MIN_ISEQ_UINT16; -extern GrB_Semiring GxB_MIN_ISEQ_UINT32; -extern GrB_Semiring GxB_MIN_ISEQ_UINT64; -extern GrB_Semiring GxB_MIN_ISGE_FP32; -extern GrB_Semiring GxB_MIN_ISGE_FP64; -extern GrB_Semiring GxB_MIN_ISGE_INT8; -extern GrB_Semiring GxB_MIN_ISGE_INT16; -extern GrB_Semiring GxB_MIN_ISGE_INT32; -extern GrB_Semiring GxB_MIN_ISGE_INT64; -extern GrB_Semiring GxB_MIN_ISGE_UINT8; -extern GrB_Semiring GxB_MIN_ISGE_UINT16; -extern GrB_Semiring GxB_MIN_ISGE_UINT32; -extern GrB_Semiring GxB_MIN_ISGE_UINT64; -extern GrB_Semiring GxB_MIN_ISGT_FP32; -extern GrB_Semiring GxB_MIN_ISGT_FP64; -extern GrB_Semiring GxB_MIN_ISGT_INT8; -extern GrB_Semiring GxB_MIN_ISGT_INT16; -extern GrB_Semiring GxB_MIN_ISGT_INT32; -extern GrB_Semiring GxB_MIN_ISGT_INT64; -extern GrB_Semiring GxB_MIN_ISGT_UINT8; -extern GrB_Semiring GxB_MIN_ISGT_UINT16; -extern GrB_Semiring GxB_MIN_ISGT_UINT32; -extern GrB_Semiring GxB_MIN_ISGT_UINT64; -extern GrB_Semiring GxB_MIN_ISLE_FP32; -extern GrB_Semiring GxB_MIN_ISLE_FP64; -extern GrB_Semiring GxB_MIN_ISLE_INT8; -extern GrB_Semiring GxB_MIN_ISLE_INT16; -extern GrB_Semiring GxB_MIN_ISLE_INT32; -extern GrB_Semiring GxB_MIN_ISLE_INT64; -extern GrB_Semiring GxB_MIN_ISLE_UINT8; -extern GrB_Semiring GxB_MIN_ISLE_UINT16; -extern GrB_Semiring GxB_MIN_ISLE_UINT32; -extern GrB_Semiring GxB_MIN_ISLE_UINT64; -extern GrB_Semiring GxB_MIN_ISLT_FP32; -extern GrB_Semiring GxB_MIN_ISLT_FP64; -extern GrB_Semiring GxB_MIN_ISLT_INT8; -extern GrB_Semiring GxB_MIN_ISLT_INT16; -extern GrB_Semiring GxB_MIN_ISLT_INT32; -extern GrB_Semiring GxB_MIN_ISLT_INT64; -extern GrB_Semiring GxB_MIN_ISLT_UINT8; -extern GrB_Semiring GxB_MIN_ISLT_UINT16; -extern GrB_Semiring GxB_MIN_ISLT_UINT32; -extern GrB_Semiring GxB_MIN_ISLT_UINT64; -extern GrB_Semiring GxB_MIN_ISNE_FP32; -extern GrB_Semiring GxB_MIN_ISNE_FP64; -extern GrB_Semiring GxB_MIN_ISNE_INT8; -extern GrB_Semiring GxB_MIN_ISNE_INT16; -extern GrB_Semiring GxB_MIN_ISNE_INT32; -extern GrB_Semiring GxB_MIN_ISNE_INT64; -extern GrB_Semiring GxB_MIN_ISNE_UINT8; -extern GrB_Semiring GxB_MIN_ISNE_UINT16; -extern GrB_Semiring GxB_MIN_ISNE_UINT32; -extern GrB_Semiring GxB_MIN_ISNE_UINT64; -extern GrB_Semiring GxB_MIN_LAND_FP32; -extern GrB_Semiring GxB_MIN_LAND_FP64; -extern GrB_Semiring GxB_MIN_LAND_INT8; -extern GrB_Semiring GxB_MIN_LAND_INT16; -extern GrB_Semiring GxB_MIN_LAND_INT32; -extern GrB_Semiring GxB_MIN_LAND_INT64; -extern GrB_Semiring GxB_MIN_LAND_UINT8; -extern GrB_Semiring GxB_MIN_LAND_UINT16; -extern GrB_Semiring GxB_MIN_LAND_UINT32; -extern GrB_Semiring GxB_MIN_LAND_UINT64; -extern GrB_Semiring GxB_MIN_LOR_FP32; -extern GrB_Semiring GxB_MIN_LOR_FP64; -extern GrB_Semiring GxB_MIN_LOR_INT8; -extern GrB_Semiring GxB_MIN_LOR_INT16; -extern GrB_Semiring GxB_MIN_LOR_INT32; -extern GrB_Semiring GxB_MIN_LOR_INT64; -extern GrB_Semiring GxB_MIN_LOR_UINT8; -extern GrB_Semiring GxB_MIN_LOR_UINT16; -extern GrB_Semiring GxB_MIN_LOR_UINT32; -extern GrB_Semiring GxB_MIN_LOR_UINT64; -extern GrB_Semiring GxB_MIN_LXOR_FP32; -extern GrB_Semiring GxB_MIN_LXOR_FP64; -extern GrB_Semiring GxB_MIN_LXOR_INT8; -extern GrB_Semiring GxB_MIN_LXOR_INT16; -extern GrB_Semiring GxB_MIN_LXOR_INT32; -extern GrB_Semiring GxB_MIN_LXOR_INT64; -extern GrB_Semiring GxB_MIN_LXOR_UINT8; -extern GrB_Semiring GxB_MIN_LXOR_UINT16; -extern GrB_Semiring GxB_MIN_LXOR_UINT32; -extern GrB_Semiring GxB_MIN_LXOR_UINT64; -extern GrB_Semiring GxB_MIN_MINUS_FP32; -extern GrB_Semiring GxB_MIN_MINUS_FP64; -extern GrB_Semiring GxB_MIN_MINUS_INT8; -extern GrB_Semiring GxB_MIN_MINUS_INT16; -extern GrB_Semiring GxB_MIN_MINUS_INT32; -extern GrB_Semiring GxB_MIN_MINUS_INT64; -extern GrB_Semiring GxB_MIN_MINUS_UINT8; -extern GrB_Semiring GxB_MIN_MINUS_UINT16; -extern GrB_Semiring GxB_MIN_MINUS_UINT32; -extern GrB_Semiring GxB_MIN_MINUS_UINT64; -extern GrB_Semiring GxB_MIN_MIN_FP32; -extern GrB_Semiring GxB_MIN_MIN_FP64; -extern GrB_Semiring GxB_MIN_MIN_INT8; -extern GrB_Semiring GxB_MIN_MIN_INT16; -extern GrB_Semiring GxB_MIN_MIN_INT32; -extern GrB_Semiring GxB_MIN_MIN_INT64; -extern GrB_Semiring GxB_MIN_MIN_UINT8; -extern GrB_Semiring GxB_MIN_MIN_UINT16; -extern GrB_Semiring GxB_MIN_MIN_UINT32; -extern GrB_Semiring GxB_MIN_MIN_UINT64; -extern GrB_Semiring GxB_MIN_PAIR_FP32; -extern GrB_Semiring GxB_MIN_PAIR_FP64; -extern GrB_Semiring GxB_MIN_PAIR_INT8; -extern GrB_Semiring GxB_MIN_PAIR_INT16; -extern GrB_Semiring GxB_MIN_PAIR_INT32; -extern GrB_Semiring GxB_MIN_PAIR_INT64; -extern GrB_Semiring GxB_MIN_PAIR_UINT8; -extern GrB_Semiring GxB_MIN_PAIR_UINT16; -extern GrB_Semiring GxB_MIN_PAIR_UINT32; -extern GrB_Semiring GxB_MIN_PAIR_UINT64; -extern GrB_Semiring GxB_MIN_RDIV_FP32; -extern GrB_Semiring GxB_MIN_RDIV_FP64; -extern GrB_Semiring GxB_MIN_RDIV_INT8; -extern GrB_Semiring GxB_MIN_RDIV_INT16; -extern GrB_Semiring GxB_MIN_RDIV_INT32; -extern GrB_Semiring GxB_MIN_RDIV_INT64; -extern GrB_Semiring GxB_MIN_RDIV_UINT8; -extern GrB_Semiring GxB_MIN_RDIV_UINT16; -extern GrB_Semiring GxB_MIN_RDIV_UINT32; -extern GrB_Semiring GxB_MIN_RDIV_UINT64; -extern GrB_Semiring GxB_MIN_RMINUS_FP32; -extern GrB_Semiring GxB_MIN_RMINUS_FP64; -extern GrB_Semiring GxB_MIN_RMINUS_INT8; -extern GrB_Semiring GxB_MIN_RMINUS_INT16; -extern GrB_Semiring GxB_MIN_RMINUS_INT32; -extern GrB_Semiring GxB_MIN_RMINUS_INT64; -extern GrB_Semiring GxB_MIN_RMINUS_UINT8; -extern GrB_Semiring GxB_MIN_RMINUS_UINT16; -extern GrB_Semiring GxB_MIN_RMINUS_UINT32; -extern GrB_Semiring GxB_MIN_RMINUS_UINT64; -extern GrB_Semiring GxB_MIN_SECONDI1_INT32; -extern GrB_Semiring GxB_MIN_SECONDI1_INT64; -extern GrB_Semiring GxB_MIN_SECONDI_INT32; -extern GrB_Semiring GxB_MIN_SECONDI_INT64; -extern GrB_Semiring GxB_MIN_SECONDJ1_INT32; -extern GrB_Semiring GxB_MIN_SECONDJ1_INT64; -extern GrB_Semiring GxB_MIN_SECONDJ_INT32; -extern GrB_Semiring GxB_MIN_SECONDJ_INT64; -extern GrB_Semiring GxB_PLUS_DIV_FC32; -extern GrB_Semiring GxB_PLUS_DIV_FC64; -extern GrB_Semiring GxB_PLUS_DIV_FP32; -extern GrB_Semiring GxB_PLUS_DIV_FP64; -extern GrB_Semiring GxB_PLUS_DIV_INT8; -extern GrB_Semiring GxB_PLUS_DIV_INT16; -extern GrB_Semiring GxB_PLUS_DIV_INT32; -extern GrB_Semiring GxB_PLUS_DIV_INT64; -extern GrB_Semiring GxB_PLUS_DIV_UINT8; -extern GrB_Semiring GxB_PLUS_DIV_UINT16; -extern GrB_Semiring GxB_PLUS_DIV_UINT32; -extern GrB_Semiring GxB_PLUS_DIV_UINT64; -extern GrB_Semiring GxB_PLUS_FIRSTI1_INT32; -extern GrB_Semiring GxB_PLUS_FIRSTI1_INT64; -extern GrB_Semiring GxB_PLUS_FIRSTI_INT32; -extern GrB_Semiring GxB_PLUS_FIRSTI_INT64; -extern GrB_Semiring GxB_PLUS_FIRSTJ1_INT32; -extern GrB_Semiring GxB_PLUS_FIRSTJ1_INT64; -extern GrB_Semiring GxB_PLUS_FIRSTJ_INT32; -extern GrB_Semiring GxB_PLUS_FIRSTJ_INT64; -extern GrB_Semiring GxB_PLUS_FIRST_FC32; -extern GrB_Semiring GxB_PLUS_FIRST_FC64; -extern GrB_Semiring GxB_PLUS_FIRST_FP32; -extern GrB_Semiring GxB_PLUS_FIRST_FP64; -extern GrB_Semiring GxB_PLUS_FIRST_INT8; -extern GrB_Semiring GxB_PLUS_FIRST_INT16; -extern GrB_Semiring GxB_PLUS_FIRST_INT32; -extern GrB_Semiring GxB_PLUS_FIRST_INT64; -extern GrB_Semiring GxB_PLUS_FIRST_UINT8; -extern GrB_Semiring GxB_PLUS_FIRST_UINT16; -extern GrB_Semiring GxB_PLUS_FIRST_UINT32; -extern GrB_Semiring GxB_PLUS_FIRST_UINT64; -extern GrB_Semiring GxB_PLUS_ISEQ_FP32; -extern GrB_Semiring GxB_PLUS_ISEQ_FP64; -extern GrB_Semiring GxB_PLUS_ISEQ_INT8; -extern GrB_Semiring GxB_PLUS_ISEQ_INT16; -extern GrB_Semiring GxB_PLUS_ISEQ_INT32; -extern GrB_Semiring GxB_PLUS_ISEQ_INT64; -extern GrB_Semiring GxB_PLUS_ISEQ_UINT8; -extern GrB_Semiring GxB_PLUS_ISEQ_UINT16; -extern GrB_Semiring GxB_PLUS_ISEQ_UINT32; -extern GrB_Semiring GxB_PLUS_ISEQ_UINT64; -extern GrB_Semiring GxB_PLUS_ISGE_FP32; -extern GrB_Semiring GxB_PLUS_ISGE_FP64; -extern GrB_Semiring GxB_PLUS_ISGE_INT8; -extern GrB_Semiring GxB_PLUS_ISGE_INT16; -extern GrB_Semiring GxB_PLUS_ISGE_INT32; -extern GrB_Semiring GxB_PLUS_ISGE_INT64; -extern GrB_Semiring GxB_PLUS_ISGE_UINT8; -extern GrB_Semiring GxB_PLUS_ISGE_UINT16; -extern GrB_Semiring GxB_PLUS_ISGE_UINT32; -extern GrB_Semiring GxB_PLUS_ISGE_UINT64; -extern GrB_Semiring GxB_PLUS_ISGT_FP32; -extern GrB_Semiring GxB_PLUS_ISGT_FP64; -extern GrB_Semiring GxB_PLUS_ISGT_INT8; -extern GrB_Semiring GxB_PLUS_ISGT_INT16; -extern GrB_Semiring GxB_PLUS_ISGT_INT32; -extern GrB_Semiring GxB_PLUS_ISGT_INT64; -extern GrB_Semiring GxB_PLUS_ISGT_UINT8; -extern GrB_Semiring GxB_PLUS_ISGT_UINT16; -extern GrB_Semiring GxB_PLUS_ISGT_UINT32; -extern GrB_Semiring GxB_PLUS_ISGT_UINT64; -extern GrB_Semiring GxB_PLUS_ISLE_FP32; -extern GrB_Semiring GxB_PLUS_ISLE_FP64; -extern GrB_Semiring GxB_PLUS_ISLE_INT8; -extern GrB_Semiring GxB_PLUS_ISLE_INT16; -extern GrB_Semiring GxB_PLUS_ISLE_INT32; -extern GrB_Semiring GxB_PLUS_ISLE_INT64; -extern GrB_Semiring GxB_PLUS_ISLE_UINT8; -extern GrB_Semiring GxB_PLUS_ISLE_UINT16; -extern GrB_Semiring GxB_PLUS_ISLE_UINT32; -extern GrB_Semiring GxB_PLUS_ISLE_UINT64; -extern GrB_Semiring GxB_PLUS_ISLT_FP32; -extern GrB_Semiring GxB_PLUS_ISLT_FP64; -extern GrB_Semiring GxB_PLUS_ISLT_INT8; -extern GrB_Semiring GxB_PLUS_ISLT_INT16; -extern GrB_Semiring GxB_PLUS_ISLT_INT32; -extern GrB_Semiring GxB_PLUS_ISLT_INT64; -extern GrB_Semiring GxB_PLUS_ISLT_UINT8; -extern GrB_Semiring GxB_PLUS_ISLT_UINT16; -extern GrB_Semiring GxB_PLUS_ISLT_UINT32; -extern GrB_Semiring GxB_PLUS_ISLT_UINT64; -extern GrB_Semiring GxB_PLUS_ISNE_FP32; -extern GrB_Semiring GxB_PLUS_ISNE_FP64; -extern GrB_Semiring GxB_PLUS_ISNE_INT8; -extern GrB_Semiring GxB_PLUS_ISNE_INT16; -extern GrB_Semiring GxB_PLUS_ISNE_INT32; -extern GrB_Semiring GxB_PLUS_ISNE_INT64; -extern GrB_Semiring GxB_PLUS_ISNE_UINT8; -extern GrB_Semiring GxB_PLUS_ISNE_UINT16; -extern GrB_Semiring GxB_PLUS_ISNE_UINT32; -extern GrB_Semiring GxB_PLUS_ISNE_UINT64; -extern GrB_Semiring GxB_PLUS_LAND_FP32; -extern GrB_Semiring GxB_PLUS_LAND_FP64; -extern GrB_Semiring GxB_PLUS_LAND_INT8; -extern GrB_Semiring GxB_PLUS_LAND_INT16; -extern GrB_Semiring GxB_PLUS_LAND_INT32; -extern GrB_Semiring GxB_PLUS_LAND_INT64; -extern GrB_Semiring GxB_PLUS_LAND_UINT8; -extern GrB_Semiring GxB_PLUS_LAND_UINT16; -extern GrB_Semiring GxB_PLUS_LAND_UINT32; -extern GrB_Semiring GxB_PLUS_LAND_UINT64; -extern GrB_Semiring GxB_PLUS_LOR_FP32; -extern GrB_Semiring GxB_PLUS_LOR_FP64; -extern GrB_Semiring GxB_PLUS_LOR_INT8; -extern GrB_Semiring GxB_PLUS_LOR_INT16; -extern GrB_Semiring GxB_PLUS_LOR_INT32; -extern GrB_Semiring GxB_PLUS_LOR_INT64; -extern GrB_Semiring GxB_PLUS_LOR_UINT8; -extern GrB_Semiring GxB_PLUS_LOR_UINT16; -extern GrB_Semiring GxB_PLUS_LOR_UINT32; -extern GrB_Semiring GxB_PLUS_LOR_UINT64; -extern GrB_Semiring GxB_PLUS_LXOR_FP32; -extern GrB_Semiring GxB_PLUS_LXOR_FP64; -extern GrB_Semiring GxB_PLUS_LXOR_INT8; -extern GrB_Semiring GxB_PLUS_LXOR_INT16; -extern GrB_Semiring GxB_PLUS_LXOR_INT32; -extern GrB_Semiring GxB_PLUS_LXOR_INT64; -extern GrB_Semiring GxB_PLUS_LXOR_UINT8; -extern GrB_Semiring GxB_PLUS_LXOR_UINT16; -extern GrB_Semiring GxB_PLUS_LXOR_UINT32; -extern GrB_Semiring GxB_PLUS_LXOR_UINT64; -extern GrB_Semiring GxB_PLUS_MAX_FP32; -extern GrB_Semiring GxB_PLUS_MAX_FP64; -extern GrB_Semiring GxB_PLUS_MAX_INT8; -extern GrB_Semiring GxB_PLUS_MAX_INT16; -extern GrB_Semiring GxB_PLUS_MAX_INT32; -extern GrB_Semiring GxB_PLUS_MAX_INT64; -extern GrB_Semiring GxB_PLUS_MAX_UINT8; -extern GrB_Semiring GxB_PLUS_MAX_UINT16; -extern GrB_Semiring GxB_PLUS_MAX_UINT32; -extern GrB_Semiring GxB_PLUS_MAX_UINT64; -extern GrB_Semiring GxB_PLUS_MINUS_FC32; -extern GrB_Semiring GxB_PLUS_MINUS_FC64; -extern GrB_Semiring GxB_PLUS_MINUS_FP32; -extern GrB_Semiring GxB_PLUS_MINUS_FP64; -extern GrB_Semiring GxB_PLUS_MINUS_INT8; -extern GrB_Semiring GxB_PLUS_MINUS_INT16; -extern GrB_Semiring GxB_PLUS_MINUS_INT32; -extern GrB_Semiring GxB_PLUS_MINUS_INT64; -extern GrB_Semiring GxB_PLUS_MINUS_UINT8; -extern GrB_Semiring GxB_PLUS_MINUS_UINT16; -extern GrB_Semiring GxB_PLUS_MINUS_UINT32; -extern GrB_Semiring GxB_PLUS_MINUS_UINT64; -extern GrB_Semiring GxB_PLUS_PAIR_FC32; -extern GrB_Semiring GxB_PLUS_PAIR_FC64; -extern GrB_Semiring GxB_PLUS_PAIR_FP32; -extern GrB_Semiring GxB_PLUS_PAIR_FP64; -extern GrB_Semiring GxB_PLUS_PAIR_INT8; -extern GrB_Semiring GxB_PLUS_PAIR_INT16; -extern GrB_Semiring GxB_PLUS_PAIR_INT32; -extern GrB_Semiring GxB_PLUS_PAIR_INT64; -extern GrB_Semiring GxB_PLUS_PAIR_UINT8; -extern GrB_Semiring GxB_PLUS_PAIR_UINT16; -extern GrB_Semiring GxB_PLUS_PAIR_UINT32; -extern GrB_Semiring GxB_PLUS_PAIR_UINT64; -extern GrB_Semiring GxB_PLUS_PLUS_FC32; -extern GrB_Semiring GxB_PLUS_PLUS_FC64; -extern GrB_Semiring GxB_PLUS_PLUS_FP32; -extern GrB_Semiring GxB_PLUS_PLUS_FP64; -extern GrB_Semiring GxB_PLUS_PLUS_INT8; -extern GrB_Semiring GxB_PLUS_PLUS_INT16; -extern GrB_Semiring GxB_PLUS_PLUS_INT32; -extern GrB_Semiring GxB_PLUS_PLUS_INT64; -extern GrB_Semiring GxB_PLUS_PLUS_UINT8; -extern GrB_Semiring GxB_PLUS_PLUS_UINT16; -extern GrB_Semiring GxB_PLUS_PLUS_UINT32; -extern GrB_Semiring GxB_PLUS_PLUS_UINT64; -extern GrB_Semiring GxB_PLUS_RDIV_FC32; -extern GrB_Semiring GxB_PLUS_RDIV_FC64; -extern GrB_Semiring GxB_PLUS_RDIV_FP32; -extern GrB_Semiring GxB_PLUS_RDIV_FP64; -extern GrB_Semiring GxB_PLUS_RDIV_INT8; -extern GrB_Semiring GxB_PLUS_RDIV_INT16; -extern GrB_Semiring GxB_PLUS_RDIV_INT32; -extern GrB_Semiring GxB_PLUS_RDIV_INT64; -extern GrB_Semiring GxB_PLUS_RDIV_UINT8; -extern GrB_Semiring GxB_PLUS_RDIV_UINT16; -extern GrB_Semiring GxB_PLUS_RDIV_UINT32; -extern GrB_Semiring GxB_PLUS_RDIV_UINT64; -extern GrB_Semiring GxB_PLUS_RMINUS_FC32; -extern GrB_Semiring GxB_PLUS_RMINUS_FC64; -extern GrB_Semiring GxB_PLUS_RMINUS_FP32; -extern GrB_Semiring GxB_PLUS_RMINUS_FP64; -extern GrB_Semiring GxB_PLUS_RMINUS_INT8; -extern GrB_Semiring GxB_PLUS_RMINUS_INT16; -extern GrB_Semiring GxB_PLUS_RMINUS_INT32; -extern GrB_Semiring GxB_PLUS_RMINUS_INT64; -extern GrB_Semiring GxB_PLUS_RMINUS_UINT8; -extern GrB_Semiring GxB_PLUS_RMINUS_UINT16; -extern GrB_Semiring GxB_PLUS_RMINUS_UINT32; -extern GrB_Semiring GxB_PLUS_RMINUS_UINT64; -extern GrB_Semiring GxB_PLUS_SECONDI1_INT32; -extern GrB_Semiring GxB_PLUS_SECONDI1_INT64; -extern GrB_Semiring GxB_PLUS_SECONDI_INT32; -extern GrB_Semiring GxB_PLUS_SECONDI_INT64; -extern GrB_Semiring GxB_PLUS_SECONDJ1_INT32; -extern GrB_Semiring GxB_PLUS_SECONDJ1_INT64; -extern GrB_Semiring GxB_PLUS_SECONDJ_INT32; -extern GrB_Semiring GxB_PLUS_SECONDJ_INT64; -extern GrB_Semiring GxB_PLUS_SECOND_FC32; -extern GrB_Semiring GxB_PLUS_SECOND_FC64; -extern GrB_Semiring GxB_PLUS_SECOND_FP32; -extern GrB_Semiring GxB_PLUS_SECOND_FP64; -extern GrB_Semiring GxB_PLUS_SECOND_INT8; -extern GrB_Semiring GxB_PLUS_SECOND_INT16; -extern GrB_Semiring GxB_PLUS_SECOND_INT32; -extern GrB_Semiring GxB_PLUS_SECOND_INT64; -extern GrB_Semiring GxB_PLUS_SECOND_UINT8; -extern GrB_Semiring GxB_PLUS_SECOND_UINT16; -extern GrB_Semiring GxB_PLUS_SECOND_UINT32; -extern GrB_Semiring GxB_PLUS_SECOND_UINT64; -extern GrB_Semiring GxB_PLUS_TIMES_FC32; -extern GrB_Semiring GxB_PLUS_TIMES_FC64; -extern GrB_Semiring GxB_TIMES_DIV_FC32; -extern GrB_Semiring GxB_TIMES_DIV_FC64; -extern GrB_Semiring GxB_TIMES_DIV_FP32; -extern GrB_Semiring GxB_TIMES_DIV_FP64; -extern GrB_Semiring GxB_TIMES_DIV_INT8; -extern GrB_Semiring GxB_TIMES_DIV_INT16; -extern GrB_Semiring GxB_TIMES_DIV_INT32; -extern GrB_Semiring GxB_TIMES_DIV_INT64; -extern GrB_Semiring GxB_TIMES_DIV_UINT8; -extern GrB_Semiring GxB_TIMES_DIV_UINT16; -extern GrB_Semiring GxB_TIMES_DIV_UINT32; -extern GrB_Semiring GxB_TIMES_DIV_UINT64; -extern GrB_Semiring GxB_TIMES_FIRSTI1_INT32; -extern GrB_Semiring GxB_TIMES_FIRSTI1_INT64; -extern GrB_Semiring GxB_TIMES_FIRSTI_INT32; -extern GrB_Semiring GxB_TIMES_FIRSTI_INT64; -extern GrB_Semiring GxB_TIMES_FIRSTJ1_INT32; -extern GrB_Semiring GxB_TIMES_FIRSTJ1_INT64; -extern GrB_Semiring GxB_TIMES_FIRSTJ_INT32; -extern GrB_Semiring GxB_TIMES_FIRSTJ_INT64; -extern GrB_Semiring GxB_TIMES_FIRST_FC32; -extern GrB_Semiring GxB_TIMES_FIRST_FC64; -extern GrB_Semiring GxB_TIMES_FIRST_FP32; -extern GrB_Semiring GxB_TIMES_FIRST_FP64; -extern GrB_Semiring GxB_TIMES_FIRST_INT8; -extern GrB_Semiring GxB_TIMES_FIRST_INT16; -extern GrB_Semiring GxB_TIMES_FIRST_INT32; -extern GrB_Semiring GxB_TIMES_FIRST_INT64; -extern GrB_Semiring GxB_TIMES_FIRST_UINT8; -extern GrB_Semiring GxB_TIMES_FIRST_UINT16; -extern GrB_Semiring GxB_TIMES_FIRST_UINT32; -extern GrB_Semiring GxB_TIMES_FIRST_UINT64; -extern GrB_Semiring GxB_TIMES_ISEQ_FP32; -extern GrB_Semiring GxB_TIMES_ISEQ_FP64; -extern GrB_Semiring GxB_TIMES_ISEQ_INT8; -extern GrB_Semiring GxB_TIMES_ISEQ_INT16; -extern GrB_Semiring GxB_TIMES_ISEQ_INT32; -extern GrB_Semiring GxB_TIMES_ISEQ_INT64; -extern GrB_Semiring GxB_TIMES_ISEQ_UINT8; -extern GrB_Semiring GxB_TIMES_ISEQ_UINT16; -extern GrB_Semiring GxB_TIMES_ISEQ_UINT32; -extern GrB_Semiring GxB_TIMES_ISEQ_UINT64; -extern GrB_Semiring GxB_TIMES_ISGE_FP32; -extern GrB_Semiring GxB_TIMES_ISGE_FP64; -extern GrB_Semiring GxB_TIMES_ISGE_INT8; -extern GrB_Semiring GxB_TIMES_ISGE_INT16; -extern GrB_Semiring GxB_TIMES_ISGE_INT32; -extern GrB_Semiring GxB_TIMES_ISGE_INT64; -extern GrB_Semiring GxB_TIMES_ISGE_UINT8; -extern GrB_Semiring GxB_TIMES_ISGE_UINT16; -extern GrB_Semiring GxB_TIMES_ISGE_UINT32; -extern GrB_Semiring GxB_TIMES_ISGE_UINT64; -extern GrB_Semiring GxB_TIMES_ISGT_FP32; -extern GrB_Semiring GxB_TIMES_ISGT_FP64; -extern GrB_Semiring GxB_TIMES_ISGT_INT8; -extern GrB_Semiring GxB_TIMES_ISGT_INT16; -extern GrB_Semiring GxB_TIMES_ISGT_INT32; -extern GrB_Semiring GxB_TIMES_ISGT_INT64; -extern GrB_Semiring GxB_TIMES_ISGT_UINT8; -extern GrB_Semiring GxB_TIMES_ISGT_UINT16; -extern GrB_Semiring GxB_TIMES_ISGT_UINT32; -extern GrB_Semiring GxB_TIMES_ISGT_UINT64; -extern GrB_Semiring GxB_TIMES_ISLE_FP32; -extern GrB_Semiring GxB_TIMES_ISLE_FP64; -extern GrB_Semiring GxB_TIMES_ISLE_INT8; -extern GrB_Semiring GxB_TIMES_ISLE_INT16; -extern GrB_Semiring GxB_TIMES_ISLE_INT32; -extern GrB_Semiring GxB_TIMES_ISLE_INT64; -extern GrB_Semiring GxB_TIMES_ISLE_UINT8; -extern GrB_Semiring GxB_TIMES_ISLE_UINT16; -extern GrB_Semiring GxB_TIMES_ISLE_UINT32; -extern GrB_Semiring GxB_TIMES_ISLE_UINT64; -extern GrB_Semiring GxB_TIMES_ISLT_FP32; -extern GrB_Semiring GxB_TIMES_ISLT_FP64; -extern GrB_Semiring GxB_TIMES_ISLT_INT8; -extern GrB_Semiring GxB_TIMES_ISLT_INT16; -extern GrB_Semiring GxB_TIMES_ISLT_INT32; -extern GrB_Semiring GxB_TIMES_ISLT_INT64; -extern GrB_Semiring GxB_TIMES_ISLT_UINT8; -extern GrB_Semiring GxB_TIMES_ISLT_UINT16; -extern GrB_Semiring GxB_TIMES_ISLT_UINT32; -extern GrB_Semiring GxB_TIMES_ISLT_UINT64; -extern GrB_Semiring GxB_TIMES_ISNE_FP32; -extern GrB_Semiring GxB_TIMES_ISNE_FP64; -extern GrB_Semiring GxB_TIMES_ISNE_INT8; -extern GrB_Semiring GxB_TIMES_ISNE_INT16; -extern GrB_Semiring GxB_TIMES_ISNE_INT32; -extern GrB_Semiring GxB_TIMES_ISNE_INT64; -extern GrB_Semiring GxB_TIMES_ISNE_UINT8; -extern GrB_Semiring GxB_TIMES_ISNE_UINT16; -extern GrB_Semiring GxB_TIMES_ISNE_UINT32; -extern GrB_Semiring GxB_TIMES_ISNE_UINT64; -extern GrB_Semiring GxB_TIMES_LAND_FP32; -extern GrB_Semiring GxB_TIMES_LAND_FP64; -extern GrB_Semiring GxB_TIMES_LAND_INT8; -extern GrB_Semiring GxB_TIMES_LAND_INT16; -extern GrB_Semiring GxB_TIMES_LAND_INT32; -extern GrB_Semiring GxB_TIMES_LAND_INT64; -extern GrB_Semiring GxB_TIMES_LAND_UINT8; -extern GrB_Semiring GxB_TIMES_LAND_UINT16; -extern GrB_Semiring GxB_TIMES_LAND_UINT32; -extern GrB_Semiring GxB_TIMES_LAND_UINT64; -extern GrB_Semiring GxB_TIMES_LOR_FP32; -extern GrB_Semiring GxB_TIMES_LOR_FP64; -extern GrB_Semiring GxB_TIMES_LOR_INT8; -extern GrB_Semiring GxB_TIMES_LOR_INT16; -extern GrB_Semiring GxB_TIMES_LOR_INT32; -extern GrB_Semiring GxB_TIMES_LOR_INT64; -extern GrB_Semiring GxB_TIMES_LOR_UINT8; -extern GrB_Semiring GxB_TIMES_LOR_UINT16; -extern GrB_Semiring GxB_TIMES_LOR_UINT32; -extern GrB_Semiring GxB_TIMES_LOR_UINT64; -extern GrB_Semiring GxB_TIMES_LXOR_FP32; -extern GrB_Semiring GxB_TIMES_LXOR_FP64; -extern GrB_Semiring GxB_TIMES_LXOR_INT8; -extern GrB_Semiring GxB_TIMES_LXOR_INT16; -extern GrB_Semiring GxB_TIMES_LXOR_INT32; -extern GrB_Semiring GxB_TIMES_LXOR_INT64; -extern GrB_Semiring GxB_TIMES_LXOR_UINT8; -extern GrB_Semiring GxB_TIMES_LXOR_UINT16; -extern GrB_Semiring GxB_TIMES_LXOR_UINT32; -extern GrB_Semiring GxB_TIMES_LXOR_UINT64; -extern GrB_Semiring GxB_TIMES_MAX_FP32; -extern GrB_Semiring GxB_TIMES_MAX_FP64; -extern GrB_Semiring GxB_TIMES_MAX_INT8; -extern GrB_Semiring GxB_TIMES_MAX_INT16; -extern GrB_Semiring GxB_TIMES_MAX_INT32; -extern GrB_Semiring GxB_TIMES_MAX_INT64; -extern GrB_Semiring GxB_TIMES_MAX_UINT8; -extern GrB_Semiring GxB_TIMES_MAX_UINT16; -extern GrB_Semiring GxB_TIMES_MAX_UINT32; -extern GrB_Semiring GxB_TIMES_MAX_UINT64; -extern GrB_Semiring GxB_TIMES_MINUS_FC32; -extern GrB_Semiring GxB_TIMES_MINUS_FC64; -extern GrB_Semiring GxB_TIMES_MINUS_FP32; -extern GrB_Semiring GxB_TIMES_MINUS_FP64; -extern GrB_Semiring GxB_TIMES_MINUS_INT8; -extern GrB_Semiring GxB_TIMES_MINUS_INT16; -extern GrB_Semiring GxB_TIMES_MINUS_INT32; -extern GrB_Semiring GxB_TIMES_MINUS_INT64; -extern GrB_Semiring GxB_TIMES_MINUS_UINT8; -extern GrB_Semiring GxB_TIMES_MINUS_UINT16; -extern GrB_Semiring GxB_TIMES_MINUS_UINT32; -extern GrB_Semiring GxB_TIMES_MINUS_UINT64; -extern GrB_Semiring GxB_TIMES_MIN_FP32; -extern GrB_Semiring GxB_TIMES_MIN_FP64; -extern GrB_Semiring GxB_TIMES_MIN_INT8; -extern GrB_Semiring GxB_TIMES_MIN_INT16; -extern GrB_Semiring GxB_TIMES_MIN_INT32; -extern GrB_Semiring GxB_TIMES_MIN_INT64; -extern GrB_Semiring GxB_TIMES_MIN_UINT8; -extern GrB_Semiring GxB_TIMES_MIN_UINT16; -extern GrB_Semiring GxB_TIMES_MIN_UINT32; -extern GrB_Semiring GxB_TIMES_MIN_UINT64; -extern GrB_Semiring GxB_TIMES_PAIR_FC32; -extern GrB_Semiring GxB_TIMES_PAIR_FC64; -extern GrB_Semiring GxB_TIMES_PAIR_FP32; -extern GrB_Semiring GxB_TIMES_PAIR_FP64; -extern GrB_Semiring GxB_TIMES_PAIR_INT8; -extern GrB_Semiring GxB_TIMES_PAIR_INT16; -extern GrB_Semiring GxB_TIMES_PAIR_INT32; -extern GrB_Semiring GxB_TIMES_PAIR_INT64; -extern GrB_Semiring GxB_TIMES_PAIR_UINT8; -extern GrB_Semiring GxB_TIMES_PAIR_UINT16; -extern GrB_Semiring GxB_TIMES_PAIR_UINT32; -extern GrB_Semiring GxB_TIMES_PAIR_UINT64; -extern GrB_Semiring GxB_TIMES_PLUS_FC32; -extern GrB_Semiring GxB_TIMES_PLUS_FC64; -extern GrB_Semiring GxB_TIMES_PLUS_FP32; -extern GrB_Semiring GxB_TIMES_PLUS_FP64; -extern GrB_Semiring GxB_TIMES_PLUS_INT8; -extern GrB_Semiring GxB_TIMES_PLUS_INT16; -extern GrB_Semiring GxB_TIMES_PLUS_INT32; -extern GrB_Semiring GxB_TIMES_PLUS_INT64; -extern GrB_Semiring GxB_TIMES_PLUS_UINT8; -extern GrB_Semiring GxB_TIMES_PLUS_UINT16; -extern GrB_Semiring GxB_TIMES_PLUS_UINT32; -extern GrB_Semiring GxB_TIMES_PLUS_UINT64; -extern GrB_Semiring GxB_TIMES_RDIV_FC32; -extern GrB_Semiring GxB_TIMES_RDIV_FC64; -extern GrB_Semiring GxB_TIMES_RDIV_FP32; -extern GrB_Semiring GxB_TIMES_RDIV_FP64; -extern GrB_Semiring GxB_TIMES_RDIV_INT8; -extern GrB_Semiring GxB_TIMES_RDIV_INT16; -extern GrB_Semiring GxB_TIMES_RDIV_INT32; -extern GrB_Semiring GxB_TIMES_RDIV_INT64; -extern GrB_Semiring GxB_TIMES_RDIV_UINT8; -extern GrB_Semiring GxB_TIMES_RDIV_UINT16; -extern GrB_Semiring GxB_TIMES_RDIV_UINT32; -extern GrB_Semiring GxB_TIMES_RDIV_UINT64; -extern GrB_Semiring GxB_TIMES_RMINUS_FC32; -extern GrB_Semiring GxB_TIMES_RMINUS_FC64; -extern GrB_Semiring GxB_TIMES_RMINUS_FP32; -extern GrB_Semiring GxB_TIMES_RMINUS_FP64; -extern GrB_Semiring GxB_TIMES_RMINUS_INT8; -extern GrB_Semiring GxB_TIMES_RMINUS_INT16; -extern GrB_Semiring GxB_TIMES_RMINUS_INT32; -extern GrB_Semiring GxB_TIMES_RMINUS_INT64; -extern GrB_Semiring GxB_TIMES_RMINUS_UINT8; -extern GrB_Semiring GxB_TIMES_RMINUS_UINT16; -extern GrB_Semiring GxB_TIMES_RMINUS_UINT32; -extern GrB_Semiring GxB_TIMES_RMINUS_UINT64; -extern GrB_Semiring GxB_TIMES_SECONDI1_INT32; -extern GrB_Semiring GxB_TIMES_SECONDI1_INT64; -extern GrB_Semiring GxB_TIMES_SECONDI_INT32; -extern GrB_Semiring GxB_TIMES_SECONDI_INT64; -extern GrB_Semiring GxB_TIMES_SECONDJ1_INT32; -extern GrB_Semiring GxB_TIMES_SECONDJ1_INT64; -extern GrB_Semiring GxB_TIMES_SECONDJ_INT32; -extern GrB_Semiring GxB_TIMES_SECONDJ_INT64; -extern GrB_Semiring GxB_TIMES_SECOND_FC32; -extern GrB_Semiring GxB_TIMES_SECOND_FC64; -extern GrB_Semiring GxB_TIMES_SECOND_FP32; -extern GrB_Semiring GxB_TIMES_SECOND_FP64; -extern GrB_Semiring GxB_TIMES_SECOND_INT8; -extern GrB_Semiring GxB_TIMES_SECOND_INT16; -extern GrB_Semiring GxB_TIMES_SECOND_INT32; -extern GrB_Semiring GxB_TIMES_SECOND_INT64; -extern GrB_Semiring GxB_TIMES_SECOND_UINT8; -extern GrB_Semiring GxB_TIMES_SECOND_UINT16; -extern GrB_Semiring GxB_TIMES_SECOND_UINT32; -extern GrB_Semiring GxB_TIMES_SECOND_UINT64; -extern GrB_Semiring GxB_TIMES_TIMES_FC32; -extern GrB_Semiring GxB_TIMES_TIMES_FC64; -extern GrB_Semiring GxB_TIMES_TIMES_FP32; -extern GrB_Semiring GxB_TIMES_TIMES_FP64; -extern GrB_Semiring GxB_TIMES_TIMES_INT8; -extern GrB_Semiring GxB_TIMES_TIMES_INT16; -extern GrB_Semiring GxB_TIMES_TIMES_INT32; -extern GrB_Semiring GxB_TIMES_TIMES_INT64; -extern GrB_Semiring GxB_TIMES_TIMES_UINT8; -extern GrB_Semiring GxB_TIMES_TIMES_UINT16; -extern GrB_Semiring GxB_TIMES_TIMES_UINT32; -extern GrB_Semiring GxB_TIMES_TIMES_UINT64; -extern GrB_Type GxB_FC32; -extern GrB_Type GxB_FC64; -extern GrB_UnaryOp GxB_ABS_FC32; -extern GrB_UnaryOp GxB_ABS_FC64; -extern GrB_UnaryOp GxB_ACOSH_FC32; -extern GrB_UnaryOp GxB_ACOSH_FC64; -extern GrB_UnaryOp GxB_ACOSH_FP32; -extern GrB_UnaryOp GxB_ACOSH_FP64; -extern GrB_UnaryOp GxB_ACOS_FC32; -extern GrB_UnaryOp GxB_ACOS_FC64; -extern GrB_UnaryOp GxB_ACOS_FP32; -extern GrB_UnaryOp GxB_ACOS_FP64; -extern GrB_UnaryOp GxB_AINV_FC32; -extern GrB_UnaryOp GxB_AINV_FC64; -extern GrB_UnaryOp GxB_ASINH_FC32; -extern GrB_UnaryOp GxB_ASINH_FC64; -extern GrB_UnaryOp GxB_ASINH_FP32; -extern GrB_UnaryOp GxB_ASINH_FP64; -extern GrB_UnaryOp GxB_ASIN_FC32; -extern GrB_UnaryOp GxB_ASIN_FC64; -extern GrB_UnaryOp GxB_ASIN_FP32; -extern GrB_UnaryOp GxB_ASIN_FP64; -extern GrB_UnaryOp GxB_ATANH_FC32; -extern GrB_UnaryOp GxB_ATANH_FC64; -extern GrB_UnaryOp GxB_ATANH_FP32; -extern GrB_UnaryOp GxB_ATANH_FP64; -extern GrB_UnaryOp GxB_ATAN_FC32; -extern GrB_UnaryOp GxB_ATAN_FC64; -extern GrB_UnaryOp GxB_ATAN_FP32; -extern GrB_UnaryOp GxB_ATAN_FP64; -extern GrB_UnaryOp GxB_CARG_FC32; -extern GrB_UnaryOp GxB_CARG_FC64; -extern GrB_UnaryOp GxB_CBRT_FP32; -extern GrB_UnaryOp GxB_CBRT_FP64; -extern GrB_UnaryOp GxB_CEIL_FC32; -extern GrB_UnaryOp GxB_CEIL_FC64; -extern GrB_UnaryOp GxB_CEIL_FP32; -extern GrB_UnaryOp GxB_CEIL_FP64; -extern GrB_UnaryOp GxB_CIMAG_FC32; -extern GrB_UnaryOp GxB_CIMAG_FC64; -extern GrB_UnaryOp GxB_CONJ_FC32; -extern GrB_UnaryOp GxB_CONJ_FC64; -extern GrB_UnaryOp GxB_COSH_FC32; -extern GrB_UnaryOp GxB_COSH_FC64; -extern GrB_UnaryOp GxB_COSH_FP32; -extern GrB_UnaryOp GxB_COSH_FP64; -extern GrB_UnaryOp GxB_COS_FC32; -extern GrB_UnaryOp GxB_COS_FC64; -extern GrB_UnaryOp GxB_COS_FP32; -extern GrB_UnaryOp GxB_COS_FP64; -extern GrB_UnaryOp GxB_CREAL_FC32; -extern GrB_UnaryOp GxB_CREAL_FC64; -extern GrB_UnaryOp GxB_ERFC_FP32; -extern GrB_UnaryOp GxB_ERFC_FP64; -extern GrB_UnaryOp GxB_ERF_FP32; -extern GrB_UnaryOp GxB_ERF_FP64; -extern GrB_UnaryOp GxB_EXP2_FC32; -extern GrB_UnaryOp GxB_EXP2_FC64; -extern GrB_UnaryOp GxB_EXP2_FP32; -extern GrB_UnaryOp GxB_EXP2_FP64; -extern GrB_UnaryOp GxB_EXPM1_FC32; -extern GrB_UnaryOp GxB_EXPM1_FC64; -extern GrB_UnaryOp GxB_EXPM1_FP32; -extern GrB_UnaryOp GxB_EXPM1_FP64; -extern GrB_UnaryOp GxB_EXP_FC32; -extern GrB_UnaryOp GxB_EXP_FC64; -extern GrB_UnaryOp GxB_EXP_FP32; -extern GrB_UnaryOp GxB_EXP_FP64; -extern GrB_UnaryOp GxB_FLOOR_FC32; -extern GrB_UnaryOp GxB_FLOOR_FC64; -extern GrB_UnaryOp GxB_FLOOR_FP32; -extern GrB_UnaryOp GxB_FLOOR_FP64; -extern GrB_UnaryOp GxB_FREXPE_FP32; -extern GrB_UnaryOp GxB_FREXPE_FP64; -extern GrB_UnaryOp GxB_FREXPX_FP32; -extern GrB_UnaryOp GxB_FREXPX_FP64; -extern GrB_UnaryOp GxB_IDENTITY_FC32; -extern GrB_UnaryOp GxB_IDENTITY_FC64; -extern GrB_UnaryOp GxB_ISFINITE_FC32; -extern GrB_UnaryOp GxB_ISFINITE_FC64; -extern GrB_UnaryOp GxB_ISFINITE_FP32; -extern GrB_UnaryOp GxB_ISFINITE_FP64; -extern GrB_UnaryOp GxB_ISINF_FC32; -extern GrB_UnaryOp GxB_ISINF_FC64; -extern GrB_UnaryOp GxB_ISINF_FP32; -extern GrB_UnaryOp GxB_ISINF_FP64; -extern GrB_UnaryOp GxB_ISNAN_FC32; -extern GrB_UnaryOp GxB_ISNAN_FC64; -extern GrB_UnaryOp GxB_ISNAN_FP32; -extern GrB_UnaryOp GxB_ISNAN_FP64; -extern GrB_UnaryOp GxB_LGAMMA_FP32; -extern GrB_UnaryOp GxB_LGAMMA_FP64; -extern GrB_UnaryOp GxB_LNOT_BOOL; -extern GrB_UnaryOp GxB_LNOT_FP32; -extern GrB_UnaryOp GxB_LNOT_FP64; -extern GrB_UnaryOp GxB_LNOT_INT8; -extern GrB_UnaryOp GxB_LNOT_INT16; -extern GrB_UnaryOp GxB_LNOT_INT32; -extern GrB_UnaryOp GxB_LNOT_INT64; -extern GrB_UnaryOp GxB_LNOT_UINT8; -extern GrB_UnaryOp GxB_LNOT_UINT16; -extern GrB_UnaryOp GxB_LNOT_UINT32; -extern GrB_UnaryOp GxB_LNOT_UINT64; -extern GrB_UnaryOp GxB_LOG10_FC32; -extern GrB_UnaryOp GxB_LOG10_FC64; -extern GrB_UnaryOp GxB_LOG10_FP32; -extern GrB_UnaryOp GxB_LOG10_FP64; -extern GrB_UnaryOp GxB_LOG1P_FC32; -extern GrB_UnaryOp GxB_LOG1P_FC64; -extern GrB_UnaryOp GxB_LOG1P_FP32; -extern GrB_UnaryOp GxB_LOG1P_FP64; -extern GrB_UnaryOp GxB_LOG2_FC32; -extern GrB_UnaryOp GxB_LOG2_FC64; -extern GrB_UnaryOp GxB_LOG2_FP32; -extern GrB_UnaryOp GxB_LOG2_FP64; -extern GrB_UnaryOp GxB_LOG_FC32; -extern GrB_UnaryOp GxB_LOG_FC64; -extern GrB_UnaryOp GxB_LOG_FP32; -extern GrB_UnaryOp GxB_LOG_FP64; -extern GrB_UnaryOp GxB_MINV_FC32; -extern GrB_UnaryOp GxB_MINV_FC64; -extern GrB_UnaryOp GxB_ONE_BOOL; -extern GrB_UnaryOp GxB_ONE_FC32; -extern GrB_UnaryOp GxB_ONE_FC64; -extern GrB_UnaryOp GxB_ONE_FP32; -extern GrB_UnaryOp GxB_ONE_FP64; -extern GrB_UnaryOp GxB_ONE_INT8; -extern GrB_UnaryOp GxB_ONE_INT16; -extern GrB_UnaryOp GxB_ONE_INT32; -extern GrB_UnaryOp GxB_ONE_INT64; -extern GrB_UnaryOp GxB_ONE_UINT8; -extern GrB_UnaryOp GxB_ONE_UINT16; -extern GrB_UnaryOp GxB_ONE_UINT32; -extern GrB_UnaryOp GxB_ONE_UINT64; -extern GrB_UnaryOp GxB_POSITIONI1_INT32; -extern GrB_UnaryOp GxB_POSITIONI1_INT64; -extern GrB_UnaryOp GxB_POSITIONI_INT32; -extern GrB_UnaryOp GxB_POSITIONI_INT64; -extern GrB_UnaryOp GxB_POSITIONJ1_INT32; -extern GrB_UnaryOp GxB_POSITIONJ1_INT64; -extern GrB_UnaryOp GxB_POSITIONJ_INT32; -extern GrB_UnaryOp GxB_POSITIONJ_INT64; -extern GrB_UnaryOp GxB_ROUND_FC32; -extern GrB_UnaryOp GxB_ROUND_FC64; -extern GrB_UnaryOp GxB_ROUND_FP32; -extern GrB_UnaryOp GxB_ROUND_FP64; -extern GrB_UnaryOp GxB_SIGNUM_FC32; -extern GrB_UnaryOp GxB_SIGNUM_FC64; -extern GrB_UnaryOp GxB_SIGNUM_FP32; -extern GrB_UnaryOp GxB_SIGNUM_FP64; -extern GrB_UnaryOp GxB_SINH_FC32; -extern GrB_UnaryOp GxB_SINH_FC64; -extern GrB_UnaryOp GxB_SINH_FP32; -extern GrB_UnaryOp GxB_SINH_FP64; -extern GrB_UnaryOp GxB_SIN_FC32; -extern GrB_UnaryOp GxB_SIN_FC64; -extern GrB_UnaryOp GxB_SIN_FP32; -extern GrB_UnaryOp GxB_SIN_FP64; -extern GrB_UnaryOp GxB_SQRT_FC32; -extern GrB_UnaryOp GxB_SQRT_FC64; -extern GrB_UnaryOp GxB_SQRT_FP32; -extern GrB_UnaryOp GxB_SQRT_FP64; -extern GrB_UnaryOp GxB_TANH_FC32; -extern GrB_UnaryOp GxB_TANH_FC64; -extern GrB_UnaryOp GxB_TANH_FP32; -extern GrB_UnaryOp GxB_TANH_FP64; -extern GrB_UnaryOp GxB_TAN_FC32; -extern GrB_UnaryOp GxB_TAN_FC64; -extern GrB_UnaryOp GxB_TAN_FP32; -extern GrB_UnaryOp GxB_TAN_FP64; -extern GrB_UnaryOp GxB_TGAMMA_FP32; -extern GrB_UnaryOp GxB_TGAMMA_FP64; -extern GrB_UnaryOp GxB_TRUNC_FC32; -extern GrB_UnaryOp GxB_TRUNC_FC64; -extern GrB_UnaryOp GxB_TRUNC_FP32; -extern GrB_UnaryOp GxB_TRUNC_FP64; - -/* GxB objects */ -extern GxB_SelectOp GxB_DIAG; -extern GxB_SelectOp GxB_EQ_THUNK; -extern GxB_SelectOp GxB_EQ_ZERO; -extern GxB_SelectOp GxB_GE_THUNK; -extern GxB_SelectOp GxB_GE_ZERO; -extern GxB_SelectOp GxB_GT_THUNK; -extern GxB_SelectOp GxB_GT_ZERO; -extern GxB_SelectOp GxB_LE_THUNK; -extern GxB_SelectOp GxB_LE_ZERO; -extern GxB_SelectOp GxB_LT_THUNK; -extern GxB_SelectOp GxB_LT_ZERO; -extern GxB_SelectOp GxB_NE_THUNK; -extern GxB_SelectOp GxB_NONZERO; -extern GxB_SelectOp GxB_OFFDIAG; -extern GxB_SelectOp GxB_TRIL; -extern GxB_SelectOp GxB_TRIU; - -/**************** -* GrB functions * -****************/ - -/* binary */ -GrB_Info GrB_BinaryOp_error(const char **error, const GrB_BinaryOp op); -GrB_Info GrB_BinaryOp_free(GrB_BinaryOp *binaryop); -GrB_Info GrB_BinaryOp_new(GrB_BinaryOp *binaryop, GxB_binary_function function, GrB_Type ztype, GrB_Type xtype, GrB_Type ytype); -GrB_Info GrB_BinaryOp_wait(GrB_BinaryOp op, GrB_WaitMode waitmode); - -/* core */ -GrB_Info GrB_finalize(void); -GrB_Info GrB_getVersion(unsigned int *version, unsigned int *subversion); -GrB_Info GrB_init(GrB_Mode mode); - -/* descriptor */ -GrB_Info GrB_Descriptor_error(const char **error, const GrB_Descriptor d); -GrB_Info GrB_Descriptor_free(GrB_Descriptor *descriptor); -GrB_Info GrB_Descriptor_new(GrB_Descriptor *descriptor); -GrB_Info GrB_Descriptor_set(GrB_Descriptor desc, GrB_Desc_Field field, GrB_Desc_Value val); -GrB_Info GrB_Descriptor_wait(GrB_Descriptor desc, GrB_WaitMode waitmode); - -/* indexunary */ -GrB_Info GrB_IndexUnaryOp_error(const char **error, const GrB_IndexUnaryOp op); -GrB_Info GrB_IndexUnaryOp_free(GrB_IndexUnaryOp *op); -GrB_Info GrB_IndexUnaryOp_new(GrB_IndexUnaryOp *op, GxB_index_unary_function function, GrB_Type ztype, GrB_Type xtype, GrB_Type ytype); -GrB_Info GrB_IndexUnaryOp_wait(GrB_IndexUnaryOp op, GrB_WaitMode waitmode); - -/* matrix */ -GrB_Info GrB_Col_assign(GrB_Matrix C, const GrB_Vector mask, const GrB_BinaryOp accum, const GrB_Vector u, const GrB_Index *I, GrB_Index ni, GrB_Index j, const GrB_Descriptor desc); -GrB_Info GrB_Col_extract(GrB_Vector w, const GrB_Vector mask, const GrB_BinaryOp accum, const GrB_Matrix A, const GrB_Index *I, GrB_Index ni, GrB_Index j, const GrB_Descriptor desc); -GrB_Info GrB_Matrix_apply(GrB_Matrix C, const GrB_Matrix Mask, const GrB_BinaryOp accum, const GrB_UnaryOp op, const GrB_Matrix A, const GrB_Descriptor desc); -GrB_Info GrB_Matrix_apply_BinaryOp1st_BOOL(GrB_Matrix C, const GrB_Matrix Mask, const GrB_BinaryOp accum, const GrB_BinaryOp op, bool x, const GrB_Matrix A, const GrB_Descriptor desc); -GrB_Info GrB_Matrix_apply_BinaryOp1st_FP32(GrB_Matrix C, const GrB_Matrix Mask, const GrB_BinaryOp accum, const GrB_BinaryOp op, float x, const GrB_Matrix A, const GrB_Descriptor desc); -GrB_Info GrB_Matrix_apply_BinaryOp1st_FP64(GrB_Matrix C, const GrB_Matrix Mask, const GrB_BinaryOp accum, const GrB_BinaryOp op, double x, const GrB_Matrix A, const GrB_Descriptor desc); -GrB_Info GrB_Matrix_apply_BinaryOp1st_INT8(GrB_Matrix C, const GrB_Matrix Mask, const GrB_BinaryOp accum, const GrB_BinaryOp op, int8_t x, const GrB_Matrix A, const GrB_Descriptor desc); -GrB_Info GrB_Matrix_apply_BinaryOp1st_INT16(GrB_Matrix C, const GrB_Matrix Mask, const GrB_BinaryOp accum, const GrB_BinaryOp op, int16_t x, const GrB_Matrix A, const GrB_Descriptor desc); -GrB_Info GrB_Matrix_apply_BinaryOp1st_INT32(GrB_Matrix C, const GrB_Matrix Mask, const GrB_BinaryOp accum, const GrB_BinaryOp op, int32_t x, const GrB_Matrix A, const GrB_Descriptor desc); -GrB_Info GrB_Matrix_apply_BinaryOp1st_INT64(GrB_Matrix C, const GrB_Matrix Mask, const GrB_BinaryOp accum, const GrB_BinaryOp op, int64_t x, const GrB_Matrix A, const GrB_Descriptor desc); -GrB_Info GrB_Matrix_apply_BinaryOp1st_Scalar(GrB_Matrix C, const GrB_Matrix Mask, const GrB_BinaryOp accum, const GrB_BinaryOp op, const GrB_Scalar x, const GrB_Matrix A, const GrB_Descriptor desc); -GrB_Info GrB_Matrix_apply_BinaryOp1st_UDT(GrB_Matrix C, const GrB_Matrix Mask, const GrB_BinaryOp accum, const GrB_BinaryOp op, const void *x, const GrB_Matrix A, const GrB_Descriptor desc); -GrB_Info GrB_Matrix_apply_BinaryOp1st_UINT8(GrB_Matrix C, const GrB_Matrix Mask, const GrB_BinaryOp accum, const GrB_BinaryOp op, uint8_t x, const GrB_Matrix A, const GrB_Descriptor desc); -GrB_Info GrB_Matrix_apply_BinaryOp1st_UINT16(GrB_Matrix C, const GrB_Matrix Mask, const GrB_BinaryOp accum, const GrB_BinaryOp op, uint16_t x, const GrB_Matrix A, const GrB_Descriptor desc); -GrB_Info GrB_Matrix_apply_BinaryOp1st_UINT32(GrB_Matrix C, const GrB_Matrix Mask, const GrB_BinaryOp accum, const GrB_BinaryOp op, uint32_t x, const GrB_Matrix A, const GrB_Descriptor desc); -GrB_Info GrB_Matrix_apply_BinaryOp1st_UINT64(GrB_Matrix C, const GrB_Matrix Mask, const GrB_BinaryOp accum, const GrB_BinaryOp op, uint64_t x, const GrB_Matrix A, const GrB_Descriptor desc); -GrB_Info GrB_Matrix_apply_BinaryOp2nd_BOOL(GrB_Matrix C, const GrB_Matrix Mask, const GrB_BinaryOp accum, const GrB_BinaryOp op, const GrB_Matrix A, bool y, const GrB_Descriptor desc); -GrB_Info GrB_Matrix_apply_BinaryOp2nd_FP32(GrB_Matrix C, const GrB_Matrix Mask, const GrB_BinaryOp accum, const GrB_BinaryOp op, const GrB_Matrix A, float y, const GrB_Descriptor desc); -GrB_Info GrB_Matrix_apply_BinaryOp2nd_FP64(GrB_Matrix C, const GrB_Matrix Mask, const GrB_BinaryOp accum, const GrB_BinaryOp op, const GrB_Matrix A, double y, const GrB_Descriptor desc); -GrB_Info GrB_Matrix_apply_BinaryOp2nd_INT8(GrB_Matrix C, const GrB_Matrix Mask, const GrB_BinaryOp accum, const GrB_BinaryOp op, const GrB_Matrix A, int8_t y, const GrB_Descriptor desc); -GrB_Info GrB_Matrix_apply_BinaryOp2nd_INT16(GrB_Matrix C, const GrB_Matrix Mask, const GrB_BinaryOp accum, const GrB_BinaryOp op, const GrB_Matrix A, int16_t y, const GrB_Descriptor desc); -GrB_Info GrB_Matrix_apply_BinaryOp2nd_INT32(GrB_Matrix C, const GrB_Matrix Mask, const GrB_BinaryOp accum, const GrB_BinaryOp op, const GrB_Matrix A, int32_t y, const GrB_Descriptor desc); -GrB_Info GrB_Matrix_apply_BinaryOp2nd_INT64(GrB_Matrix C, const GrB_Matrix Mask, const GrB_BinaryOp accum, const GrB_BinaryOp op, const GrB_Matrix A, int64_t y, const GrB_Descriptor desc); -GrB_Info GrB_Matrix_apply_BinaryOp2nd_Scalar(GrB_Matrix C, const GrB_Matrix Mask, const GrB_BinaryOp accum, const GrB_BinaryOp op, const GrB_Matrix A, const GrB_Scalar y, const GrB_Descriptor desc); -GrB_Info GrB_Matrix_apply_BinaryOp2nd_UDT(GrB_Matrix C, const GrB_Matrix Mask, const GrB_BinaryOp accum, const GrB_BinaryOp op, const GrB_Matrix A, const void *y, const GrB_Descriptor desc); -GrB_Info GrB_Matrix_apply_BinaryOp2nd_UINT8(GrB_Matrix C, const GrB_Matrix Mask, const GrB_BinaryOp accum, const GrB_BinaryOp op, const GrB_Matrix A, uint8_t y, const GrB_Descriptor desc); -GrB_Info GrB_Matrix_apply_BinaryOp2nd_UINT16(GrB_Matrix C, const GrB_Matrix Mask, const GrB_BinaryOp accum, const GrB_BinaryOp op, const GrB_Matrix A, uint16_t y, const GrB_Descriptor desc); -GrB_Info GrB_Matrix_apply_BinaryOp2nd_UINT32(GrB_Matrix C, const GrB_Matrix Mask, const GrB_BinaryOp accum, const GrB_BinaryOp op, const GrB_Matrix A, uint32_t y, const GrB_Descriptor desc); -GrB_Info GrB_Matrix_apply_BinaryOp2nd_UINT64(GrB_Matrix C, const GrB_Matrix Mask, const GrB_BinaryOp accum, const GrB_BinaryOp op, const GrB_Matrix A, uint64_t y, const GrB_Descriptor desc); -GrB_Info GrB_Matrix_apply_IndexOp_BOOL(GrB_Matrix C, const GrB_Matrix Mask, const GrB_BinaryOp accum, const GrB_IndexUnaryOp op, const GrB_Matrix A, bool y, const GrB_Descriptor desc); -GrB_Info GrB_Matrix_apply_IndexOp_FP32(GrB_Matrix C, const GrB_Matrix Mask, const GrB_BinaryOp accum, const GrB_IndexUnaryOp op, const GrB_Matrix A, float y, const GrB_Descriptor desc); -GrB_Info GrB_Matrix_apply_IndexOp_FP64(GrB_Matrix C, const GrB_Matrix Mask, const GrB_BinaryOp accum, const GrB_IndexUnaryOp op, const GrB_Matrix A, double y, const GrB_Descriptor desc); -GrB_Info GrB_Matrix_apply_IndexOp_INT8(GrB_Matrix C, const GrB_Matrix Mask, const GrB_BinaryOp accum, const GrB_IndexUnaryOp op, const GrB_Matrix A, int8_t y, const GrB_Descriptor desc); -GrB_Info GrB_Matrix_apply_IndexOp_INT16(GrB_Matrix C, const GrB_Matrix Mask, const GrB_BinaryOp accum, const GrB_IndexUnaryOp op, const GrB_Matrix A, int16_t y, const GrB_Descriptor desc); -GrB_Info GrB_Matrix_apply_IndexOp_INT32(GrB_Matrix C, const GrB_Matrix Mask, const GrB_BinaryOp accum, const GrB_IndexUnaryOp op, const GrB_Matrix A, int32_t y, const GrB_Descriptor desc); -GrB_Info GrB_Matrix_apply_IndexOp_INT64(GrB_Matrix C, const GrB_Matrix Mask, const GrB_BinaryOp accum, const GrB_IndexUnaryOp op, const GrB_Matrix A, int64_t y, const GrB_Descriptor desc); -GrB_Info GrB_Matrix_apply_IndexOp_Scalar(GrB_Matrix C, const GrB_Matrix Mask, const GrB_BinaryOp accum, const GrB_IndexUnaryOp op, const GrB_Matrix A, const GrB_Scalar y, const GrB_Descriptor desc); -GrB_Info GrB_Matrix_apply_IndexOp_UDT(GrB_Matrix C, const GrB_Matrix Mask, const GrB_BinaryOp accum, const GrB_IndexUnaryOp op, const GrB_Matrix A, const void *y, const GrB_Descriptor desc); -GrB_Info GrB_Matrix_apply_IndexOp_UINT8(GrB_Matrix C, const GrB_Matrix Mask, const GrB_BinaryOp accum, const GrB_IndexUnaryOp op, const GrB_Matrix A, uint8_t y, const GrB_Descriptor desc); -GrB_Info GrB_Matrix_apply_IndexOp_UINT16(GrB_Matrix C, const GrB_Matrix Mask, const GrB_BinaryOp accum, const GrB_IndexUnaryOp op, const GrB_Matrix A, uint16_t y, const GrB_Descriptor desc); -GrB_Info GrB_Matrix_apply_IndexOp_UINT32(GrB_Matrix C, const GrB_Matrix Mask, const GrB_BinaryOp accum, const GrB_IndexUnaryOp op, const GrB_Matrix A, uint32_t y, const GrB_Descriptor desc); -GrB_Info GrB_Matrix_apply_IndexOp_UINT64(GrB_Matrix C, const GrB_Matrix Mask, const GrB_BinaryOp accum, const GrB_IndexUnaryOp op, const GrB_Matrix A, uint64_t y, const GrB_Descriptor desc); -GrB_Info GrB_Matrix_assign(GrB_Matrix C, const GrB_Matrix Mask, const GrB_BinaryOp accum, const GrB_Matrix A, const GrB_Index *I, GrB_Index ni, const GrB_Index *J, GrB_Index nj, const GrB_Descriptor desc); -GrB_Info GrB_Matrix_assign_BOOL(GrB_Matrix C, const GrB_Matrix Mask, const GrB_BinaryOp accum, bool x, const GrB_Index *I, GrB_Index ni, const GrB_Index *J, GrB_Index nj, const GrB_Descriptor desc); -GrB_Info GrB_Matrix_assign_FP32(GrB_Matrix C, const GrB_Matrix Mask, const GrB_BinaryOp accum, float x, const GrB_Index *I, GrB_Index ni, const GrB_Index *J, GrB_Index nj, const GrB_Descriptor desc); -GrB_Info GrB_Matrix_assign_FP64(GrB_Matrix C, const GrB_Matrix Mask, const GrB_BinaryOp accum, double x, const GrB_Index *I, GrB_Index ni, const GrB_Index *J, GrB_Index nj, const GrB_Descriptor desc); -GrB_Info GrB_Matrix_assign_INT8(GrB_Matrix C, const GrB_Matrix Mask, const GrB_BinaryOp accum, int8_t x, const GrB_Index *I, GrB_Index ni, const GrB_Index *J, GrB_Index nj, const GrB_Descriptor desc); -GrB_Info GrB_Matrix_assign_INT16(GrB_Matrix C, const GrB_Matrix Mask, const GrB_BinaryOp accum, int16_t x, const GrB_Index *I, GrB_Index ni, const GrB_Index *J, GrB_Index nj, const GrB_Descriptor desc); -GrB_Info GrB_Matrix_assign_INT32(GrB_Matrix C, const GrB_Matrix Mask, const GrB_BinaryOp accum, int32_t x, const GrB_Index *I, GrB_Index ni, const GrB_Index *J, GrB_Index nj, const GrB_Descriptor desc); -GrB_Info GrB_Matrix_assign_INT64(GrB_Matrix C, const GrB_Matrix Mask, const GrB_BinaryOp accum, int64_t x, const GrB_Index *I, GrB_Index ni, const GrB_Index *J, GrB_Index nj, const GrB_Descriptor desc); -GrB_Info GrB_Matrix_assign_Scalar(GrB_Matrix C, const GrB_Matrix Mask, const GrB_BinaryOp accum, GrB_Scalar x, const GrB_Index *I, GrB_Index ni, const GrB_Index *J, GrB_Index nj, const GrB_Descriptor desc); -GrB_Info GrB_Matrix_assign_UDT(GrB_Matrix C, const GrB_Matrix Mask, const GrB_BinaryOp accum, void *x, const GrB_Index *I, GrB_Index ni, const GrB_Index *J, GrB_Index nj, const GrB_Descriptor desc); -GrB_Info GrB_Matrix_assign_UINT8(GrB_Matrix C, const GrB_Matrix Mask, const GrB_BinaryOp accum, uint8_t x, const GrB_Index *I, GrB_Index ni, const GrB_Index *J, GrB_Index nj, const GrB_Descriptor desc); -GrB_Info GrB_Matrix_assign_UINT16(GrB_Matrix C, const GrB_Matrix Mask, const GrB_BinaryOp accum, uint16_t x, const GrB_Index *I, GrB_Index ni, const GrB_Index *J, GrB_Index nj, const GrB_Descriptor desc); -GrB_Info GrB_Matrix_assign_UINT32(GrB_Matrix C, const GrB_Matrix Mask, const GrB_BinaryOp accum, uint32_t x, const GrB_Index *I, GrB_Index ni, const GrB_Index *J, GrB_Index nj, const GrB_Descriptor desc); -GrB_Info GrB_Matrix_assign_UINT64(GrB_Matrix C, const GrB_Matrix Mask, const GrB_BinaryOp accum, uint64_t x, const GrB_Index *I, GrB_Index ni, const GrB_Index *J, GrB_Index nj, const GrB_Descriptor desc); -GrB_Info GrB_Matrix_build_BOOL(GrB_Matrix C, const GrB_Index *I, const GrB_Index *J, const bool *X, GrB_Index nvals, const GrB_BinaryOp dup); -GrB_Info GrB_Matrix_build_FP32(GrB_Matrix C, const GrB_Index *I, const GrB_Index *J, const float *X, GrB_Index nvals, const GrB_BinaryOp dup); -GrB_Info GrB_Matrix_build_FP64(GrB_Matrix C, const GrB_Index *I, const GrB_Index *J, const double *X, GrB_Index nvals, const GrB_BinaryOp dup); -GrB_Info GrB_Matrix_build_INT8(GrB_Matrix C, const GrB_Index *I, const GrB_Index *J, const int8_t *X, GrB_Index nvals, const GrB_BinaryOp dup); -GrB_Info GrB_Matrix_build_INT16(GrB_Matrix C, const GrB_Index *I, const GrB_Index *J, const int16_t *X, GrB_Index nvals, const GrB_BinaryOp dup); -GrB_Info GrB_Matrix_build_INT32(GrB_Matrix C, const GrB_Index *I, const GrB_Index *J, const int32_t *X, GrB_Index nvals, const GrB_BinaryOp dup); -GrB_Info GrB_Matrix_build_INT64(GrB_Matrix C, const GrB_Index *I, const GrB_Index *J, const int64_t *X, GrB_Index nvals, const GrB_BinaryOp dup); -GrB_Info GrB_Matrix_build_UDT(GrB_Matrix C, const GrB_Index *I, const GrB_Index *J, const void *X, GrB_Index nvals, const GrB_BinaryOp dup); -GrB_Info GrB_Matrix_build_UINT8(GrB_Matrix C, const GrB_Index *I, const GrB_Index *J, const uint8_t *X, GrB_Index nvals, const GrB_BinaryOp dup); -GrB_Info GrB_Matrix_build_UINT16(GrB_Matrix C, const GrB_Index *I, const GrB_Index *J, const uint16_t *X, GrB_Index nvals, const GrB_BinaryOp dup); -GrB_Info GrB_Matrix_build_UINT32(GrB_Matrix C, const GrB_Index *I, const GrB_Index *J, const uint32_t *X, GrB_Index nvals, const GrB_BinaryOp dup); -GrB_Info GrB_Matrix_build_UINT64(GrB_Matrix C, const GrB_Index *I, const GrB_Index *J, const uint64_t *X, GrB_Index nvals, const GrB_BinaryOp dup); -GrB_Info GrB_Matrix_clear(GrB_Matrix A); -GrB_Info GrB_Matrix_deserialize(GrB_Matrix *C, GrB_Type type, const void *blob, GrB_Index blob_size); -GrB_Info GrB_Matrix_diag(GrB_Matrix *C, const GrB_Vector v, int64_t k); -GrB_Info GrB_Matrix_dup(GrB_Matrix *C, const GrB_Matrix A); -GrB_Info GrB_Matrix_eWiseAdd_BinaryOp(GrB_Matrix C, const GrB_Matrix Mask, const GrB_BinaryOp accum, const GrB_BinaryOp add, const GrB_Matrix A, const GrB_Matrix B, const GrB_Descriptor desc); -GrB_Info GrB_Matrix_eWiseAdd_Monoid(GrB_Matrix C, const GrB_Matrix Mask, const GrB_BinaryOp accum, const GrB_Monoid monoid, const GrB_Matrix A, const GrB_Matrix B, const GrB_Descriptor desc); -GrB_Info GrB_Matrix_eWiseAdd_Semiring(GrB_Matrix C, const GrB_Matrix Mask, const GrB_BinaryOp accum, const GrB_Semiring semiring, const GrB_Matrix A, const GrB_Matrix B, const GrB_Descriptor desc); -GrB_Info GrB_Matrix_eWiseMult_BinaryOp(GrB_Matrix C, const GrB_Matrix Mask, const GrB_BinaryOp accum, const GrB_BinaryOp mult, const GrB_Matrix A, const GrB_Matrix B, const GrB_Descriptor desc); -GrB_Info GrB_Matrix_eWiseMult_Monoid(GrB_Matrix C, const GrB_Matrix Mask, const GrB_BinaryOp accum, const GrB_Monoid monoid, const GrB_Matrix A, const GrB_Matrix B, const GrB_Descriptor desc); -GrB_Info GrB_Matrix_eWiseMult_Semiring(GrB_Matrix C, const GrB_Matrix Mask, const GrB_BinaryOp accum, const GrB_Semiring semiring, const GrB_Matrix A, const GrB_Matrix B, const GrB_Descriptor desc); -GrB_Info GrB_Matrix_error(const char **error, const GrB_Matrix A); -GrB_Info GrB_Matrix_exportHint(GrB_Format *format, GrB_Matrix A); -GrB_Info GrB_Matrix_exportSize(GrB_Index *Ap_len, GrB_Index *Ai_len, GrB_Index *Ax_len, GrB_Format format, GrB_Matrix A); -GrB_Info GrB_Matrix_export_BOOL(GrB_Index *Ap, GrB_Index *Ai, bool *Ax, GrB_Index *Ap_len, GrB_Index *Ai_len, GrB_Index *Ax_len, GrB_Format format, GrB_Matrix A); -GrB_Info GrB_Matrix_export_FP32(GrB_Index *Ap, GrB_Index *Ai, float *Ax, GrB_Index *Ap_len, GrB_Index *Ai_len, GrB_Index *Ax_len, GrB_Format format, GrB_Matrix A); -GrB_Info GrB_Matrix_export_FP64(GrB_Index *Ap, GrB_Index *Ai, double *Ax, GrB_Index *Ap_len, GrB_Index *Ai_len, GrB_Index *Ax_len, GrB_Format format, GrB_Matrix A); -GrB_Info GrB_Matrix_export_INT8(GrB_Index *Ap, GrB_Index *Ai, int8_t *Ax, GrB_Index *Ap_len, GrB_Index *Ai_len, GrB_Index *Ax_len, GrB_Format format, GrB_Matrix A); -GrB_Info GrB_Matrix_export_INT16(GrB_Index *Ap, GrB_Index *Ai, int16_t *Ax, GrB_Index *Ap_len, GrB_Index *Ai_len, GrB_Index *Ax_len, GrB_Format format, GrB_Matrix A); -GrB_Info GrB_Matrix_export_INT32(GrB_Index *Ap, GrB_Index *Ai, int32_t *Ax, GrB_Index *Ap_len, GrB_Index *Ai_len, GrB_Index *Ax_len, GrB_Format format, GrB_Matrix A); -GrB_Info GrB_Matrix_export_INT64(GrB_Index *Ap, GrB_Index *Ai, int64_t *Ax, GrB_Index *Ap_len, GrB_Index *Ai_len, GrB_Index *Ax_len, GrB_Format format, GrB_Matrix A); -GrB_Info GrB_Matrix_export_UDT(GrB_Index *Ap, GrB_Index *Ai, void *Ax, GrB_Index *Ap_len, GrB_Index *Ai_len, GrB_Index *Ax_len, GrB_Format format, GrB_Matrix A); -GrB_Info GrB_Matrix_export_UINT8(GrB_Index *Ap, GrB_Index *Ai, uint8_t *Ax, GrB_Index *Ap_len, GrB_Index *Ai_len, GrB_Index *Ax_len, GrB_Format format, GrB_Matrix A); -GrB_Info GrB_Matrix_export_UINT16(GrB_Index *Ap, GrB_Index *Ai, uint16_t *Ax, GrB_Index *Ap_len, GrB_Index *Ai_len, GrB_Index *Ax_len, GrB_Format format, GrB_Matrix A); -GrB_Info GrB_Matrix_export_UINT32(GrB_Index *Ap, GrB_Index *Ai, uint32_t *Ax, GrB_Index *Ap_len, GrB_Index *Ai_len, GrB_Index *Ax_len, GrB_Format format, GrB_Matrix A); -GrB_Info GrB_Matrix_export_UINT64(GrB_Index *Ap, GrB_Index *Ai, uint64_t *Ax, GrB_Index *Ap_len, GrB_Index *Ai_len, GrB_Index *Ax_len, GrB_Format format, GrB_Matrix A); -GrB_Info GrB_Matrix_extract(GrB_Matrix C, const GrB_Matrix Mask, const GrB_BinaryOp accum, const GrB_Matrix A, const GrB_Index *I, GrB_Index ni, const GrB_Index *J, GrB_Index nj, const GrB_Descriptor desc); -GrB_Info GrB_Matrix_extractElement_BOOL(bool *x, const GrB_Matrix A, GrB_Index i, GrB_Index j); -GrB_Info GrB_Matrix_extractElement_FP32(float *x, const GrB_Matrix A, GrB_Index i, GrB_Index j); -GrB_Info GrB_Matrix_extractElement_FP64(double *x, const GrB_Matrix A, GrB_Index i, GrB_Index j); -GrB_Info GrB_Matrix_extractElement_INT8(int8_t *x, const GrB_Matrix A, GrB_Index i, GrB_Index j); -GrB_Info GrB_Matrix_extractElement_INT16(int16_t *x, const GrB_Matrix A, GrB_Index i, GrB_Index j); -GrB_Info GrB_Matrix_extractElement_INT32(int32_t *x, const GrB_Matrix A, GrB_Index i, GrB_Index j); -GrB_Info GrB_Matrix_extractElement_INT64(int64_t *x, const GrB_Matrix A, GrB_Index i, GrB_Index j); -GrB_Info GrB_Matrix_extractElement_Scalar(GrB_Scalar x, const GrB_Matrix A, GrB_Index i, GrB_Index j); -GrB_Info GrB_Matrix_extractElement_UDT(void *x, const GrB_Matrix A, GrB_Index i, GrB_Index j); -GrB_Info GrB_Matrix_extractElement_UINT8(uint8_t *x, const GrB_Matrix A, GrB_Index i, GrB_Index j); -GrB_Info GrB_Matrix_extractElement_UINT16(uint16_t *x, const GrB_Matrix A, GrB_Index i, GrB_Index j); -GrB_Info GrB_Matrix_extractElement_UINT32(uint32_t *x, const GrB_Matrix A, GrB_Index i, GrB_Index j); -GrB_Info GrB_Matrix_extractElement_UINT64(uint64_t *x, const GrB_Matrix A, GrB_Index i, GrB_Index j); -GrB_Info GrB_Matrix_extractTuples_BOOL(GrB_Index *I, GrB_Index *J, bool *X, GrB_Index *nvals, const GrB_Matrix A); -GrB_Info GrB_Matrix_extractTuples_FP32(GrB_Index *I, GrB_Index *J, float *X, GrB_Index *nvals, const GrB_Matrix A); -GrB_Info GrB_Matrix_extractTuples_FP64(GrB_Index *I, GrB_Index *J, double *X, GrB_Index *nvals, const GrB_Matrix A); -GrB_Info GrB_Matrix_extractTuples_INT8(GrB_Index *I, GrB_Index *J, int8_t *X, GrB_Index *nvals, const GrB_Matrix A); -GrB_Info GrB_Matrix_extractTuples_INT16(GrB_Index *I, GrB_Index *J, int16_t *X, GrB_Index *nvals, const GrB_Matrix A); -GrB_Info GrB_Matrix_extractTuples_INT32(GrB_Index *I, GrB_Index *J, int32_t *X, GrB_Index *nvals, const GrB_Matrix A); -GrB_Info GrB_Matrix_extractTuples_INT64(GrB_Index *I, GrB_Index *J, int64_t *X, GrB_Index *nvals, const GrB_Matrix A); -GrB_Info GrB_Matrix_extractTuples_UDT(GrB_Index *I, GrB_Index *J, void *X, GrB_Index *nvals, const GrB_Matrix A); -GrB_Info GrB_Matrix_extractTuples_UINT8(GrB_Index *I, GrB_Index *J, uint8_t *X, GrB_Index *nvals, const GrB_Matrix A); -GrB_Info GrB_Matrix_extractTuples_UINT16(GrB_Index *I, GrB_Index *J, uint16_t *X, GrB_Index *nvals, const GrB_Matrix A); -GrB_Info GrB_Matrix_extractTuples_UINT32(GrB_Index *I, GrB_Index *J, uint32_t *X, GrB_Index *nvals, const GrB_Matrix A); -GrB_Info GrB_Matrix_extractTuples_UINT64(GrB_Index *I, GrB_Index *J, uint64_t *X, GrB_Index *nvals, const GrB_Matrix A); -GrB_Info GrB_Matrix_free(GrB_Matrix *A); -GrB_Info GrB_Matrix_import_BOOL(GrB_Matrix *A, GrB_Type type, GrB_Index nrows, GrB_Index ncols, const GrB_Index *Ap, const GrB_Index *Ai, const bool *Ax, GrB_Index Ap_len, GrB_Index Ai_len, GrB_Index Ax_len, GrB_Format format); -GrB_Info GrB_Matrix_import_FP32(GrB_Matrix *A, GrB_Type type, GrB_Index nrows, GrB_Index ncols, const GrB_Index *Ap, const GrB_Index *Ai, const float *Ax, GrB_Index Ap_len, GrB_Index Ai_len, GrB_Index Ax_len, GrB_Format format); -GrB_Info GrB_Matrix_import_FP64(GrB_Matrix *A, GrB_Type type, GrB_Index nrows, GrB_Index ncols, const GrB_Index *Ap, const GrB_Index *Ai, const double *Ax, GrB_Index Ap_len, GrB_Index Ai_len, GrB_Index Ax_len, GrB_Format format); -GrB_Info GrB_Matrix_import_INT8(GrB_Matrix *A, GrB_Type type, GrB_Index nrows, GrB_Index ncols, const GrB_Index *Ap, const GrB_Index *Ai, const int8_t *Ax, GrB_Index Ap_len, GrB_Index Ai_len, GrB_Index Ax_len, GrB_Format format); -GrB_Info GrB_Matrix_import_INT16(GrB_Matrix *A, GrB_Type type, GrB_Index nrows, GrB_Index ncols, const GrB_Index *Ap, const GrB_Index *Ai, const int16_t *Ax, GrB_Index Ap_len, GrB_Index Ai_len, GrB_Index Ax_len, GrB_Format format); -GrB_Info GrB_Matrix_import_INT32(GrB_Matrix *A, GrB_Type type, GrB_Index nrows, GrB_Index ncols, const GrB_Index *Ap, const GrB_Index *Ai, const int32_t *Ax, GrB_Index Ap_len, GrB_Index Ai_len, GrB_Index Ax_len, GrB_Format format); -GrB_Info GrB_Matrix_import_INT64(GrB_Matrix *A, GrB_Type type, GrB_Index nrows, GrB_Index ncols, const GrB_Index *Ap, const GrB_Index *Ai, const int64_t *Ax, GrB_Index Ap_len, GrB_Index Ai_len, GrB_Index Ax_len, GrB_Format format); -GrB_Info GrB_Matrix_import_UDT(GrB_Matrix *A, GrB_Type type, GrB_Index nrows, GrB_Index ncols, const GrB_Index *Ap, const GrB_Index *Ai, const void *Ax, GrB_Index Ap_len, GrB_Index Ai_len, GrB_Index Ax_len, GrB_Format format); -GrB_Info GrB_Matrix_import_UINT8(GrB_Matrix *A, GrB_Type type, GrB_Index nrows, GrB_Index ncols, const GrB_Index *Ap, const GrB_Index *Ai, const uint8_t *Ax, GrB_Index Ap_len, GrB_Index Ai_len, GrB_Index Ax_len, GrB_Format format); -GrB_Info GrB_Matrix_import_UINT16(GrB_Matrix *A, GrB_Type type, GrB_Index nrows, GrB_Index ncols, const GrB_Index *Ap, const GrB_Index *Ai, const uint16_t *Ax, GrB_Index Ap_len, GrB_Index Ai_len, GrB_Index Ax_len, GrB_Format format); -GrB_Info GrB_Matrix_import_UINT32(GrB_Matrix *A, GrB_Type type, GrB_Index nrows, GrB_Index ncols, const GrB_Index *Ap, const GrB_Index *Ai, const uint32_t *Ax, GrB_Index Ap_len, GrB_Index Ai_len, GrB_Index Ax_len, GrB_Format format); -GrB_Info GrB_Matrix_import_UINT64(GrB_Matrix *A, GrB_Type type, GrB_Index nrows, GrB_Index ncols, const GrB_Index *Ap, const GrB_Index *Ai, const uint64_t *Ax, GrB_Index Ap_len, GrB_Index Ai_len, GrB_Index Ax_len, GrB_Format format); -GrB_Info GrB_Matrix_kronecker_BinaryOp(GrB_Matrix C, const GrB_Matrix M, const GrB_BinaryOp accum, const GrB_BinaryOp op, const GrB_Matrix A, const GrB_Matrix B, const GrB_Descriptor desc); -GrB_Info GrB_Matrix_kronecker_Monoid(GrB_Matrix C, const GrB_Matrix M, const GrB_BinaryOp accum, const GrB_Monoid monoid, const GrB_Matrix A, const GrB_Matrix B, const GrB_Descriptor desc); -GrB_Info GrB_Matrix_kronecker_Semiring(GrB_Matrix C, const GrB_Matrix M, const GrB_BinaryOp accum, const GrB_Semiring semiring, const GrB_Matrix A, const GrB_Matrix B, const GrB_Descriptor desc); -GrB_Info GrB_Matrix_ncols(GrB_Index *ncols, const GrB_Matrix A); -GrB_Info GrB_Matrix_new(GrB_Matrix *A, GrB_Type type, GrB_Index nrows, GrB_Index ncols); -GrB_Info GrB_Matrix_nrows(GrB_Index *nrows, const GrB_Matrix A); -GrB_Info GrB_Matrix_nvals(GrB_Index *nvals, const GrB_Matrix A); -GrB_Info GrB_Matrix_reduce_BOOL(bool *c, const GrB_BinaryOp accum, const GrB_Monoid monoid, const GrB_Matrix A, const GrB_Descriptor desc); -GrB_Info GrB_Matrix_reduce_BinaryOp(GrB_Vector w, const GrB_Vector mask, const GrB_BinaryOp accum, const GrB_BinaryOp op, const GrB_Matrix A, const GrB_Descriptor desc); -GrB_Info GrB_Matrix_reduce_BinaryOp_Scalar(GrB_Scalar S, const GrB_BinaryOp accum, const GrB_BinaryOp op, const GrB_Matrix A, const GrB_Descriptor desc); -GrB_Info GrB_Matrix_reduce_FP32(float *c, const GrB_BinaryOp accum, const GrB_Monoid monoid, const GrB_Matrix A, const GrB_Descriptor desc); -GrB_Info GrB_Matrix_reduce_FP64(double *c, const GrB_BinaryOp accum, const GrB_Monoid monoid, const GrB_Matrix A, const GrB_Descriptor desc); -GrB_Info GrB_Matrix_reduce_INT8(int8_t *c, const GrB_BinaryOp accum, const GrB_Monoid monoid, const GrB_Matrix A, const GrB_Descriptor desc); -GrB_Info GrB_Matrix_reduce_INT16(int16_t *c, const GrB_BinaryOp accum, const GrB_Monoid monoid, const GrB_Matrix A, const GrB_Descriptor desc); -GrB_Info GrB_Matrix_reduce_INT32(int32_t *c, const GrB_BinaryOp accum, const GrB_Monoid monoid, const GrB_Matrix A, const GrB_Descriptor desc); -GrB_Info GrB_Matrix_reduce_INT64(int64_t *c, const GrB_BinaryOp accum, const GrB_Monoid monoid, const GrB_Matrix A, const GrB_Descriptor desc); -GrB_Info GrB_Matrix_reduce_Monoid(GrB_Vector w, const GrB_Vector mask, const GrB_BinaryOp accum, const GrB_Monoid monoid, const GrB_Matrix A, const GrB_Descriptor desc); -GrB_Info GrB_Matrix_reduce_Monoid_Scalar(GrB_Scalar c, const GrB_BinaryOp accum, const GrB_Monoid monoid, const GrB_Matrix A, const GrB_Descriptor desc); -GrB_Info GrB_Matrix_reduce_UDT(void *c, const GrB_BinaryOp accum, const GrB_Monoid monoid, const GrB_Matrix A, const GrB_Descriptor desc); -GrB_Info GrB_Matrix_reduce_UINT8(uint8_t *c, const GrB_BinaryOp accum, const GrB_Monoid monoid, const GrB_Matrix A, const GrB_Descriptor desc); -GrB_Info GrB_Matrix_reduce_UINT16(uint16_t *c, const GrB_BinaryOp accum, const GrB_Monoid monoid, const GrB_Matrix A, const GrB_Descriptor desc); -GrB_Info GrB_Matrix_reduce_UINT32(uint32_t *c, const GrB_BinaryOp accum, const GrB_Monoid monoid, const GrB_Matrix A, const GrB_Descriptor desc); -GrB_Info GrB_Matrix_reduce_UINT64(uint64_t *c, const GrB_BinaryOp accum, const GrB_Monoid monoid, const GrB_Matrix A, const GrB_Descriptor desc); -GrB_Info GrB_Matrix_removeElement(GrB_Matrix C, GrB_Index i, GrB_Index j); -GrB_Info GrB_Matrix_resize(GrB_Matrix C, GrB_Index nrows_new, GrB_Index ncols_new); -GrB_Info GrB_Matrix_select_BOOL(GrB_Matrix C, const GrB_Matrix Mask, const GrB_BinaryOp accum, const GrB_IndexUnaryOp op, const GrB_Matrix A, bool y, const GrB_Descriptor desc); -GrB_Info GrB_Matrix_select_FP32(GrB_Matrix C, const GrB_Matrix Mask, const GrB_BinaryOp accum, const GrB_IndexUnaryOp op, const GrB_Matrix A, float y, const GrB_Descriptor desc); -GrB_Info GrB_Matrix_select_FP64(GrB_Matrix C, const GrB_Matrix Mask, const GrB_BinaryOp accum, const GrB_IndexUnaryOp op, const GrB_Matrix A, double y, const GrB_Descriptor desc); -GrB_Info GrB_Matrix_select_INT8(GrB_Matrix C, const GrB_Matrix Mask, const GrB_BinaryOp accum, const GrB_IndexUnaryOp op, const GrB_Matrix A, int8_t y, const GrB_Descriptor desc); -GrB_Info GrB_Matrix_select_INT16(GrB_Matrix C, const GrB_Matrix Mask, const GrB_BinaryOp accum, const GrB_IndexUnaryOp op, const GrB_Matrix A, int16_t y, const GrB_Descriptor desc); -GrB_Info GrB_Matrix_select_INT32(GrB_Matrix C, const GrB_Matrix Mask, const GrB_BinaryOp accum, const GrB_IndexUnaryOp op, const GrB_Matrix A, int32_t y, const GrB_Descriptor desc); -GrB_Info GrB_Matrix_select_INT64(GrB_Matrix C, const GrB_Matrix Mask, const GrB_BinaryOp accum, const GrB_IndexUnaryOp op, const GrB_Matrix A, int64_t y, const GrB_Descriptor desc); -GrB_Info GrB_Matrix_select_Scalar(GrB_Matrix C, const GrB_Matrix Mask, const GrB_BinaryOp accum, const GrB_IndexUnaryOp op, const GrB_Matrix A, const GrB_Scalar y, const GrB_Descriptor desc); -GrB_Info GrB_Matrix_select_UDT(GrB_Matrix C, const GrB_Matrix Mask, const GrB_BinaryOp accum, const GrB_IndexUnaryOp op, const GrB_Matrix A, const void *y, const GrB_Descriptor desc); -GrB_Info GrB_Matrix_select_UINT8(GrB_Matrix C, const GrB_Matrix Mask, const GrB_BinaryOp accum, const GrB_IndexUnaryOp op, const GrB_Matrix A, uint8_t y, const GrB_Descriptor desc); -GrB_Info GrB_Matrix_select_UINT16(GrB_Matrix C, const GrB_Matrix Mask, const GrB_BinaryOp accum, const GrB_IndexUnaryOp op, const GrB_Matrix A, uint16_t y, const GrB_Descriptor desc); -GrB_Info GrB_Matrix_select_UINT32(GrB_Matrix C, const GrB_Matrix Mask, const GrB_BinaryOp accum, const GrB_IndexUnaryOp op, const GrB_Matrix A, uint32_t y, const GrB_Descriptor desc); -GrB_Info GrB_Matrix_select_UINT64(GrB_Matrix C, const GrB_Matrix Mask, const GrB_BinaryOp accum, const GrB_IndexUnaryOp op, const GrB_Matrix A, uint64_t y, const GrB_Descriptor desc); -GrB_Info GrB_Matrix_serialize(void *blob, GrB_Index *blob_size_handle, GrB_Matrix A); -GrB_Info GrB_Matrix_serializeSize(GrB_Index *blob_size_handle, GrB_Matrix A); -GrB_Info GrB_Matrix_setElement_BOOL(GrB_Matrix C, bool x, GrB_Index i, GrB_Index j); -GrB_Info GrB_Matrix_setElement_FP32(GrB_Matrix C, float x, GrB_Index i, GrB_Index j); -GrB_Info GrB_Matrix_setElement_FP64(GrB_Matrix C, double x, GrB_Index i, GrB_Index j); -GrB_Info GrB_Matrix_setElement_INT8(GrB_Matrix C, int8_t x, GrB_Index i, GrB_Index j); -GrB_Info GrB_Matrix_setElement_INT16(GrB_Matrix C, int16_t x, GrB_Index i, GrB_Index j); -GrB_Info GrB_Matrix_setElement_INT32(GrB_Matrix C, int32_t x, GrB_Index i, GrB_Index j); -GrB_Info GrB_Matrix_setElement_INT64(GrB_Matrix C, int64_t x, GrB_Index i, GrB_Index j); -GrB_Info GrB_Matrix_setElement_Scalar(GrB_Matrix C, GrB_Scalar x, GrB_Index i, GrB_Index j); -GrB_Info GrB_Matrix_setElement_UDT(GrB_Matrix C, void *x, GrB_Index i, GrB_Index j); -GrB_Info GrB_Matrix_setElement_UINT8(GrB_Matrix C, uint8_t x, GrB_Index i, GrB_Index j); -GrB_Info GrB_Matrix_setElement_UINT16(GrB_Matrix C, uint16_t x, GrB_Index i, GrB_Index j); -GrB_Info GrB_Matrix_setElement_UINT32(GrB_Matrix C, uint32_t x, GrB_Index i, GrB_Index j); -GrB_Info GrB_Matrix_setElement_UINT64(GrB_Matrix C, uint64_t x, GrB_Index i, GrB_Index j); -GrB_Info GrB_Matrix_wait(GrB_Matrix A, GrB_WaitMode waitmode); -GrB_Info GrB_Row_assign(GrB_Matrix C, const GrB_Vector mask, const GrB_BinaryOp accum, const GrB_Vector u, GrB_Index i, const GrB_Index *J, GrB_Index nj, const GrB_Descriptor desc); -GrB_Info GrB_mxm(GrB_Matrix C, const GrB_Matrix Mask, const GrB_BinaryOp accum, const GrB_Semiring semiring, const GrB_Matrix A, const GrB_Matrix B, const GrB_Descriptor desc); -GrB_Info GrB_mxv(GrB_Vector w, const GrB_Vector mask, const GrB_BinaryOp accum, const GrB_Semiring semiring, const GrB_Matrix A, const GrB_Vector u, const GrB_Descriptor desc); -GrB_Info GrB_transpose(GrB_Matrix C, const GrB_Matrix Mask, const GrB_BinaryOp accum, const GrB_Matrix A, const GrB_Descriptor desc); -GrB_Info GrB_vxm(GrB_Vector w, const GrB_Vector mask, const GrB_BinaryOp accum, const GrB_Semiring semiring, const GrB_Vector u, const GrB_Matrix A, const GrB_Descriptor desc); - -/* monoid */ -GrB_Info GrB_Monoid_error(const char **error, const GrB_Monoid monoid); -GrB_Info GrB_Monoid_free(GrB_Monoid *monoid); -GrB_Info GrB_Monoid_new_BOOL(GrB_Monoid *monoid, GrB_BinaryOp op, bool identity); -GrB_Info GrB_Monoid_new_FP32(GrB_Monoid *monoid, GrB_BinaryOp op, float identity); -GrB_Info GrB_Monoid_new_FP64(GrB_Monoid *monoid, GrB_BinaryOp op, double identity); -GrB_Info GrB_Monoid_new_INT8(GrB_Monoid *monoid, GrB_BinaryOp op, int8_t identity); -GrB_Info GrB_Monoid_new_INT16(GrB_Monoid *monoid, GrB_BinaryOp op, int16_t identity); -GrB_Info GrB_Monoid_new_INT32(GrB_Monoid *monoid, GrB_BinaryOp op, int32_t identity); -GrB_Info GrB_Monoid_new_INT64(GrB_Monoid *monoid, GrB_BinaryOp op, int64_t identity); -GrB_Info GrB_Monoid_new_UDT(GrB_Monoid *monoid, GrB_BinaryOp op, void *identity); -GrB_Info GrB_Monoid_new_UINT8(GrB_Monoid *monoid, GrB_BinaryOp op, uint8_t identity); -GrB_Info GrB_Monoid_new_UINT16(GrB_Monoid *monoid, GrB_BinaryOp op, uint16_t identity); -GrB_Info GrB_Monoid_new_UINT32(GrB_Monoid *monoid, GrB_BinaryOp op, uint32_t identity); -GrB_Info GrB_Monoid_new_UINT64(GrB_Monoid *monoid, GrB_BinaryOp op, uint64_t identity); -GrB_Info GrB_Monoid_wait(GrB_Monoid monoid, GrB_WaitMode waitmode); - -/* scalar */ -GrB_Info GrB_Scalar_clear(GrB_Scalar s); -GrB_Info GrB_Scalar_dup(GrB_Scalar *s, const GrB_Scalar t); -GrB_Info GrB_Scalar_error(const char **error, const GrB_Scalar s); -GrB_Info GrB_Scalar_extractElement_BOOL(bool *x, const GrB_Scalar s); -GrB_Info GrB_Scalar_extractElement_FP32(float *x, const GrB_Scalar s); -GrB_Info GrB_Scalar_extractElement_FP64(double *x, const GrB_Scalar s); -GrB_Info GrB_Scalar_extractElement_INT8(int8_t *x, const GrB_Scalar s); -GrB_Info GrB_Scalar_extractElement_INT16(int16_t *x, const GrB_Scalar s); -GrB_Info GrB_Scalar_extractElement_INT32(int32_t *x, const GrB_Scalar s); -GrB_Info GrB_Scalar_extractElement_INT64(int64_t *x, const GrB_Scalar s); -GrB_Info GrB_Scalar_extractElement_UDT(void *x, const GrB_Scalar s); -GrB_Info GrB_Scalar_extractElement_UINT8(uint8_t *x, const GrB_Scalar s); -GrB_Info GrB_Scalar_extractElement_UINT16(uint16_t *x, const GrB_Scalar s); -GrB_Info GrB_Scalar_extractElement_UINT32(uint32_t *x, const GrB_Scalar s); -GrB_Info GrB_Scalar_extractElement_UINT64(uint64_t *x, const GrB_Scalar s); -GrB_Info GrB_Scalar_free(GrB_Scalar *s); -GrB_Info GrB_Scalar_new(GrB_Scalar *s, GrB_Type type); -GrB_Info GrB_Scalar_nvals(GrB_Index *nvals, const GrB_Scalar s); -GrB_Info GrB_Scalar_setElement_BOOL(GrB_Scalar s, bool x); -GrB_Info GrB_Scalar_setElement_FP32(GrB_Scalar s, float x); -GrB_Info GrB_Scalar_setElement_FP64(GrB_Scalar s, double x); -GrB_Info GrB_Scalar_setElement_INT8(GrB_Scalar s, int8_t x); -GrB_Info GrB_Scalar_setElement_INT16(GrB_Scalar s, int16_t x); -GrB_Info GrB_Scalar_setElement_INT32(GrB_Scalar s, int32_t x); -GrB_Info GrB_Scalar_setElement_INT64(GrB_Scalar s, int64_t x); -GrB_Info GrB_Scalar_setElement_UDT(GrB_Scalar s, void *x); -GrB_Info GrB_Scalar_setElement_UINT8(GrB_Scalar s, uint8_t x); -GrB_Info GrB_Scalar_setElement_UINT16(GrB_Scalar s, uint16_t x); -GrB_Info GrB_Scalar_setElement_UINT32(GrB_Scalar s, uint32_t x); -GrB_Info GrB_Scalar_setElement_UINT64(GrB_Scalar s, uint64_t x); -GrB_Info GrB_Scalar_wait(GrB_Scalar s, GrB_WaitMode waitmode); - -/* semiring */ -GrB_Info GrB_Semiring_error(const char **error, const GrB_Semiring semiring); -GrB_Info GrB_Semiring_free(GrB_Semiring *semiring); -GrB_Info GrB_Semiring_new(GrB_Semiring *semiring, GrB_Monoid add, GrB_BinaryOp multiply); -GrB_Info GrB_Semiring_wait(GrB_Semiring semiring, GrB_WaitMode waitmode); - -/* type */ -GrB_Info GrB_Type_error(const char **error, const GrB_Type type); -GrB_Info GrB_Type_free(GrB_Type *type); -GrB_Info GrB_Type_new(GrB_Type *type, size_t sizeof_ctype); -GrB_Info GrB_Type_wait(GrB_Type type, GrB_WaitMode waitmode); - -/* unary */ -GrB_Info GrB_UnaryOp_error(const char **error, const GrB_UnaryOp op); -GrB_Info GrB_UnaryOp_free(GrB_UnaryOp *unaryop); -GrB_Info GrB_UnaryOp_new(GrB_UnaryOp *unaryop, GxB_unary_function function, GrB_Type ztype, GrB_Type xtype); -GrB_Info GrB_UnaryOp_wait(GrB_UnaryOp op, GrB_WaitMode waitmode); - -/* vector */ -GrB_Info GrB_Vector_apply(GrB_Vector w, const GrB_Vector mask, const GrB_BinaryOp accum, const GrB_UnaryOp op, const GrB_Vector u, const GrB_Descriptor desc); -GrB_Info GrB_Vector_apply_BinaryOp1st_BOOL(GrB_Vector w, const GrB_Vector mask, const GrB_BinaryOp accum, const GrB_BinaryOp op, bool x, const GrB_Vector u, const GrB_Descriptor desc); -GrB_Info GrB_Vector_apply_BinaryOp1st_FP32(GrB_Vector w, const GrB_Vector mask, const GrB_BinaryOp accum, const GrB_BinaryOp op, float x, const GrB_Vector u, const GrB_Descriptor desc); -GrB_Info GrB_Vector_apply_BinaryOp1st_FP64(GrB_Vector w, const GrB_Vector mask, const GrB_BinaryOp accum, const GrB_BinaryOp op, double x, const GrB_Vector u, const GrB_Descriptor desc); -GrB_Info GrB_Vector_apply_BinaryOp1st_INT8(GrB_Vector w, const GrB_Vector mask, const GrB_BinaryOp accum, const GrB_BinaryOp op, int8_t x, const GrB_Vector u, const GrB_Descriptor desc); -GrB_Info GrB_Vector_apply_BinaryOp1st_INT16(GrB_Vector w, const GrB_Vector mask, const GrB_BinaryOp accum, const GrB_BinaryOp op, int16_t x, const GrB_Vector u, const GrB_Descriptor desc); -GrB_Info GrB_Vector_apply_BinaryOp1st_INT32(GrB_Vector w, const GrB_Vector mask, const GrB_BinaryOp accum, const GrB_BinaryOp op, int32_t x, const GrB_Vector u, const GrB_Descriptor desc); -GrB_Info GrB_Vector_apply_BinaryOp1st_INT64(GrB_Vector w, const GrB_Vector mask, const GrB_BinaryOp accum, const GrB_BinaryOp op, int64_t x, const GrB_Vector u, const GrB_Descriptor desc); -GrB_Info GrB_Vector_apply_BinaryOp1st_Scalar(GrB_Vector w, const GrB_Vector mask, const GrB_BinaryOp accum, const GrB_BinaryOp op, const GrB_Scalar x, const GrB_Vector u, const GrB_Descriptor desc); -GrB_Info GrB_Vector_apply_BinaryOp1st_UDT(GrB_Vector w, const GrB_Vector mask, const GrB_BinaryOp accum, const GrB_BinaryOp op, const void *x, const GrB_Vector u, const GrB_Descriptor desc); -GrB_Info GrB_Vector_apply_BinaryOp1st_UINT8(GrB_Vector w, const GrB_Vector mask, const GrB_BinaryOp accum, const GrB_BinaryOp op, uint8_t x, const GrB_Vector u, const GrB_Descriptor desc); -GrB_Info GrB_Vector_apply_BinaryOp1st_UINT16(GrB_Vector w, const GrB_Vector mask, const GrB_BinaryOp accum, const GrB_BinaryOp op, uint16_t x, const GrB_Vector u, const GrB_Descriptor desc); -GrB_Info GrB_Vector_apply_BinaryOp1st_UINT32(GrB_Vector w, const GrB_Vector mask, const GrB_BinaryOp accum, const GrB_BinaryOp op, uint32_t x, const GrB_Vector u, const GrB_Descriptor desc); -GrB_Info GrB_Vector_apply_BinaryOp1st_UINT64(GrB_Vector w, const GrB_Vector mask, const GrB_BinaryOp accum, const GrB_BinaryOp op, uint64_t x, const GrB_Vector u, const GrB_Descriptor desc); -GrB_Info GrB_Vector_apply_BinaryOp2nd_BOOL(GrB_Vector w, const GrB_Vector mask, const GrB_BinaryOp accum, const GrB_BinaryOp op, const GrB_Vector u, bool y, const GrB_Descriptor desc); -GrB_Info GrB_Vector_apply_BinaryOp2nd_FP32(GrB_Vector w, const GrB_Vector mask, const GrB_BinaryOp accum, const GrB_BinaryOp op, const GrB_Vector u, float y, const GrB_Descriptor desc); -GrB_Info GrB_Vector_apply_BinaryOp2nd_FP64(GrB_Vector w, const GrB_Vector mask, const GrB_BinaryOp accum, const GrB_BinaryOp op, const GrB_Vector u, double y, const GrB_Descriptor desc); -GrB_Info GrB_Vector_apply_BinaryOp2nd_INT8(GrB_Vector w, const GrB_Vector mask, const GrB_BinaryOp accum, const GrB_BinaryOp op, const GrB_Vector u, int8_t y, const GrB_Descriptor desc); -GrB_Info GrB_Vector_apply_BinaryOp2nd_INT16(GrB_Vector w, const GrB_Vector mask, const GrB_BinaryOp accum, const GrB_BinaryOp op, const GrB_Vector u, int16_t y, const GrB_Descriptor desc); -GrB_Info GrB_Vector_apply_BinaryOp2nd_INT32(GrB_Vector w, const GrB_Vector mask, const GrB_BinaryOp accum, const GrB_BinaryOp op, const GrB_Vector u, int32_t y, const GrB_Descriptor desc); -GrB_Info GrB_Vector_apply_BinaryOp2nd_INT64(GrB_Vector w, const GrB_Vector mask, const GrB_BinaryOp accum, const GrB_BinaryOp op, const GrB_Vector u, int64_t y, const GrB_Descriptor desc); -GrB_Info GrB_Vector_apply_BinaryOp2nd_Scalar(GrB_Vector w, const GrB_Vector mask, const GrB_BinaryOp accum, const GrB_BinaryOp op, const GrB_Vector u, const GrB_Scalar y, const GrB_Descriptor desc); -GrB_Info GrB_Vector_apply_BinaryOp2nd_UDT(GrB_Vector w, const GrB_Vector mask, const GrB_BinaryOp accum, const GrB_BinaryOp op, const GrB_Vector u, const void *y, const GrB_Descriptor desc); -GrB_Info GrB_Vector_apply_BinaryOp2nd_UINT8(GrB_Vector w, const GrB_Vector mask, const GrB_BinaryOp accum, const GrB_BinaryOp op, const GrB_Vector u, uint8_t y, const GrB_Descriptor desc); -GrB_Info GrB_Vector_apply_BinaryOp2nd_UINT16(GrB_Vector w, const GrB_Vector mask, const GrB_BinaryOp accum, const GrB_BinaryOp op, const GrB_Vector u, uint16_t y, const GrB_Descriptor desc); -GrB_Info GrB_Vector_apply_BinaryOp2nd_UINT32(GrB_Vector w, const GrB_Vector mask, const GrB_BinaryOp accum, const GrB_BinaryOp op, const GrB_Vector u, uint32_t y, const GrB_Descriptor desc); -GrB_Info GrB_Vector_apply_BinaryOp2nd_UINT64(GrB_Vector w, const GrB_Vector mask, const GrB_BinaryOp accum, const GrB_BinaryOp op, const GrB_Vector u, uint64_t y, const GrB_Descriptor desc); -GrB_Info GrB_Vector_apply_IndexOp_BOOL(GrB_Vector w, const GrB_Vector mask, const GrB_BinaryOp accum, const GrB_IndexUnaryOp op, const GrB_Vector u, bool y, const GrB_Descriptor desc); -GrB_Info GrB_Vector_apply_IndexOp_FP32(GrB_Vector w, const GrB_Vector mask, const GrB_BinaryOp accum, const GrB_IndexUnaryOp op, const GrB_Vector u, float y, const GrB_Descriptor desc); -GrB_Info GrB_Vector_apply_IndexOp_FP64(GrB_Vector w, const GrB_Vector mask, const GrB_BinaryOp accum, const GrB_IndexUnaryOp op, const GrB_Vector u, double y, const GrB_Descriptor desc); -GrB_Info GrB_Vector_apply_IndexOp_INT8(GrB_Vector w, const GrB_Vector mask, const GrB_BinaryOp accum, const GrB_IndexUnaryOp op, const GrB_Vector u, int8_t y, const GrB_Descriptor desc); -GrB_Info GrB_Vector_apply_IndexOp_INT16(GrB_Vector w, const GrB_Vector mask, const GrB_BinaryOp accum, const GrB_IndexUnaryOp op, const GrB_Vector u, int16_t y, const GrB_Descriptor desc); -GrB_Info GrB_Vector_apply_IndexOp_INT32(GrB_Vector w, const GrB_Vector mask, const GrB_BinaryOp accum, const GrB_IndexUnaryOp op, const GrB_Vector u, int32_t y, const GrB_Descriptor desc); -GrB_Info GrB_Vector_apply_IndexOp_INT64(GrB_Vector w, const GrB_Vector mask, const GrB_BinaryOp accum, const GrB_IndexUnaryOp op, const GrB_Vector u, int64_t y, const GrB_Descriptor desc); -GrB_Info GrB_Vector_apply_IndexOp_Scalar(GrB_Vector w, const GrB_Vector mask, const GrB_BinaryOp accum, const GrB_IndexUnaryOp op, const GrB_Vector u, const GrB_Scalar y, const GrB_Descriptor desc); -GrB_Info GrB_Vector_apply_IndexOp_UDT(GrB_Vector w, const GrB_Vector mask, const GrB_BinaryOp accum, const GrB_IndexUnaryOp op, const GrB_Vector u, const void *y, const GrB_Descriptor desc); -GrB_Info GrB_Vector_apply_IndexOp_UINT8(GrB_Vector w, const GrB_Vector mask, const GrB_BinaryOp accum, const GrB_IndexUnaryOp op, const GrB_Vector u, uint8_t y, const GrB_Descriptor desc); -GrB_Info GrB_Vector_apply_IndexOp_UINT16(GrB_Vector w, const GrB_Vector mask, const GrB_BinaryOp accum, const GrB_IndexUnaryOp op, const GrB_Vector u, uint16_t y, const GrB_Descriptor desc); -GrB_Info GrB_Vector_apply_IndexOp_UINT32(GrB_Vector w, const GrB_Vector mask, const GrB_BinaryOp accum, const GrB_IndexUnaryOp op, const GrB_Vector u, uint32_t y, const GrB_Descriptor desc); -GrB_Info GrB_Vector_apply_IndexOp_UINT64(GrB_Vector w, const GrB_Vector mask, const GrB_BinaryOp accum, const GrB_IndexUnaryOp op, const GrB_Vector u, uint64_t y, const GrB_Descriptor desc); -GrB_Info GrB_Vector_assign(GrB_Vector w, const GrB_Vector mask, const GrB_BinaryOp accum, const GrB_Vector u, const GrB_Index *I, GrB_Index ni, const GrB_Descriptor desc); -GrB_Info GrB_Vector_assign_BOOL(GrB_Vector w, const GrB_Vector mask, const GrB_BinaryOp accum, bool x, const GrB_Index *I, GrB_Index ni, const GrB_Descriptor desc); -GrB_Info GrB_Vector_assign_FP32(GrB_Vector w, const GrB_Vector mask, const GrB_BinaryOp accum, float x, const GrB_Index *I, GrB_Index ni, const GrB_Descriptor desc); -GrB_Info GrB_Vector_assign_FP64(GrB_Vector w, const GrB_Vector mask, const GrB_BinaryOp accum, double x, const GrB_Index *I, GrB_Index ni, const GrB_Descriptor desc); -GrB_Info GrB_Vector_assign_INT8(GrB_Vector w, const GrB_Vector mask, const GrB_BinaryOp accum, int8_t x, const GrB_Index *I, GrB_Index ni, const GrB_Descriptor desc); -GrB_Info GrB_Vector_assign_INT16(GrB_Vector w, const GrB_Vector mask, const GrB_BinaryOp accum, int16_t x, const GrB_Index *I, GrB_Index ni, const GrB_Descriptor desc); -GrB_Info GrB_Vector_assign_INT32(GrB_Vector w, const GrB_Vector mask, const GrB_BinaryOp accum, int32_t x, const GrB_Index *I, GrB_Index ni, const GrB_Descriptor desc); -GrB_Info GrB_Vector_assign_INT64(GrB_Vector w, const GrB_Vector mask, const GrB_BinaryOp accum, int64_t x, const GrB_Index *I, GrB_Index ni, const GrB_Descriptor desc); -GrB_Info GrB_Vector_assign_Scalar(GrB_Vector w, const GrB_Vector mask, const GrB_BinaryOp accum, GrB_Scalar x, const GrB_Index *I, GrB_Index ni, const GrB_Descriptor desc); -GrB_Info GrB_Vector_assign_UDT(GrB_Vector w, const GrB_Vector mask, const GrB_BinaryOp accum, void *x, const GrB_Index *I, GrB_Index ni, const GrB_Descriptor desc); -GrB_Info GrB_Vector_assign_UINT8(GrB_Vector w, const GrB_Vector mask, const GrB_BinaryOp accum, uint8_t x, const GrB_Index *I, GrB_Index ni, const GrB_Descriptor desc); -GrB_Info GrB_Vector_assign_UINT16(GrB_Vector w, const GrB_Vector mask, const GrB_BinaryOp accum, uint16_t x, const GrB_Index *I, GrB_Index ni, const GrB_Descriptor desc); -GrB_Info GrB_Vector_assign_UINT32(GrB_Vector w, const GrB_Vector mask, const GrB_BinaryOp accum, uint32_t x, const GrB_Index *I, GrB_Index ni, const GrB_Descriptor desc); -GrB_Info GrB_Vector_assign_UINT64(GrB_Vector w, const GrB_Vector mask, const GrB_BinaryOp accum, uint64_t x, const GrB_Index *I, GrB_Index ni, const GrB_Descriptor desc); -GrB_Info GrB_Vector_build_BOOL(GrB_Vector w, const GrB_Index *I, const bool *X, GrB_Index nvals, const GrB_BinaryOp dup); -GrB_Info GrB_Vector_build_FP32(GrB_Vector w, const GrB_Index *I, const float *X, GrB_Index nvals, const GrB_BinaryOp dup); -GrB_Info GrB_Vector_build_FP64(GrB_Vector w, const GrB_Index *I, const double *X, GrB_Index nvals, const GrB_BinaryOp dup); -GrB_Info GrB_Vector_build_INT8(GrB_Vector w, const GrB_Index *I, const int8_t *X, GrB_Index nvals, const GrB_BinaryOp dup); -GrB_Info GrB_Vector_build_INT16(GrB_Vector w, const GrB_Index *I, const int16_t *X, GrB_Index nvals, const GrB_BinaryOp dup); -GrB_Info GrB_Vector_build_INT32(GrB_Vector w, const GrB_Index *I, const int32_t *X, GrB_Index nvals, const GrB_BinaryOp dup); -GrB_Info GrB_Vector_build_INT64(GrB_Vector w, const GrB_Index *I, const int64_t *X, GrB_Index nvals, const GrB_BinaryOp dup); -GrB_Info GrB_Vector_build_UDT(GrB_Vector w, const GrB_Index *I, const void *X, GrB_Index nvals, const GrB_BinaryOp dup); -GrB_Info GrB_Vector_build_UINT8(GrB_Vector w, const GrB_Index *I, const uint8_t *X, GrB_Index nvals, const GrB_BinaryOp dup); -GrB_Info GrB_Vector_build_UINT16(GrB_Vector w, const GrB_Index *I, const uint16_t *X, GrB_Index nvals, const GrB_BinaryOp dup); -GrB_Info GrB_Vector_build_UINT32(GrB_Vector w, const GrB_Index *I, const uint32_t *X, GrB_Index nvals, const GrB_BinaryOp dup); -GrB_Info GrB_Vector_build_UINT64(GrB_Vector w, const GrB_Index *I, const uint64_t *X, GrB_Index nvals, const GrB_BinaryOp dup); -GrB_Info GrB_Vector_clear(GrB_Vector v); -GrB_Info GrB_Vector_dup(GrB_Vector *w, const GrB_Vector u); -GrB_Info GrB_Vector_eWiseAdd_BinaryOp(GrB_Vector w, const GrB_Vector mask, const GrB_BinaryOp accum, const GrB_BinaryOp add, const GrB_Vector u, const GrB_Vector v, const GrB_Descriptor desc); -GrB_Info GrB_Vector_eWiseAdd_Monoid(GrB_Vector w, const GrB_Vector mask, const GrB_BinaryOp accum, const GrB_Monoid monoid, const GrB_Vector u, const GrB_Vector v, const GrB_Descriptor desc); -GrB_Info GrB_Vector_eWiseAdd_Semiring(GrB_Vector w, const GrB_Vector mask, const GrB_BinaryOp accum, const GrB_Semiring semiring, const GrB_Vector u, const GrB_Vector v, const GrB_Descriptor desc); -GrB_Info GrB_Vector_eWiseMult_BinaryOp(GrB_Vector w, const GrB_Vector mask, const GrB_BinaryOp accum, const GrB_BinaryOp mult, const GrB_Vector u, const GrB_Vector v, const GrB_Descriptor desc); -GrB_Info GrB_Vector_eWiseMult_Monoid(GrB_Vector w, const GrB_Vector mask, const GrB_BinaryOp accum, const GrB_Monoid monoid, const GrB_Vector u, const GrB_Vector v, const GrB_Descriptor desc); -GrB_Info GrB_Vector_eWiseMult_Semiring(GrB_Vector w, const GrB_Vector mask, const GrB_BinaryOp accum, const GrB_Semiring semiring, const GrB_Vector u, const GrB_Vector v, const GrB_Descriptor desc); -GrB_Info GrB_Vector_error(const char **error, const GrB_Vector v); -GrB_Info GrB_Vector_extract(GrB_Vector w, const GrB_Vector mask, const GrB_BinaryOp accum, const GrB_Vector u, const GrB_Index *I, GrB_Index ni, const GrB_Descriptor desc); -GrB_Info GrB_Vector_extractElement_BOOL(bool *x, const GrB_Vector v, GrB_Index i); -GrB_Info GrB_Vector_extractElement_FP32(float *x, const GrB_Vector v, GrB_Index i); -GrB_Info GrB_Vector_extractElement_FP64(double *x, const GrB_Vector v, GrB_Index i); -GrB_Info GrB_Vector_extractElement_INT8(int8_t *x, const GrB_Vector v, GrB_Index i); -GrB_Info GrB_Vector_extractElement_INT16(int16_t *x, const GrB_Vector v, GrB_Index i); -GrB_Info GrB_Vector_extractElement_INT32(int32_t *x, const GrB_Vector v, GrB_Index i); -GrB_Info GrB_Vector_extractElement_INT64(int64_t *x, const GrB_Vector v, GrB_Index i); -GrB_Info GrB_Vector_extractElement_Scalar(GrB_Scalar x, const GrB_Vector v, GrB_Index i); -GrB_Info GrB_Vector_extractElement_UDT(void *x, const GrB_Vector v, GrB_Index i); -GrB_Info GrB_Vector_extractElement_UINT8(uint8_t *x, const GrB_Vector v, GrB_Index i); -GrB_Info GrB_Vector_extractElement_UINT16(uint16_t *x, const GrB_Vector v, GrB_Index i); -GrB_Info GrB_Vector_extractElement_UINT32(uint32_t *x, const GrB_Vector v, GrB_Index i); -GrB_Info GrB_Vector_extractElement_UINT64(uint64_t *x, const GrB_Vector v, GrB_Index i); -GrB_Info GrB_Vector_extractTuples_BOOL(GrB_Index *I, bool *X, GrB_Index *nvals, const GrB_Vector v); -GrB_Info GrB_Vector_extractTuples_FP32(GrB_Index *I, float *X, GrB_Index *nvals, const GrB_Vector v); -GrB_Info GrB_Vector_extractTuples_FP64(GrB_Index *I, double *X, GrB_Index *nvals, const GrB_Vector v); -GrB_Info GrB_Vector_extractTuples_INT8(GrB_Index *I, int8_t *X, GrB_Index *nvals, const GrB_Vector v); -GrB_Info GrB_Vector_extractTuples_INT16(GrB_Index *I, int16_t *X, GrB_Index *nvals, const GrB_Vector v); -GrB_Info GrB_Vector_extractTuples_INT32(GrB_Index *I, int32_t *X, GrB_Index *nvals, const GrB_Vector v); -GrB_Info GrB_Vector_extractTuples_INT64(GrB_Index *I, int64_t *X, GrB_Index *nvals, const GrB_Vector v); -GrB_Info GrB_Vector_extractTuples_UDT(GrB_Index *I, void *X, GrB_Index *nvals, const GrB_Vector v); -GrB_Info GrB_Vector_extractTuples_UINT8(GrB_Index *I, uint8_t *X, GrB_Index *nvals, const GrB_Vector v); -GrB_Info GrB_Vector_extractTuples_UINT16(GrB_Index *I, uint16_t *X, GrB_Index *nvals, const GrB_Vector v); -GrB_Info GrB_Vector_extractTuples_UINT32(GrB_Index *I, uint32_t *X, GrB_Index *nvals, const GrB_Vector v); -GrB_Info GrB_Vector_extractTuples_UINT64(GrB_Index *I, uint64_t *X, GrB_Index *nvals, const GrB_Vector v); -GrB_Info GrB_Vector_free(GrB_Vector *v); -GrB_Info GrB_Vector_new(GrB_Vector *v, GrB_Type type, GrB_Index n); -GrB_Info GrB_Vector_nvals(GrB_Index *nvals, const GrB_Vector v); -GrB_Info GrB_Vector_reduce_BOOL(bool *c, const GrB_BinaryOp accum, const GrB_Monoid monoid, const GrB_Vector u, const GrB_Descriptor desc); -GrB_Info GrB_Vector_reduce_BinaryOp_Scalar(GrB_Scalar c, const GrB_BinaryOp accum, const GrB_BinaryOp op, const GrB_Vector u, const GrB_Descriptor desc); -GrB_Info GrB_Vector_reduce_FP32(float *c, const GrB_BinaryOp accum, const GrB_Monoid monoid, const GrB_Vector u, const GrB_Descriptor desc); -GrB_Info GrB_Vector_reduce_FP64(double *c, const GrB_BinaryOp accum, const GrB_Monoid monoid, const GrB_Vector u, const GrB_Descriptor desc); -GrB_Info GrB_Vector_reduce_INT8(int8_t *c, const GrB_BinaryOp accum, const GrB_Monoid monoid, const GrB_Vector u, const GrB_Descriptor desc); -GrB_Info GrB_Vector_reduce_INT16(int16_t *c, const GrB_BinaryOp accum, const GrB_Monoid monoid, const GrB_Vector u, const GrB_Descriptor desc); -GrB_Info GrB_Vector_reduce_INT32(int32_t *c, const GrB_BinaryOp accum, const GrB_Monoid monoid, const GrB_Vector u, const GrB_Descriptor desc); -GrB_Info GrB_Vector_reduce_INT64(int64_t *c, const GrB_BinaryOp accum, const GrB_Monoid monoid, const GrB_Vector u, const GrB_Descriptor desc); -GrB_Info GrB_Vector_reduce_Monoid_Scalar(GrB_Scalar c, const GrB_BinaryOp accum, const GrB_Monoid monoid, const GrB_Vector u, const GrB_Descriptor desc); -GrB_Info GrB_Vector_reduce_UDT(void *c, const GrB_BinaryOp accum, const GrB_Monoid monoid, const GrB_Vector u, const GrB_Descriptor desc); -GrB_Info GrB_Vector_reduce_UINT8(uint8_t *c, const GrB_BinaryOp accum, const GrB_Monoid monoid, const GrB_Vector u, const GrB_Descriptor desc); -GrB_Info GrB_Vector_reduce_UINT16(uint16_t *c, const GrB_BinaryOp accum, const GrB_Monoid monoid, const GrB_Vector u, const GrB_Descriptor desc); -GrB_Info GrB_Vector_reduce_UINT32(uint32_t *c, const GrB_BinaryOp accum, const GrB_Monoid monoid, const GrB_Vector u, const GrB_Descriptor desc); -GrB_Info GrB_Vector_reduce_UINT64(uint64_t *c, const GrB_BinaryOp accum, const GrB_Monoid monoid, const GrB_Vector u, const GrB_Descriptor desc); -GrB_Info GrB_Vector_removeElement(GrB_Vector v, GrB_Index i); -GrB_Info GrB_Vector_resize(GrB_Vector w, GrB_Index nrows_new); -GrB_Info GrB_Vector_select_BOOL(GrB_Vector w, const GrB_Vector mask, const GrB_BinaryOp accum, const GrB_IndexUnaryOp op, const GrB_Vector u, bool y, const GrB_Descriptor desc); -GrB_Info GrB_Vector_select_FP32(GrB_Vector w, const GrB_Vector mask, const GrB_BinaryOp accum, const GrB_IndexUnaryOp op, const GrB_Vector u, float y, const GrB_Descriptor desc); -GrB_Info GrB_Vector_select_FP64(GrB_Vector w, const GrB_Vector mask, const GrB_BinaryOp accum, const GrB_IndexUnaryOp op, const GrB_Vector u, double y, const GrB_Descriptor desc); -GrB_Info GrB_Vector_select_INT8(GrB_Vector w, const GrB_Vector mask, const GrB_BinaryOp accum, const GrB_IndexUnaryOp op, const GrB_Vector u, int8_t y, const GrB_Descriptor desc); -GrB_Info GrB_Vector_select_INT16(GrB_Vector w, const GrB_Vector mask, const GrB_BinaryOp accum, const GrB_IndexUnaryOp op, const GrB_Vector u, int16_t y, const GrB_Descriptor desc); -GrB_Info GrB_Vector_select_INT32(GrB_Vector w, const GrB_Vector mask, const GrB_BinaryOp accum, const GrB_IndexUnaryOp op, const GrB_Vector u, int32_t y, const GrB_Descriptor desc); -GrB_Info GrB_Vector_select_INT64(GrB_Vector w, const GrB_Vector mask, const GrB_BinaryOp accum, const GrB_IndexUnaryOp op, const GrB_Vector u, int64_t y, const GrB_Descriptor desc); -GrB_Info GrB_Vector_select_Scalar(GrB_Vector w, const GrB_Vector mask, const GrB_BinaryOp accum, const GrB_IndexUnaryOp op, const GrB_Vector u, const GrB_Scalar y, const GrB_Descriptor desc); -GrB_Info GrB_Vector_select_UDT(GrB_Vector w, const GrB_Vector mask, const GrB_BinaryOp accum, const GrB_IndexUnaryOp op, const GrB_Vector u, const void *y, const GrB_Descriptor desc); -GrB_Info GrB_Vector_select_UINT8(GrB_Vector w, const GrB_Vector mask, const GrB_BinaryOp accum, const GrB_IndexUnaryOp op, const GrB_Vector u, uint8_t y, const GrB_Descriptor desc); -GrB_Info GrB_Vector_select_UINT16(GrB_Vector w, const GrB_Vector mask, const GrB_BinaryOp accum, const GrB_IndexUnaryOp op, const GrB_Vector u, uint16_t y, const GrB_Descriptor desc); -GrB_Info GrB_Vector_select_UINT32(GrB_Vector w, const GrB_Vector mask, const GrB_BinaryOp accum, const GrB_IndexUnaryOp op, const GrB_Vector u, uint32_t y, const GrB_Descriptor desc); -GrB_Info GrB_Vector_select_UINT64(GrB_Vector w, const GrB_Vector mask, const GrB_BinaryOp accum, const GrB_IndexUnaryOp op, const GrB_Vector u, uint64_t y, const GrB_Descriptor desc); -GrB_Info GrB_Vector_setElement_BOOL(GrB_Vector w, bool x, GrB_Index i); -GrB_Info GrB_Vector_setElement_FP32(GrB_Vector w, float x, GrB_Index i); -GrB_Info GrB_Vector_setElement_FP64(GrB_Vector w, double x, GrB_Index i); -GrB_Info GrB_Vector_setElement_INT8(GrB_Vector w, int8_t x, GrB_Index i); -GrB_Info GrB_Vector_setElement_INT16(GrB_Vector w, int16_t x, GrB_Index i); -GrB_Info GrB_Vector_setElement_INT32(GrB_Vector w, int32_t x, GrB_Index i); -GrB_Info GrB_Vector_setElement_INT64(GrB_Vector w, int64_t x, GrB_Index i); -GrB_Info GrB_Vector_setElement_Scalar(GrB_Vector w, GrB_Scalar x, GrB_Index i); -GrB_Info GrB_Vector_setElement_UDT(GrB_Vector w, void *x, GrB_Index i); -GrB_Info GrB_Vector_setElement_UINT8(GrB_Vector w, uint8_t x, GrB_Index i); -GrB_Info GrB_Vector_setElement_UINT16(GrB_Vector w, uint16_t x, GrB_Index i); -GrB_Info GrB_Vector_setElement_UINT32(GrB_Vector w, uint32_t x, GrB_Index i); -GrB_Info GrB_Vector_setElement_UINT64(GrB_Vector w, uint64_t x, GrB_Index i); -GrB_Info GrB_Vector_size(GrB_Index *n, const GrB_Vector v); -GrB_Info GrB_Vector_wait(GrB_Vector v, GrB_WaitMode waitmode); - -/*************** -* GB functions * -***************/ - -/* binary */ -GrB_Info GB_BinaryOp_new(GrB_BinaryOp *binaryop, GxB_binary_function function, GrB_Type ztype, GrB_Type xtype, GrB_Type ytype, const char *binop_name); - -/* iterator */ -GrB_Info GB_Iterator_rc_bitmap_next(GxB_Iterator iterator); -GrB_Info GB_Iterator_rc_seek(GxB_Iterator iterator, GrB_Index j, bool jth_vector); -GrB_Info GB_Vector_Iterator_bitmap_seek(GxB_Iterator iterator, GrB_Index unused); - -/* matrix */ -GrB_Info GB_Iterator_attach(GxB_Iterator iterator, GrB_Matrix A, GxB_Format_Value format, GrB_Descriptor desc); - -/* selectop */ -GrB_Info GB_SelectOp_new(GxB_SelectOp *selectop, GxB_select_function function, GrB_Type xtype, GrB_Type ttype, const char *name); - -/* type */ -GrB_Info GB_Type_new(GrB_Type *type, size_t sizeof_ctype, const char *type_name); - -/* unary */ -GrB_Info GB_UnaryOp_new(GrB_UnaryOp *unaryop, GxB_unary_function function, GrB_Type ztype, GrB_Type xtype, const char *unop_name); - -/**************** -* GxB functions * -****************/ - -/* binary */ -GrB_Info GxB_BinaryOp_fprint(GrB_BinaryOp binaryop, const char *name, GxB_Print_Level pr, FILE *f); -GrB_Info GxB_BinaryOp_new(GrB_BinaryOp *op, GxB_binary_function function, GrB_Type ztype, GrB_Type xtype, GrB_Type ytype, const char *binop_name, const char *binop_defn); -GrB_Info GxB_BinaryOp_xtype(GrB_Type *xtype, GrB_BinaryOp binaryop); -GrB_Info GxB_BinaryOp_xtype_name(char *type_name, const GrB_BinaryOp binaryop); -GrB_Info GxB_BinaryOp_ytype(GrB_Type *ytype, GrB_BinaryOp binaryop); -GrB_Info GxB_BinaryOp_ytype_name(char *type_name, const GrB_BinaryOp binaryop); -GrB_Info GxB_BinaryOp_ztype(GrB_Type *ztype, GrB_BinaryOp binaryop); -GrB_Info GxB_BinaryOp_ztype_name(char *type_name, const GrB_BinaryOp binaryop); - -/* core */ -GrB_Info GxB_Global_Option_get(GxB_Option_Field field, ...); -GrB_Info GxB_Global_Option_get_CHAR(GxB_Option_Field field, char **value); -GrB_Info GxB_Global_Option_get_FP64(GxB_Option_Field field, double *value); -GrB_Info GxB_Global_Option_get_FUNCTION(GxB_Option_Field field, void **value); -GrB_Info GxB_Global_Option_get_INT32(GxB_Option_Field field, int32_t *value); -GrB_Info GxB_Global_Option_get_INT64(GxB_Option_Field field, int64_t *value); -GrB_Info GxB_Global_Option_set(GxB_Option_Field field, ...); -GrB_Info GxB_Global_Option_set_FP64(GxB_Option_Field field, double value); -GrB_Info GxB_Global_Option_set_FP64_ARRAY(GxB_Option_Field field, double *value); -GrB_Info GxB_Global_Option_set_FUNCTION(GxB_Option_Field field, void *value); -GrB_Info GxB_Global_Option_set_INT32(GxB_Option_Field field, int32_t value); -GrB_Info GxB_Global_Option_set_INT64_ARRAY(GxB_Option_Field field, int64_t *value); -GrB_Info GxB_deserialize_type_name(char *type_name, const void *blob, GrB_Index blob_size); -GrB_Info GxB_init(GrB_Mode mode, void *(*user_malloc_function)(size_t), void *(*user_calloc_function)(size_t, size_t), void *(*user_realloc_function)(void *, size_t), void (*user_free_function)(void *)); - -/* descriptor */ -GrB_Info GxB_Desc_get(GrB_Descriptor desc, GrB_Desc_Field field, ...); -GrB_Info GxB_Desc_get_FP64(GrB_Descriptor desc, GrB_Desc_Field field, double *value); -GrB_Info GxB_Desc_get_INT32(GrB_Descriptor desc, GrB_Desc_Field field, int32_t *value); -GrB_Info GxB_Desc_set(GrB_Descriptor desc, GrB_Desc_Field field, ...); -GrB_Info GxB_Desc_set_FP64(GrB_Descriptor desc, GrB_Desc_Field field, double value); -GrB_Info GxB_Desc_set_INT32(GrB_Descriptor desc, GrB_Desc_Field field, int32_t value); -GrB_Info GxB_Descriptor_fprint(GrB_Descriptor descriptor, const char *name, GxB_Print_Level pr, FILE *f); -GrB_Info GxB_Descriptor_get(GrB_Desc_Value *val, GrB_Descriptor desc, GrB_Desc_Field field); - -/* indexunary */ -GrB_Info GxB_IndexUnaryOp_fprint(GrB_IndexUnaryOp op, const char *name, GxB_Print_Level pr, FILE *f); -GrB_Info GxB_IndexUnaryOp_new(GrB_IndexUnaryOp *op, GxB_index_unary_function function, GrB_Type ztype, GrB_Type xtype, GrB_Type ytype, const char *idxop_name, const char *idxop_defn); -GrB_Info GxB_IndexUnaryOp_xtype_name(char *type_name, const GrB_IndexUnaryOp op); -GrB_Info GxB_IndexUnaryOp_ytype_name(char *type_name, const GrB_IndexUnaryOp op); -GrB_Info GxB_IndexUnaryOp_ztype_name(char *type_name, const GrB_IndexUnaryOp op); - -/* iterator */ -GrB_Index GxB_Matrix_Iterator_getp(GxB_Iterator iterator); -GrB_Index GxB_Matrix_Iterator_getpmax(GxB_Iterator iterator); -GrB_Index GxB_Vector_Iterator_getIndex(GxB_Iterator iterator); -GrB_Index GxB_Vector_Iterator_getp(GxB_Iterator iterator); -GrB_Index GxB_Vector_Iterator_getpmax(GxB_Iterator iterator); -GrB_Index GxB_colIterator_getColIndex(GxB_Iterator iterator); -GrB_Index GxB_colIterator_getRowIndex(GxB_Iterator iterator); -GrB_Index GxB_colIterator_kount(GxB_Iterator iterator); -GrB_Index GxB_rowIterator_getColIndex(GxB_Iterator iterator); -GrB_Index GxB_rowIterator_getRowIndex(GxB_Iterator iterator); -GrB_Index GxB_rowIterator_kount(GxB_Iterator iterator); -GrB_Info GxB_Iterator_free(GxB_Iterator *iterator); -GrB_Info GxB_Iterator_new(GxB_Iterator *iterator); -GrB_Info GxB_Matrix_Iterator_next(GxB_Iterator iterator); -GrB_Info GxB_Matrix_Iterator_seek(GxB_Iterator iterator, GrB_Index p); -GrB_Info GxB_Vector_Iterator_next(GxB_Iterator iterator); -GrB_Info GxB_Vector_Iterator_seek(GxB_Iterator iterator, GrB_Index p); -GrB_Info GxB_colIterator_kseek(GxB_Iterator iterator, GrB_Index k); -GrB_Info GxB_colIterator_nextCol(GxB_Iterator iterator); -GrB_Info GxB_colIterator_nextRow(GxB_Iterator iterator); -GrB_Info GxB_colIterator_seekCol(GxB_Iterator iterator, GrB_Index col); -GrB_Info GxB_rowIterator_kseek(GxB_Iterator iterator, GrB_Index k); -GrB_Info GxB_rowIterator_nextCol(GxB_Iterator iterator); -GrB_Info GxB_rowIterator_nextRow(GxB_Iterator iterator); -GrB_Info GxB_rowIterator_seekRow(GxB_Iterator iterator, GrB_Index row); -GxB_FC32_t GxB_Iterator_get_FC32(GxB_Iterator iterator); -GxB_FC64_t GxB_Iterator_get_FC64(GxB_Iterator iterator); -bool GxB_Iterator_get_BOOL(GxB_Iterator iterator); -double GxB_Iterator_get_FP64(GxB_Iterator iterator); -float GxB_Iterator_get_FP32(GxB_Iterator iterator); -int8_t GxB_Iterator_get_INT8(GxB_Iterator iterator); -int16_t GxB_Iterator_get_INT16(GxB_Iterator iterator); -int32_t GxB_Iterator_get_INT32(GxB_Iterator iterator); -int64_t GxB_Iterator_get_INT64(GxB_Iterator iterator); -uint8_t GxB_Iterator_get_UINT8(GxB_Iterator iterator); -uint16_t GxB_Iterator_get_UINT16(GxB_Iterator iterator); -uint32_t GxB_Iterator_get_UINT32(GxB_Iterator iterator); -uint64_t GxB_Iterator_get_UINT64(GxB_Iterator iterator); -void GxB_Iterator_get_UDT(GxB_Iterator iterator, void *value); -void GxB_Matrix_Iterator_getIndex(GxB_Iterator iterator, GrB_Index *row, GrB_Index *col); - -/* matrix */ -GrB_Info GxB_Col_subassign(GrB_Matrix C, const GrB_Vector mask, const GrB_BinaryOp accum, const GrB_Vector u, const GrB_Index *I, GrB_Index ni, GrB_Index j, const GrB_Descriptor desc); -GrB_Info GxB_Matrix_Iterator_attach(GxB_Iterator iterator, GrB_Matrix A, GrB_Descriptor desc); -GrB_Info GxB_Matrix_Option_get(GrB_Matrix A, GxB_Option_Field field, ...); -GrB_Info GxB_Matrix_Option_get_FP64(GrB_Matrix A, GxB_Option_Field field, double *value); -GrB_Info GxB_Matrix_Option_get_INT32(GrB_Matrix A, GxB_Option_Field field, int32_t *value); -GrB_Info GxB_Matrix_Option_set(GrB_Matrix A, GxB_Option_Field field, ...); -GrB_Info GxB_Matrix_Option_set_FP64(GrB_Matrix A, GxB_Option_Field field, double value); -GrB_Info GxB_Matrix_Option_set_INT32(GrB_Matrix A, GxB_Option_Field field, int32_t value); -GrB_Info GxB_Matrix_apply_BinaryOp1st(GrB_Matrix C, const GrB_Matrix Mask, const GrB_BinaryOp accum, const GrB_BinaryOp op, const GrB_Scalar x, const GrB_Matrix A, const GrB_Descriptor desc); -GrB_Info GxB_Matrix_apply_BinaryOp1st_FC32(GrB_Matrix C, const GrB_Matrix Mask, const GrB_BinaryOp accum, const GrB_BinaryOp op, GxB_FC32_t x, const GrB_Matrix A, const GrB_Descriptor desc); -GrB_Info GxB_Matrix_apply_BinaryOp1st_FC64(GrB_Matrix C, const GrB_Matrix Mask, const GrB_BinaryOp accum, const GrB_BinaryOp op, GxB_FC64_t x, const GrB_Matrix A, const GrB_Descriptor desc); -GrB_Info GxB_Matrix_apply_BinaryOp2nd(GrB_Matrix C, const GrB_Matrix Mask, const GrB_BinaryOp accum, const GrB_BinaryOp op, const GrB_Matrix A, const GrB_Scalar y, const GrB_Descriptor desc); -GrB_Info GxB_Matrix_apply_BinaryOp2nd_FC32(GrB_Matrix C, const GrB_Matrix Mask, const GrB_BinaryOp accum, const GrB_BinaryOp op, const GrB_Matrix A, GxB_FC32_t y, const GrB_Descriptor desc); -GrB_Info GxB_Matrix_apply_BinaryOp2nd_FC64(GrB_Matrix C, const GrB_Matrix Mask, const GrB_BinaryOp accum, const GrB_BinaryOp op, const GrB_Matrix A, GxB_FC64_t y, const GrB_Descriptor desc); -GrB_Info GxB_Matrix_apply_IndexOp_FC32(GrB_Matrix C, const GrB_Matrix Mask, const GrB_BinaryOp accum, const GrB_IndexUnaryOp op, const GrB_Matrix A, GxB_FC32_t y, const GrB_Descriptor desc); -GrB_Info GxB_Matrix_apply_IndexOp_FC64(GrB_Matrix C, const GrB_Matrix Mask, const GrB_BinaryOp accum, const GrB_IndexUnaryOp op, const GrB_Matrix A, GxB_FC64_t y, const GrB_Descriptor desc); -GrB_Info GxB_Matrix_assign_FC32(GrB_Matrix C, const GrB_Matrix Mask, const GrB_BinaryOp accum, GxB_FC32_t x, const GrB_Index *I, GrB_Index ni, const GrB_Index *J, GrB_Index nj, const GrB_Descriptor desc); -GrB_Info GxB_Matrix_assign_FC64(GrB_Matrix C, const GrB_Matrix Mask, const GrB_BinaryOp accum, GxB_FC64_t x, const GrB_Index *I, GrB_Index ni, const GrB_Index *J, GrB_Index nj, const GrB_Descriptor desc); -GrB_Info GxB_Matrix_build_FC32(GrB_Matrix C, const GrB_Index *I, const GrB_Index *J, const GxB_FC32_t *X, GrB_Index nvals, const GrB_BinaryOp dup); -GrB_Info GxB_Matrix_build_FC64(GrB_Matrix C, const GrB_Index *I, const GrB_Index *J, const GxB_FC64_t *X, GrB_Index nvals, const GrB_BinaryOp dup); -GrB_Info GxB_Matrix_build_Scalar(GrB_Matrix C, const GrB_Index *I, const GrB_Index *J, GrB_Scalar scalar, GrB_Index nvals); -GrB_Info GxB_Matrix_concat(GrB_Matrix C, const GrB_Matrix *Tiles, const GrB_Index m, const GrB_Index n, const GrB_Descriptor desc); -GrB_Info GxB_Matrix_deserialize(GrB_Matrix *C, GrB_Type type, const void *blob, GrB_Index blob_size, const GrB_Descriptor desc); -GrB_Info GxB_Matrix_diag(GrB_Matrix C, const GrB_Vector v, int64_t k, const GrB_Descriptor desc); -GrB_Info GxB_Matrix_eWiseUnion(GrB_Matrix C, const GrB_Matrix Mask, const GrB_BinaryOp accum, const GrB_BinaryOp add, const GrB_Matrix A, const GrB_Scalar alpha, const GrB_Matrix B, const GrB_Scalar beta, const GrB_Descriptor desc); -GrB_Info GxB_Matrix_export_BitmapC(GrB_Matrix *A, GrB_Type *type, GrB_Index *nrows, GrB_Index *ncols, int8_t **Ab, void **Ax, GrB_Index *Ab_size, GrB_Index *Ax_size, bool *iso, GrB_Index *nvals, const GrB_Descriptor desc); -GrB_Info GxB_Matrix_export_BitmapR(GrB_Matrix *A, GrB_Type *type, GrB_Index *nrows, GrB_Index *ncols, int8_t **Ab, void **Ax, GrB_Index *Ab_size, GrB_Index *Ax_size, bool *iso, GrB_Index *nvals, const GrB_Descriptor desc); -GrB_Info GxB_Matrix_export_CSC(GrB_Matrix *A, GrB_Type *type, GrB_Index *nrows, GrB_Index *ncols, GrB_Index **Ap, GrB_Index **Ai, void **Ax, GrB_Index *Ap_size, GrB_Index *Ai_size, GrB_Index *Ax_size, bool *iso, bool *jumbled, const GrB_Descriptor desc); -GrB_Info GxB_Matrix_export_CSR(GrB_Matrix *A, GrB_Type *type, GrB_Index *nrows, GrB_Index *ncols, GrB_Index **Ap, GrB_Index **Aj, void **Ax, GrB_Index *Ap_size, GrB_Index *Aj_size, GrB_Index *Ax_size, bool *iso, bool *jumbled, const GrB_Descriptor desc); -GrB_Info GxB_Matrix_export_FC32(GrB_Index *Ap, GrB_Index *Ai, GxB_FC32_t *Ax, GrB_Index *Ap_len, GrB_Index *Ai_len, GrB_Index *Ax_len, GrB_Format format, GrB_Matrix A); -GrB_Info GxB_Matrix_export_FC64(GrB_Index *Ap, GrB_Index *Ai, GxB_FC64_t *Ax, GrB_Index *Ap_len, GrB_Index *Ai_len, GrB_Index *Ax_len, GrB_Format format, GrB_Matrix A); -GrB_Info GxB_Matrix_export_FullC(GrB_Matrix *A, GrB_Type *type, GrB_Index *nrows, GrB_Index *ncols, void **Ax, GrB_Index *Ax_size, bool *iso, const GrB_Descriptor desc); -GrB_Info GxB_Matrix_export_FullR(GrB_Matrix *A, GrB_Type *type, GrB_Index *nrows, GrB_Index *ncols, void **Ax, GrB_Index *Ax_size, bool *iso, const GrB_Descriptor desc); -GrB_Info GxB_Matrix_export_HyperCSC(GrB_Matrix *A, GrB_Type *type, GrB_Index *nrows, GrB_Index *ncols, GrB_Index **Ap, GrB_Index **Ah, GrB_Index **Ai, void **Ax, GrB_Index *Ap_size, GrB_Index *Ah_size, GrB_Index *Ai_size, GrB_Index *Ax_size, bool *iso, GrB_Index *nvec, bool *jumbled, const GrB_Descriptor desc); -GrB_Info GxB_Matrix_export_HyperCSR(GrB_Matrix *A, GrB_Type *type, GrB_Index *nrows, GrB_Index *ncols, GrB_Index **Ap, GrB_Index **Ah, GrB_Index **Aj, void **Ax, GrB_Index *Ap_size, GrB_Index *Ah_size, GrB_Index *Aj_size, GrB_Index *Ax_size, bool *iso, GrB_Index *nvec, bool *jumbled, const GrB_Descriptor desc); -GrB_Info GxB_Matrix_extractElement_FC32(GxB_FC32_t *x, const GrB_Matrix A, GrB_Index i, GrB_Index j); -GrB_Info GxB_Matrix_extractElement_FC64(GxB_FC64_t *x, const GrB_Matrix A, GrB_Index i, GrB_Index j); -GrB_Info GxB_Matrix_extractTuples_FC32(GrB_Index *I, GrB_Index *J, GxB_FC32_t *X, GrB_Index *nvals, const GrB_Matrix A); -GrB_Info GxB_Matrix_extractTuples_FC64(GrB_Index *I, GrB_Index *J, GxB_FC64_t *X, GrB_Index *nvals, const GrB_Matrix A); -GrB_Info GxB_Matrix_fprint(GrB_Matrix A, const char *name, GxB_Print_Level pr, FILE *f); -GrB_Info GxB_Matrix_import_BitmapC(GrB_Matrix *A, GrB_Type type, GrB_Index nrows, GrB_Index ncols, int8_t **Ab, void **Ax, GrB_Index Ab_size, GrB_Index Ax_size, bool iso, GrB_Index nvals, const GrB_Descriptor desc); -GrB_Info GxB_Matrix_import_BitmapR(GrB_Matrix *A, GrB_Type type, GrB_Index nrows, GrB_Index ncols, int8_t **Ab, void **Ax, GrB_Index Ab_size, GrB_Index Ax_size, bool iso, GrB_Index nvals, const GrB_Descriptor desc); -GrB_Info GxB_Matrix_import_CSC(GrB_Matrix *A, GrB_Type type, GrB_Index nrows, GrB_Index ncols, GrB_Index **Ap, GrB_Index **Ai, void **Ax, GrB_Index Ap_size, GrB_Index Ai_size, GrB_Index Ax_size, bool iso, bool jumbled, const GrB_Descriptor desc); -GrB_Info GxB_Matrix_import_CSR(GrB_Matrix *A, GrB_Type type, GrB_Index nrows, GrB_Index ncols, GrB_Index **Ap, GrB_Index **Aj, void **Ax, GrB_Index Ap_size, GrB_Index Aj_size, GrB_Index Ax_size, bool iso, bool jumbled, const GrB_Descriptor desc); -GrB_Info GxB_Matrix_import_FC32(GrB_Matrix *A, GrB_Type type, GrB_Index nrows, GrB_Index ncols, const GrB_Index *Ap, const GrB_Index *Ai, const GxB_FC32_t *Ax, GrB_Index Ap_len, GrB_Index Ai_len, GrB_Index Ax_len, GrB_Format format); -GrB_Info GxB_Matrix_import_FC64(GrB_Matrix *A, GrB_Type type, GrB_Index nrows, GrB_Index ncols, const GrB_Index *Ap, const GrB_Index *Ai, const GxB_FC64_t *Ax, GrB_Index Ap_len, GrB_Index Ai_len, GrB_Index Ax_len, GrB_Format format); -GrB_Info GxB_Matrix_import_FullC(GrB_Matrix *A, GrB_Type type, GrB_Index nrows, GrB_Index ncols, void **Ax, GrB_Index Ax_size, bool iso, const GrB_Descriptor desc); -GrB_Info GxB_Matrix_import_FullR(GrB_Matrix *A, GrB_Type type, GrB_Index nrows, GrB_Index ncols, void **Ax, GrB_Index Ax_size, bool iso, const GrB_Descriptor desc); -GrB_Info GxB_Matrix_import_HyperCSC(GrB_Matrix *A, GrB_Type type, GrB_Index nrows, GrB_Index ncols, GrB_Index **Ap, GrB_Index **Ah, GrB_Index **Ai, void **Ax, GrB_Index Ap_size, GrB_Index Ah_size, GrB_Index Ai_size, GrB_Index Ax_size, bool iso, GrB_Index nvec, bool jumbled, const GrB_Descriptor desc); -GrB_Info GxB_Matrix_import_HyperCSR(GrB_Matrix *A, GrB_Type type, GrB_Index nrows, GrB_Index ncols, GrB_Index **Ap, GrB_Index **Ah, GrB_Index **Aj, void **Ax, GrB_Index Ap_size, GrB_Index Ah_size, GrB_Index Aj_size, GrB_Index Ax_size, bool iso, GrB_Index nvec, bool jumbled, const GrB_Descriptor desc); -GrB_Info GxB_Matrix_isStoredElement(const GrB_Matrix A, GrB_Index i, GrB_Index j); -GrB_Info GxB_Matrix_iso(bool *iso, const GrB_Matrix A); -GrB_Info GxB_Matrix_memoryUsage(size_t *size, const GrB_Matrix A); -GrB_Info GxB_Matrix_pack_BitmapC(GrB_Matrix A, int8_t **Ab, void **Ax, GrB_Index Ab_size, GrB_Index Ax_size, bool iso, GrB_Index nvals, const GrB_Descriptor desc); -GrB_Info GxB_Matrix_pack_BitmapR(GrB_Matrix A, int8_t **Ab, void **Ax, GrB_Index Ab_size, GrB_Index Ax_size, bool iso, GrB_Index nvals, const GrB_Descriptor desc); -GrB_Info GxB_Matrix_pack_CSC(GrB_Matrix A, GrB_Index **Ap, GrB_Index **Ai, void **Ax, GrB_Index Ap_size, GrB_Index Ai_size, GrB_Index Ax_size, bool iso, bool jumbled, const GrB_Descriptor desc); -GrB_Info GxB_Matrix_pack_CSR(GrB_Matrix A, GrB_Index **Ap, GrB_Index **Aj, void **Ax, GrB_Index Ap_size, GrB_Index Aj_size, GrB_Index Ax_size, bool iso, bool jumbled, const GrB_Descriptor desc); -GrB_Info GxB_Matrix_pack_FullC(GrB_Matrix A, void **Ax, GrB_Index Ax_size, bool iso, const GrB_Descriptor desc); -GrB_Info GxB_Matrix_pack_FullR(GrB_Matrix A, void **Ax, GrB_Index Ax_size, bool iso, const GrB_Descriptor desc); -GrB_Info GxB_Matrix_pack_HyperCSC(GrB_Matrix A, GrB_Index **Ap, GrB_Index **Ah, GrB_Index **Ai, void **Ax, GrB_Index Ap_size, GrB_Index Ah_size, GrB_Index Ai_size, GrB_Index Ax_size, bool iso, GrB_Index nvec, bool jumbled, const GrB_Descriptor desc); -GrB_Info GxB_Matrix_pack_HyperCSR(GrB_Matrix A, GrB_Index **Ap, GrB_Index **Ah, GrB_Index **Aj, void **Ax, GrB_Index Ap_size, GrB_Index Ah_size, GrB_Index Aj_size, GrB_Index Ax_size, bool iso, GrB_Index nvec, bool jumbled, const GrB_Descriptor desc); -GrB_Info GxB_Matrix_reduce_FC32(GxB_FC32_t *c, const GrB_BinaryOp accum, const GrB_Monoid monoid, const GrB_Matrix A, const GrB_Descriptor desc); -GrB_Info GxB_Matrix_reduce_FC64(GxB_FC64_t *c, const GrB_BinaryOp accum, const GrB_Monoid monoid, const GrB_Matrix A, const GrB_Descriptor desc); -GrB_Info GxB_Matrix_reshape(GrB_Matrix C, bool by_col, GrB_Index nrows_new, GrB_Index ncols_new, const GrB_Descriptor desc); -GrB_Info GxB_Matrix_reshapeDup(GrB_Matrix *C, GrB_Matrix A, bool by_col, GrB_Index nrows_new, GrB_Index ncols_new, const GrB_Descriptor desc); -GrB_Info GxB_Matrix_select(GrB_Matrix C, const GrB_Matrix Mask, const GrB_BinaryOp accum, const GxB_SelectOp op, const GrB_Matrix A, const GrB_Scalar Thunk, const GrB_Descriptor desc); -GrB_Info GxB_Matrix_select_FC32(GrB_Matrix C, const GrB_Matrix Mask, const GrB_BinaryOp accum, const GrB_IndexUnaryOp op, const GrB_Matrix A, GxB_FC32_t y, const GrB_Descriptor desc); -GrB_Info GxB_Matrix_select_FC64(GrB_Matrix C, const GrB_Matrix Mask, const GrB_BinaryOp accum, const GrB_IndexUnaryOp op, const GrB_Matrix A, GxB_FC64_t y, const GrB_Descriptor desc); -GrB_Info GxB_Matrix_serialize(void **blob_handle, GrB_Index *blob_size_handle, GrB_Matrix A, const GrB_Descriptor desc); -GrB_Info GxB_Matrix_setElement_FC32(GrB_Matrix C, GxB_FC32_t x, GrB_Index i, GrB_Index j); -GrB_Info GxB_Matrix_setElement_FC64(GrB_Matrix C, GxB_FC64_t x, GrB_Index i, GrB_Index j); -GrB_Info GxB_Matrix_sort(GrB_Matrix C, GrB_Matrix P, GrB_BinaryOp op, GrB_Matrix A, const GrB_Descriptor desc); -GrB_Info GxB_Matrix_split(GrB_Matrix *Tiles, const GrB_Index m, const GrB_Index n, const GrB_Index *Tile_nrows, const GrB_Index *Tile_ncols, const GrB_Matrix A, const GrB_Descriptor desc); -GrB_Info GxB_Matrix_subassign(GrB_Matrix C, const GrB_Matrix Mask, const GrB_BinaryOp accum, const GrB_Matrix A, const GrB_Index *I, GrB_Index ni, const GrB_Index *J, GrB_Index nj, const GrB_Descriptor desc); -GrB_Info GxB_Matrix_subassign_BOOL(GrB_Matrix C, const GrB_Matrix Mask, const GrB_BinaryOp accum, bool x, const GrB_Index *I, GrB_Index ni, const GrB_Index *J, GrB_Index nj, const GrB_Descriptor desc); -GrB_Info GxB_Matrix_subassign_FC32(GrB_Matrix C, const GrB_Matrix Mask, const GrB_BinaryOp accum, GxB_FC32_t x, const GrB_Index *I, GrB_Index ni, const GrB_Index *J, GrB_Index nj, const GrB_Descriptor desc); -GrB_Info GxB_Matrix_subassign_FC64(GrB_Matrix C, const GrB_Matrix Mask, const GrB_BinaryOp accum, GxB_FC64_t x, const GrB_Index *I, GrB_Index ni, const GrB_Index *J, GrB_Index nj, const GrB_Descriptor desc); -GrB_Info GxB_Matrix_subassign_FP32(GrB_Matrix C, const GrB_Matrix Mask, const GrB_BinaryOp accum, float x, const GrB_Index *I, GrB_Index ni, const GrB_Index *J, GrB_Index nj, const GrB_Descriptor desc); -GrB_Info GxB_Matrix_subassign_FP64(GrB_Matrix C, const GrB_Matrix Mask, const GrB_BinaryOp accum, double x, const GrB_Index *I, GrB_Index ni, const GrB_Index *J, GrB_Index nj, const GrB_Descriptor desc); -GrB_Info GxB_Matrix_subassign_INT8(GrB_Matrix C, const GrB_Matrix Mask, const GrB_BinaryOp accum, int8_t x, const GrB_Index *I, GrB_Index ni, const GrB_Index *J, GrB_Index nj, const GrB_Descriptor desc); -GrB_Info GxB_Matrix_subassign_INT16(GrB_Matrix C, const GrB_Matrix Mask, const GrB_BinaryOp accum, int16_t x, const GrB_Index *I, GrB_Index ni, const GrB_Index *J, GrB_Index nj, const GrB_Descriptor desc); -GrB_Info GxB_Matrix_subassign_INT32(GrB_Matrix C, const GrB_Matrix Mask, const GrB_BinaryOp accum, int32_t x, const GrB_Index *I, GrB_Index ni, const GrB_Index *J, GrB_Index nj, const GrB_Descriptor desc); -GrB_Info GxB_Matrix_subassign_INT64(GrB_Matrix C, const GrB_Matrix Mask, const GrB_BinaryOp accum, int64_t x, const GrB_Index *I, GrB_Index ni, const GrB_Index *J, GrB_Index nj, const GrB_Descriptor desc); -GrB_Info GxB_Matrix_subassign_Scalar(GrB_Matrix C, const GrB_Matrix Mask, const GrB_BinaryOp accum, GrB_Scalar x, const GrB_Index *I, GrB_Index ni, const GrB_Index *J, GrB_Index nj, const GrB_Descriptor desc); -GrB_Info GxB_Matrix_subassign_UDT(GrB_Matrix C, const GrB_Matrix Mask, const GrB_BinaryOp accum, void *x, const GrB_Index *I, GrB_Index ni, const GrB_Index *J, GrB_Index nj, const GrB_Descriptor desc); -GrB_Info GxB_Matrix_subassign_UINT8(GrB_Matrix C, const GrB_Matrix Mask, const GrB_BinaryOp accum, uint8_t x, const GrB_Index *I, GrB_Index ni, const GrB_Index *J, GrB_Index nj, const GrB_Descriptor desc); -GrB_Info GxB_Matrix_subassign_UINT16(GrB_Matrix C, const GrB_Matrix Mask, const GrB_BinaryOp accum, uint16_t x, const GrB_Index *I, GrB_Index ni, const GrB_Index *J, GrB_Index nj, const GrB_Descriptor desc); -GrB_Info GxB_Matrix_subassign_UINT32(GrB_Matrix C, const GrB_Matrix Mask, const GrB_BinaryOp accum, uint32_t x, const GrB_Index *I, GrB_Index ni, const GrB_Index *J, GrB_Index nj, const GrB_Descriptor desc); -GrB_Info GxB_Matrix_subassign_UINT64(GrB_Matrix C, const GrB_Matrix Mask, const GrB_BinaryOp accum, uint64_t x, const GrB_Index *I, GrB_Index ni, const GrB_Index *J, GrB_Index nj, const GrB_Descriptor desc); -GrB_Info GxB_Matrix_type(GrB_Type *type, const GrB_Matrix A); -GrB_Info GxB_Matrix_type_name(char *type_name, const GrB_Matrix A); -GrB_Info GxB_Matrix_unpack_BitmapC(GrB_Matrix A, int8_t **Ab, void **Ax, GrB_Index *Ab_size, GrB_Index *Ax_size, bool *iso, GrB_Index *nvals, const GrB_Descriptor desc); -GrB_Info GxB_Matrix_unpack_BitmapR(GrB_Matrix A, int8_t **Ab, void **Ax, GrB_Index *Ab_size, GrB_Index *Ax_size, bool *iso, GrB_Index *nvals, const GrB_Descriptor desc); -GrB_Info GxB_Matrix_unpack_CSC(GrB_Matrix A, GrB_Index **Ap, GrB_Index **Ai, void **Ax, GrB_Index *Ap_size, GrB_Index *Ai_size, GrB_Index *Ax_size, bool *iso, bool *jumbled, const GrB_Descriptor desc); -GrB_Info GxB_Matrix_unpack_CSR(GrB_Matrix A, GrB_Index **Ap, GrB_Index **Aj, void **Ax, GrB_Index *Ap_size, GrB_Index *Aj_size, GrB_Index *Ax_size, bool *iso, bool *jumbled, const GrB_Descriptor desc); -GrB_Info GxB_Matrix_unpack_FullC(GrB_Matrix A, void **Ax, GrB_Index *Ax_size, bool *iso, const GrB_Descriptor desc); -GrB_Info GxB_Matrix_unpack_FullR(GrB_Matrix A, void **Ax, GrB_Index *Ax_size, bool *iso, const GrB_Descriptor desc); -GrB_Info GxB_Matrix_unpack_HyperCSC(GrB_Matrix A, GrB_Index **Ap, GrB_Index **Ah, GrB_Index **Ai, void **Ax, GrB_Index *Ap_size, GrB_Index *Ah_size, GrB_Index *Ai_size, GrB_Index *Ax_size, bool *iso, GrB_Index *nvec, bool *jumbled, const GrB_Descriptor desc); -GrB_Info GxB_Matrix_unpack_HyperCSR(GrB_Matrix A, GrB_Index **Ap, GrB_Index **Ah, GrB_Index **Aj, void **Ax, GrB_Index *Ap_size, GrB_Index *Ah_size, GrB_Index *Aj_size, GrB_Index *Ax_size, bool *iso, GrB_Index *nvec, bool *jumbled, const GrB_Descriptor desc); -GrB_Info GxB_Row_subassign(GrB_Matrix C, const GrB_Vector mask, const GrB_BinaryOp accum, const GrB_Vector u, GrB_Index i, const GrB_Index *J, GrB_Index nj, const GrB_Descriptor desc); -GrB_Info GxB_Vector_diag(GrB_Vector v, const GrB_Matrix A, int64_t k, const GrB_Descriptor desc); -GrB_Info GxB_colIterator_attach(GxB_Iterator iterator, GrB_Matrix A, GrB_Descriptor desc); -GrB_Info GxB_pack_HyperHash(GrB_Matrix A, GrB_Matrix *Y, const GrB_Descriptor desc); -GrB_Info GxB_rowIterator_attach(GxB_Iterator iterator, GrB_Matrix A, GrB_Descriptor desc); -GrB_Info GxB_unpack_HyperHash(GrB_Matrix A, GrB_Matrix *Y, const GrB_Descriptor desc); - -/* monoid */ -GrB_Info GxB_Monoid_fprint(GrB_Monoid monoid, const char *name, GxB_Print_Level pr, FILE *f); -GrB_Info GxB_Monoid_identity(void *identity, GrB_Monoid monoid); -GrB_Info GxB_Monoid_new_FC32(GrB_Monoid *monoid, GrB_BinaryOp op, GxB_FC32_t identity); -GrB_Info GxB_Monoid_new_FC64(GrB_Monoid *monoid, GrB_BinaryOp op, GxB_FC64_t identity); -GrB_Info GxB_Monoid_operator(GrB_BinaryOp *op, GrB_Monoid monoid); -GrB_Info GxB_Monoid_terminal(bool *has_terminal, void *terminal, GrB_Monoid monoid); -GrB_Info GxB_Monoid_terminal_new_BOOL(GrB_Monoid *monoid, GrB_BinaryOp op, bool identity, bool terminal); -GrB_Info GxB_Monoid_terminal_new_FC32(GrB_Monoid *monoid, GrB_BinaryOp op, GxB_FC32_t identity, GxB_FC32_t terminal); -GrB_Info GxB_Monoid_terminal_new_FC64(GrB_Monoid *monoid, GrB_BinaryOp op, GxB_FC64_t identity, GxB_FC64_t terminal); -GrB_Info GxB_Monoid_terminal_new_FP32(GrB_Monoid *monoid, GrB_BinaryOp op, float identity, float terminal); -GrB_Info GxB_Monoid_terminal_new_FP64(GrB_Monoid *monoid, GrB_BinaryOp op, double identity, double terminal); -GrB_Info GxB_Monoid_terminal_new_INT8(GrB_Monoid *monoid, GrB_BinaryOp op, int8_t identity, int8_t terminal); -GrB_Info GxB_Monoid_terminal_new_INT16(GrB_Monoid *monoid, GrB_BinaryOp op, int16_t identity, int16_t terminal); -GrB_Info GxB_Monoid_terminal_new_INT32(GrB_Monoid *monoid, GrB_BinaryOp op, int32_t identity, int32_t terminal); -GrB_Info GxB_Monoid_terminal_new_INT64(GrB_Monoid *monoid, GrB_BinaryOp op, int64_t identity, int64_t terminal); -GrB_Info GxB_Monoid_terminal_new_UDT(GrB_Monoid *monoid, GrB_BinaryOp op, void *identity, void *terminal); -GrB_Info GxB_Monoid_terminal_new_UINT8(GrB_Monoid *monoid, GrB_BinaryOp op, uint8_t identity, uint8_t terminal); -GrB_Info GxB_Monoid_terminal_new_UINT16(GrB_Monoid *monoid, GrB_BinaryOp op, uint16_t identity, uint16_t terminal); -GrB_Info GxB_Monoid_terminal_new_UINT32(GrB_Monoid *monoid, GrB_BinaryOp op, uint32_t identity, uint32_t terminal); -GrB_Info GxB_Monoid_terminal_new_UINT64(GrB_Monoid *monoid, GrB_BinaryOp op, uint64_t identity, uint64_t terminal); - -/* scalar */ -GrB_Info GxB_Scalar_clear(GrB_Scalar s); -GrB_Info GxB_Scalar_dup(GrB_Scalar *s, const GrB_Scalar t); -GrB_Info GxB_Scalar_error(const char **error, const GrB_Scalar s); -GrB_Info GxB_Scalar_extractElement_BOOL(bool *x, const GrB_Scalar s); -GrB_Info GxB_Scalar_extractElement_FC32(GxB_FC32_t *x, const GrB_Scalar s); -GrB_Info GxB_Scalar_extractElement_FC64(GxB_FC64_t *x, const GrB_Scalar s); -GrB_Info GxB_Scalar_extractElement_FP32(float *x, const GrB_Scalar s); -GrB_Info GxB_Scalar_extractElement_FP64(double *x, const GrB_Scalar s); -GrB_Info GxB_Scalar_extractElement_INT8(int8_t *x, const GrB_Scalar s); -GrB_Info GxB_Scalar_extractElement_INT16(int16_t *x, const GrB_Scalar s); -GrB_Info GxB_Scalar_extractElement_INT32(int32_t *x, const GrB_Scalar s); -GrB_Info GxB_Scalar_extractElement_INT64(int64_t *x, const GrB_Scalar s); -GrB_Info GxB_Scalar_extractElement_UDT(void *x, const GrB_Scalar s); -GrB_Info GxB_Scalar_extractElement_UINT8(uint8_t *x, const GrB_Scalar s); -GrB_Info GxB_Scalar_extractElement_UINT16(uint16_t *x, const GrB_Scalar s); -GrB_Info GxB_Scalar_extractElement_UINT32(uint32_t *x, const GrB_Scalar s); -GrB_Info GxB_Scalar_extractElement_UINT64(uint64_t *x, const GrB_Scalar s); -GrB_Info GxB_Scalar_fprint(GrB_Scalar s, const char *name, GxB_Print_Level pr, FILE *f); -GrB_Info GxB_Scalar_free(GrB_Scalar *s); -GrB_Info GxB_Scalar_memoryUsage(size_t *size, const GrB_Scalar s); -GrB_Info GxB_Scalar_new(GrB_Scalar *s, GrB_Type type); -GrB_Info GxB_Scalar_nvals(GrB_Index *nvals, const GrB_Scalar s); -GrB_Info GxB_Scalar_setElement_BOOL(GrB_Scalar s, bool x); -GrB_Info GxB_Scalar_setElement_FC32(GrB_Scalar s, GxB_FC32_t x); -GrB_Info GxB_Scalar_setElement_FC64(GrB_Scalar s, GxB_FC64_t x); -GrB_Info GxB_Scalar_setElement_FP32(GrB_Scalar s, float x); -GrB_Info GxB_Scalar_setElement_FP64(GrB_Scalar s, double x); -GrB_Info GxB_Scalar_setElement_INT8(GrB_Scalar s, int8_t x); -GrB_Info GxB_Scalar_setElement_INT16(GrB_Scalar s, int16_t x); -GrB_Info GxB_Scalar_setElement_INT32(GrB_Scalar s, int32_t x); -GrB_Info GxB_Scalar_setElement_INT64(GrB_Scalar s, int64_t x); -GrB_Info GxB_Scalar_setElement_UDT(GrB_Scalar s, void *x); -GrB_Info GxB_Scalar_setElement_UINT8(GrB_Scalar s, uint8_t x); -GrB_Info GxB_Scalar_setElement_UINT16(GrB_Scalar s, uint16_t x); -GrB_Info GxB_Scalar_setElement_UINT32(GrB_Scalar s, uint32_t x); -GrB_Info GxB_Scalar_setElement_UINT64(GrB_Scalar s, uint64_t x); -GrB_Info GxB_Scalar_type(GrB_Type *type, const GrB_Scalar s); -GrB_Info GxB_Scalar_type_name(char *type_name, const GrB_Scalar s); -GrB_Info GxB_Scalar_wait(GrB_Scalar *s); - -/* selectop */ -GrB_Info GxB_SelectOp_error(const char **error, const GxB_SelectOp op); -GrB_Info GxB_SelectOp_fprint(GxB_SelectOp selectop, const char *name, GxB_Print_Level pr, FILE *f); -GrB_Info GxB_SelectOp_free(GxB_SelectOp *selectop); -GrB_Info GxB_SelectOp_new(GxB_SelectOp *selectop, GxB_select_function function, GrB_Type xtype, GrB_Type ttype); -GrB_Info GxB_SelectOp_ttype(GrB_Type *ttype, GxB_SelectOp selectop); -GrB_Info GxB_SelectOp_wait(GxB_SelectOp op, GrB_WaitMode waitmode); -GrB_Info GxB_SelectOp_xtype(GrB_Type *xtype, GxB_SelectOp selectop); - -/* semiring */ -GrB_Info GxB_Semiring_add(GrB_Monoid *add, GrB_Semiring semiring); -GrB_Info GxB_Semiring_fprint(GrB_Semiring semiring, const char *name, GxB_Print_Level pr, FILE *f); -GrB_Info GxB_Semiring_multiply(GrB_BinaryOp *multiply, GrB_Semiring semiring); - -/* type */ -GrB_Info GxB_Type_fprint(GrB_Type type, const char *name, GxB_Print_Level pr, FILE *f); -GrB_Info GxB_Type_from_name(GrB_Type *type, const char *type_name); -GrB_Info GxB_Type_name(char *type_name, const GrB_Type type); -GrB_Info GxB_Type_new(GrB_Type *type, size_t sizeof_ctype, const char *type_name, const char *type_defn); -GrB_Info GxB_Type_size(size_t *size, const GrB_Type type); - -/* unary */ -GrB_Info GxB_UnaryOp_fprint(GrB_UnaryOp unaryop, const char *name, GxB_Print_Level pr, FILE *f); -GrB_Info GxB_UnaryOp_new(GrB_UnaryOp *unaryop, GxB_unary_function function, GrB_Type ztype, GrB_Type xtype, const char *unop_name, const char *unop_defn); -GrB_Info GxB_UnaryOp_xtype(GrB_Type *xtype, GrB_UnaryOp unaryop); -GrB_Info GxB_UnaryOp_xtype_name(char *type_name, const GrB_UnaryOp unaryop); -GrB_Info GxB_UnaryOp_ztype(GrB_Type *ztype, GrB_UnaryOp unaryop); -GrB_Info GxB_UnaryOp_ztype_name(char *type_name, const GrB_UnaryOp unaryop); - -/* vector */ -GrB_Info GxB_Vector_Iterator_attach(GxB_Iterator iterator, GrB_Vector v, GrB_Descriptor desc); -GrB_Info GxB_Vector_Option_get(GrB_Vector A, GxB_Option_Field field, ...); -GrB_Info GxB_Vector_Option_get_FP64(GrB_Vector v, GxB_Option_Field field, double *value); -GrB_Info GxB_Vector_Option_get_INT32(GrB_Vector v, GxB_Option_Field field, int32_t *value); -GrB_Info GxB_Vector_Option_set(GrB_Vector A, GxB_Option_Field field, ...); -GrB_Info GxB_Vector_Option_set_FP64(GrB_Vector v, GxB_Option_Field field, double value); -GrB_Info GxB_Vector_Option_set_INT32(GrB_Vector v, GxB_Option_Field field, int32_t value); -GrB_Info GxB_Vector_apply_BinaryOp1st(GrB_Vector w, const GrB_Vector mask, const GrB_BinaryOp accum, const GrB_BinaryOp op, const GrB_Scalar x, const GrB_Vector u, const GrB_Descriptor desc); -GrB_Info GxB_Vector_apply_BinaryOp1st_FC32(GrB_Vector w, const GrB_Vector mask, const GrB_BinaryOp accum, const GrB_BinaryOp op, GxB_FC32_t x, const GrB_Vector u, const GrB_Descriptor desc); -GrB_Info GxB_Vector_apply_BinaryOp1st_FC64(GrB_Vector w, const GrB_Vector mask, const GrB_BinaryOp accum, const GrB_BinaryOp op, GxB_FC64_t x, const GrB_Vector u, const GrB_Descriptor desc); -GrB_Info GxB_Vector_apply_BinaryOp2nd(GrB_Vector w, const GrB_Vector mask, const GrB_BinaryOp accum, const GrB_BinaryOp op, const GrB_Vector u, const GrB_Scalar y, const GrB_Descriptor desc); -GrB_Info GxB_Vector_apply_BinaryOp2nd_FC32(GrB_Vector w, const GrB_Vector mask, const GrB_BinaryOp accum, const GrB_BinaryOp op, const GrB_Vector u, GxB_FC32_t y, const GrB_Descriptor desc); -GrB_Info GxB_Vector_apply_BinaryOp2nd_FC64(GrB_Vector w, const GrB_Vector mask, const GrB_BinaryOp accum, const GrB_BinaryOp op, const GrB_Vector u, GxB_FC64_t y, const GrB_Descriptor desc); -GrB_Info GxB_Vector_apply_IndexOp_FC32(GrB_Vector w, const GrB_Vector mask, const GrB_BinaryOp accum, const GrB_IndexUnaryOp op, const GrB_Vector u, GxB_FC32_t y, const GrB_Descriptor desc); -GrB_Info GxB_Vector_apply_IndexOp_FC64(GrB_Vector w, const GrB_Vector mask, const GrB_BinaryOp accum, const GrB_IndexUnaryOp op, const GrB_Vector u, GxB_FC64_t y, const GrB_Descriptor desc); -GrB_Info GxB_Vector_assign_FC32(GrB_Vector w, const GrB_Vector mask, const GrB_BinaryOp accum, GxB_FC32_t x, const GrB_Index *I, GrB_Index ni, const GrB_Descriptor desc); -GrB_Info GxB_Vector_assign_FC64(GrB_Vector w, const GrB_Vector mask, const GrB_BinaryOp accum, GxB_FC64_t x, const GrB_Index *I, GrB_Index ni, const GrB_Descriptor desc); -GrB_Info GxB_Vector_build_FC32(GrB_Vector w, const GrB_Index *I, const GxB_FC32_t *X, GrB_Index nvals, const GrB_BinaryOp dup); -GrB_Info GxB_Vector_build_FC64(GrB_Vector w, const GrB_Index *I, const GxB_FC64_t *X, GrB_Index nvals, const GrB_BinaryOp dup); -GrB_Info GxB_Vector_build_Scalar(GrB_Vector w, const GrB_Index *I, GrB_Scalar scalar, GrB_Index nvals); -GrB_Info GxB_Vector_deserialize(GrB_Vector *w, GrB_Type type, const void *blob, GrB_Index blob_size, const GrB_Descriptor desc); -GrB_Info GxB_Vector_eWiseUnion(GrB_Vector w, const GrB_Vector mask, const GrB_BinaryOp accum, const GrB_BinaryOp add, const GrB_Vector u, const GrB_Scalar alpha, const GrB_Vector v, const GrB_Scalar beta, const GrB_Descriptor desc); -GrB_Info GxB_Vector_export_Bitmap(GrB_Vector *v, GrB_Type *type, GrB_Index *n, int8_t **vb, void **vx, GrB_Index *vb_size, GrB_Index *vx_size, bool *iso, GrB_Index *nvals, const GrB_Descriptor desc); -GrB_Info GxB_Vector_export_CSC(GrB_Vector *v, GrB_Type *type, GrB_Index *n, GrB_Index **vi, void **vx, GrB_Index *vi_size, GrB_Index *vx_size, bool *iso, GrB_Index *nvals, bool *jumbled, const GrB_Descriptor desc); -GrB_Info GxB_Vector_export_Full(GrB_Vector *v, GrB_Type *type, GrB_Index *n, void **vx, GrB_Index *vx_size, bool *iso, const GrB_Descriptor desc); -GrB_Info GxB_Vector_extractElement_FC32(GxB_FC32_t *x, const GrB_Vector v, GrB_Index i); -GrB_Info GxB_Vector_extractElement_FC64(GxB_FC64_t *x, const GrB_Vector v, GrB_Index i); -GrB_Info GxB_Vector_extractTuples_FC32(GrB_Index *I, GxB_FC32_t *X, GrB_Index *nvals, const GrB_Vector v); -GrB_Info GxB_Vector_extractTuples_FC64(GrB_Index *I, GxB_FC64_t *X, GrB_Index *nvals, const GrB_Vector v); -GrB_Info GxB_Vector_fprint(GrB_Vector v, const char *name, GxB_Print_Level pr, FILE *f); -GrB_Info GxB_Vector_import_Bitmap(GrB_Vector *v, GrB_Type type, GrB_Index n, int8_t **vb, void **vx, GrB_Index vb_size, GrB_Index vx_size, bool iso, GrB_Index nvals, const GrB_Descriptor desc); -GrB_Info GxB_Vector_import_CSC(GrB_Vector *v, GrB_Type type, GrB_Index n, GrB_Index **vi, void **vx, GrB_Index vi_size, GrB_Index vx_size, bool iso, GrB_Index nvals, bool jumbled, const GrB_Descriptor desc); -GrB_Info GxB_Vector_import_Full(GrB_Vector *v, GrB_Type type, GrB_Index n, void **vx, GrB_Index vx_size, bool iso, const GrB_Descriptor desc); -GrB_Info GxB_Vector_isStoredElement(const GrB_Vector v, GrB_Index i); -GrB_Info GxB_Vector_iso(bool *iso, const GrB_Vector v); -GrB_Info GxB_Vector_memoryUsage(size_t *size, const GrB_Vector v); -GrB_Info GxB_Vector_pack_Bitmap(GrB_Vector v, int8_t **vb, void **vx, GrB_Index vb_size, GrB_Index vx_size, bool iso, GrB_Index nvals, const GrB_Descriptor desc); -GrB_Info GxB_Vector_pack_CSC(GrB_Vector v, GrB_Index **vi, void **vx, GrB_Index vi_size, GrB_Index vx_size, bool iso, GrB_Index nvals, bool jumbled, const GrB_Descriptor desc); -GrB_Info GxB_Vector_pack_Full(GrB_Vector v, void **vx, GrB_Index vx_size, bool iso, const GrB_Descriptor desc); -GrB_Info GxB_Vector_reduce_FC32(GxB_FC32_t *c, const GrB_BinaryOp accum, const GrB_Monoid monoid, const GrB_Vector u, const GrB_Descriptor desc); -GrB_Info GxB_Vector_reduce_FC64(GxB_FC64_t *c, const GrB_BinaryOp accum, const GrB_Monoid monoid, const GrB_Vector u, const GrB_Descriptor desc); -GrB_Info GxB_Vector_select(GrB_Vector w, const GrB_Vector mask, const GrB_BinaryOp accum, const GxB_SelectOp op, const GrB_Vector u, const GrB_Scalar Thunk, const GrB_Descriptor desc); -GrB_Info GxB_Vector_select_FC32(GrB_Vector w, const GrB_Vector mask, const GrB_BinaryOp accum, const GrB_IndexUnaryOp op, const GrB_Vector u, GxB_FC32_t y, const GrB_Descriptor desc); -GrB_Info GxB_Vector_select_FC64(GrB_Vector w, const GrB_Vector mask, const GrB_BinaryOp accum, const GrB_IndexUnaryOp op, const GrB_Vector u, GxB_FC64_t y, const GrB_Descriptor desc); -GrB_Info GxB_Vector_serialize(void **blob_handle, GrB_Index *blob_size_handle, GrB_Vector u, const GrB_Descriptor desc); -GrB_Info GxB_Vector_setElement_FC32(GrB_Vector w, GxB_FC32_t x, GrB_Index i); -GrB_Info GxB_Vector_setElement_FC64(GrB_Vector w, GxB_FC64_t x, GrB_Index i); -GrB_Info GxB_Vector_sort(GrB_Vector w, GrB_Vector p, GrB_BinaryOp op, GrB_Vector u, const GrB_Descriptor desc); -GrB_Info GxB_Vector_subassign(GrB_Vector w, const GrB_Vector mask, const GrB_BinaryOp accum, const GrB_Vector u, const GrB_Index *I, GrB_Index ni, const GrB_Descriptor desc); -GrB_Info GxB_Vector_subassign_BOOL(GrB_Vector w, const GrB_Vector mask, const GrB_BinaryOp accum, bool x, const GrB_Index *I, GrB_Index ni, const GrB_Descriptor desc); -GrB_Info GxB_Vector_subassign_FC32(GrB_Vector w, const GrB_Vector mask, const GrB_BinaryOp accum, GxB_FC32_t x, const GrB_Index *I, GrB_Index ni, const GrB_Descriptor desc); -GrB_Info GxB_Vector_subassign_FC64(GrB_Vector w, const GrB_Vector mask, const GrB_BinaryOp accum, GxB_FC64_t x, const GrB_Index *I, GrB_Index ni, const GrB_Descriptor desc); -GrB_Info GxB_Vector_subassign_FP32(GrB_Vector w, const GrB_Vector mask, const GrB_BinaryOp accum, float x, const GrB_Index *I, GrB_Index ni, const GrB_Descriptor desc); -GrB_Info GxB_Vector_subassign_FP64(GrB_Vector w, const GrB_Vector mask, const GrB_BinaryOp accum, double x, const GrB_Index *I, GrB_Index ni, const GrB_Descriptor desc); -GrB_Info GxB_Vector_subassign_INT8(GrB_Vector w, const GrB_Vector mask, const GrB_BinaryOp accum, int8_t x, const GrB_Index *I, GrB_Index ni, const GrB_Descriptor desc); -GrB_Info GxB_Vector_subassign_INT16(GrB_Vector w, const GrB_Vector mask, const GrB_BinaryOp accum, int16_t x, const GrB_Index *I, GrB_Index ni, const GrB_Descriptor desc); -GrB_Info GxB_Vector_subassign_INT32(GrB_Vector w, const GrB_Vector mask, const GrB_BinaryOp accum, int32_t x, const GrB_Index *I, GrB_Index ni, const GrB_Descriptor desc); -GrB_Info GxB_Vector_subassign_INT64(GrB_Vector w, const GrB_Vector mask, const GrB_BinaryOp accum, int64_t x, const GrB_Index *I, GrB_Index ni, const GrB_Descriptor desc); -GrB_Info GxB_Vector_subassign_Scalar(GrB_Vector w, const GrB_Vector mask, const GrB_BinaryOp accum, GrB_Scalar x, const GrB_Index *I, GrB_Index ni, const GrB_Descriptor desc); -GrB_Info GxB_Vector_subassign_UDT(GrB_Vector w, const GrB_Vector mask, const GrB_BinaryOp accum, void *x, const GrB_Index *I, GrB_Index ni, const GrB_Descriptor desc); -GrB_Info GxB_Vector_subassign_UINT8(GrB_Vector w, const GrB_Vector mask, const GrB_BinaryOp accum, uint8_t x, const GrB_Index *I, GrB_Index ni, const GrB_Descriptor desc); -GrB_Info GxB_Vector_subassign_UINT16(GrB_Vector w, const GrB_Vector mask, const GrB_BinaryOp accum, uint16_t x, const GrB_Index *I, GrB_Index ni, const GrB_Descriptor desc); -GrB_Info GxB_Vector_subassign_UINT32(GrB_Vector w, const GrB_Vector mask, const GrB_BinaryOp accum, uint32_t x, const GrB_Index *I, GrB_Index ni, const GrB_Descriptor desc); -GrB_Info GxB_Vector_subassign_UINT64(GrB_Vector w, const GrB_Vector mask, const GrB_BinaryOp accum, uint64_t x, const GrB_Index *I, GrB_Index ni, const GrB_Descriptor desc); -GrB_Info GxB_Vector_type(GrB_Type *type, const GrB_Vector v); -GrB_Info GxB_Vector_type_name(char *type_name, const GrB_Vector v); -GrB_Info GxB_Vector_unpack_Bitmap(GrB_Vector v, int8_t **vb, void **vx, GrB_Index *vb_size, GrB_Index *vx_size, bool *iso, GrB_Index *nvals, const GrB_Descriptor desc); -GrB_Info GxB_Vector_unpack_CSC(GrB_Vector v, GrB_Index **vi, void **vx, GrB_Index *vi_size, GrB_Index *vx_size, bool *iso, GrB_Index *nvals, bool *jumbled, const GrB_Descriptor desc); -GrB_Info GxB_Vector_unpack_Full(GrB_Vector v, void **vx, GrB_Index *vx_size, bool *iso, const GrB_Descriptor desc); - -/* int DEFINES */ -#define GRB_SUBVERSION ... -#define GRB_VERSION ... -#define GrB_INDEX_MAX ... -#define GxB_ANY_SPARSITY ... -#define GxB_AUTO_SPARSITY ... -#define GxB_BACKWARDS ... -#define GxB_BEGIN ... -#define GxB_BITMAP ... -#define GxB_CHUNK ... -#define GxB_COMPRESSION_DEFAULT ... -#define GxB_COMPRESSION_INTEL ... -#define GxB_COMPRESSION_LZ4 ... -#define GxB_COMPRESSION_LZ4HC ... -#define GxB_COMPRESSION_NONE ... -#define GxB_COMPRESSION_ZSTD ... -#define GxB_END ... -#define GxB_FAST_IMPORT ... -#define GxB_FULL ... -#define GxB_GPU_CHUNK ... -#define GxB_GPU_CONTROL ... -#define GxB_HYPERSPARSE ... -#define GxB_IMPLEMENTATION ... -#define GxB_IMPLEMENTATION_MAJOR ... -#define GxB_IMPLEMENTATION_MINOR ... -#define GxB_IMPLEMENTATION_SUB ... -#define GxB_INC ... -#define GxB_INDEX_MAX ... -#define GxB_MAX_NAME_LEN ... -#define GxB_NBITMAP_SWITCH ... -#define GxB_NTHREADS ... -#define GxB_RANGE ... -#define GxB_SPARSE ... -#define GxB_SPEC_MAJOR ... -#define GxB_SPEC_MINOR ... -#define GxB_SPEC_SUB ... -#define GxB_SPEC_VERSION ... -#define GxB_STDC_VERSION ... -#define GxB_STRIDE ... - -/* char* DEFINES */ -extern char *GxB_IMPLEMENTATION_ABOUT_STR; -extern char *GxB_IMPLEMENTATION_DATE_STR; -extern char *GxB_IMPLEMENTATION_LICENSE_STR; -extern char *GxB_IMPLEMENTATION_NAME_STR; -extern char *GxB_SPEC_ABOUT_STR; -extern char *GxB_SPEC_DATE_STR; diff --git a/suitesparse_graphblas/suitesparse_graphblas_no_complex.h b/suitesparse_graphblas/suitesparse_graphblas_no_complex.h index 0ce6e93..7d1ff46 100644 --- a/suitesparse_graphblas/suitesparse_graphblas_no_complex.h +++ b/suitesparse_graphblas/suitesparse_graphblas_no_complex.h @@ -13,12 +13,12 @@ typedef struct GB_Vector_opaque *GrB_Vector; typedef uint64_t GrB_Index; /* GxB typedefs */ +typedef struct GB_Context_opaque *GxB_Context; typedef struct GB_Iterator_opaque *GxB_Iterator; typedef struct GB_Scalar_opaque *GxB_Scalar; typedef struct GB_SelectOp_opaque *GxB_SelectOp; /* GxB typedefs (functions) */ -typedef bool (*GxB_select_function)(GrB_Index i, GrB_Index j, const void *x, const void *thunk); typedef void (*GxB_binary_function)(void *, const void *, const void *); typedef void (*GxB_index_unary_function)(void *z, const void *x, GrB_Index i, GrB_Index j, const void *y); typedef void (*GxB_unary_function)(void *, const void *); @@ -30,14 +30,10 @@ typedef enum GrB_MASK = 1, GrB_INP0 = 2, GrB_INP1 = 3, - GxB_DESCRIPTOR_NTHREADS = 5, - GxB_DESCRIPTOR_CHUNK = 7, - GxB_DESCRIPTOR_GPU_CONTROL = 21, - GxB_DESCRIPTOR_GPU_CHUNK = 22, - GxB_AxB_METHOD = 1000, - GxB_SORT = 35, - GxB_COMPRESSION = 36, - GxB_IMPORT = 37 + GxB_AxB_METHOD = 7090, + GxB_SORT = 7091, + GxB_COMPRESSION = 7092, + GxB_IMPORT = 7093 } GrB_Desc_Field; typedef enum @@ -47,13 +43,11 @@ typedef enum GrB_COMP = 2, GrB_STRUCTURE = 4, GrB_TRAN = 3, - GxB_GPU_ALWAYS = 2001, - GxB_GPU_NEVER = 2002, - GxB_AxB_GUSTAVSON = 1001, - GxB_AxB_DOT = 1003, - GxB_AxB_HASH = 1004, - GxB_AxB_SAXPY = 1005, - GxB_SECURE_IMPORT = 502 + GxB_AxB_GUSTAVSON = 7081, + GxB_AxB_DOT = 7083, + GxB_AxB_HASH = 7084, + GxB_AxB_SAXPY = 7085, + GxB_SECURE_IMPORT = 7080 } GrB_Desc_Value; typedef enum @@ -67,7 +61,7 @@ typedef enum { GrB_SUCCESS = 0, GrB_NO_VALUE = 1, - GxB_EXHAUSTED = 2, + GxB_EXHAUSTED = 7089, GrB_UNINITIALIZED_OBJECT = -1, GrB_NULL_POINTER = -2, GrB_INVALID_VALUE = -3, @@ -88,8 +82,8 @@ typedef enum { GrB_NONBLOCKING = 0, GrB_BLOCKING = 1, - GxB_NONBLOCKING_GPU = 2, - GxB_BLOCKING_GPU = 3 + GxB_NONBLOCKING_GPU = 7099, + GxB_BLOCKING_GPU = 7098 } GrB_Mode; typedef enum @@ -99,6 +93,13 @@ typedef enum } GrB_WaitMode; /* GxB enums */ +typedef enum +{ + GxB_CONTEXT_NTHREADS = 7086, + GxB_CONTEXT_CHUNK = 7087, + GxB_CONTEXT_GPU_ID = 7088 +} GxB_Context_Field; + typedef enum { GxB_BY_ROW = 0, @@ -108,36 +109,58 @@ typedef enum typedef enum { - GxB_HYPER_SWITCH = 0, - GxB_BITMAP_SWITCH = 34, - GxB_FORMAT = 1, - GxB_MODE = 2, - GxB_LIBRARY_NAME = 8, - GxB_LIBRARY_VERSION = 9, - GxB_LIBRARY_DATE = 10, - GxB_LIBRARY_ABOUT = 11, - GxB_LIBRARY_URL = 12, - GxB_LIBRARY_LICENSE = 13, - GxB_LIBRARY_COMPILE_DATE = 14, - GxB_LIBRARY_COMPILE_TIME = 15, - GxB_API_VERSION = 16, - GxB_API_DATE = 17, - GxB_API_ABOUT = 18, - GxB_API_URL = 19, - GxB_COMPILER_VERSION = 23, - GxB_COMPILER_NAME = 24, - GxB_LIBRARY_OPENMP = 25, - GxB_GLOBAL_NTHREADS = 5, - GxB_GLOBAL_CHUNK = 7, - GxB_BURBLE = 99, - GxB_PRINTF = 101, - GxB_FLUSH = 102, - GxB_MEMORY_POOL = 103, - GxB_PRINT_1BASED = 104, - GxB_SPARSITY_STATUS = 33, - GxB_SPARSITY_CONTROL = 32, - GxB_GLOBAL_GPU_CONTROL = 21, - GxB_GLOBAL_GPU_CHUNK = 22 + GxB_JIT_OFF = 0, + GxB_JIT_PAUSE = 1, + GxB_JIT_RUN = 2, + GxB_JIT_LOAD = 3, + GxB_JIT_ON = 4 +} GxB_JIT_Control; + +typedef enum +{ + GxB_HYPER_SWITCH = 7000, + GxB_BITMAP_SWITCH = 7001, + GxB_FORMAT = 7002, + GxB_MODE = 7003, + GxB_LIBRARY_NAME = 7004, + GxB_LIBRARY_VERSION = 7005, + GxB_LIBRARY_DATE = 7006, + GxB_LIBRARY_ABOUT = 7007, + GxB_LIBRARY_URL = 7008, + GxB_LIBRARY_LICENSE = 7009, + GxB_LIBRARY_COMPILE_DATE = 7010, + GxB_LIBRARY_COMPILE_TIME = 7011, + GxB_API_VERSION = 7012, + GxB_API_DATE = 7013, + GxB_API_ABOUT = 7014, + GxB_API_URL = 7015, + GxB_COMPILER_VERSION = 7016, + GxB_COMPILER_NAME = 7017, + GxB_LIBRARY_OPENMP = 7018, + GxB_GLOBAL_NTHREADS = 7086, + GxB_GLOBAL_CHUNK = 7087, + GxB_GLOBAL_GPU_ID = 7088, + GxB_BURBLE = 7019, + GxB_PRINTF = 7020, + GxB_FLUSH = 7021, + GxB_MEMORY_POOL = 7022, + GxB_PRINT_1BASED = 7023, + GxB_JIT_C_COMPILER_NAME = 7024, + GxB_JIT_C_COMPILER_FLAGS = 7025, + GxB_JIT_C_LINKER_FLAGS = 7026, + GxB_JIT_C_LIBRARIES = 7027, + GxB_JIT_C_PREFACE = 7028, + GxB_JIT_C_CONTROL = 7029, + GxB_JIT_CACHE_PATH = 7030, + GxB_JIT_C_CMAKE_LIBS = 7031, + GxB_JIT_USE_CMAKE = 7032, + GxB_JIT_ERROR_LOG = 7033, + GxB_SPARSITY_STATUS = 7034, + GxB_SPARSITY_CONTROL = 7036, + GxB_MALLOC_FUNCTION = 7037, + GxB_CALLOC_FUNCTION = 7038, + GxB_REALLOC_FUNCTION = 7039, + GxB_FREE_FUNCTION = 7040 } GxB_Option_Field; typedef enum @@ -2429,6 +2452,7 @@ extern GrB_UnaryOp GxB_TRUNC_FP32; extern GrB_UnaryOp GxB_TRUNC_FP64; /* GxB objects */ +extern GxB_Context GxB_CONTEXT_WORLD; extern GxB_SelectOp GxB_DIAG; extern GxB_SelectOp GxB_EQ_THUNK; extern GxB_SelectOp GxB_EQ_ZERO; @@ -2889,9 +2913,6 @@ GrB_Info GrB_Vector_wait(GrB_Vector v, GrB_WaitMode waitmode); * GB functions * ***************/ -/* binary */ -GrB_Info GB_BinaryOp_new(GrB_BinaryOp *binaryop, GxB_binary_function function, GrB_Type ztype, GrB_Type xtype, GrB_Type ytype, const char *binop_name); - /* iterator */ GrB_Info GB_Iterator_rc_bitmap_next(GxB_Iterator iterator); GrB_Info GB_Iterator_rc_seek(GxB_Iterator iterator, GrB_Index j, bool jth_vector); @@ -2900,15 +2921,6 @@ GrB_Info GB_Vector_Iterator_bitmap_seek(GxB_Iterator iterator, GrB_Index unused) /* matrix */ GrB_Info GB_Iterator_attach(GxB_Iterator iterator, GrB_Matrix A, GxB_Format_Value format, GrB_Descriptor desc); -/* selectop */ -GrB_Info GB_SelectOp_new(GxB_SelectOp *selectop, GxB_select_function function, GrB_Type xtype, GrB_Type ttype, const char *name); - -/* type */ -GrB_Info GB_Type_new(GrB_Type *type, size_t sizeof_ctype, const char *type_name); - -/* unary */ -GrB_Info GB_UnaryOp_new(GrB_UnaryOp *unaryop, GxB_unary_function function, GrB_Type ztype, GrB_Type xtype, const char *unop_name); - /**************** * GxB functions * ****************/ @@ -2923,14 +2935,28 @@ GrB_Info GxB_BinaryOp_ytype_name(char *type_name, const GrB_BinaryOp binaryop); GrB_Info GxB_BinaryOp_ztype(GrB_Type *ztype, GrB_BinaryOp binaryop); GrB_Info GxB_BinaryOp_ztype_name(char *type_name, const GrB_BinaryOp binaryop); +/* context */ +GrB_Info GxB_Context_disengage(GxB_Context Context); +GrB_Info GxB_Context_engage(GxB_Context Context); +GrB_Info GxB_Context_fprint(GxB_Context Context, const char *name, GxB_Print_Level pr, FILE *f); +GrB_Info GxB_Context_free(GxB_Context *Context); +GrB_Info GxB_Context_get(GxB_Context Context, GxB_Context_Field field, ...); +GrB_Info GxB_Context_get_FP64(GxB_Context Context, GxB_Context_Field field, double *value); +GrB_Info GxB_Context_get_INT32(GxB_Context Context, GxB_Context_Field field, int32_t *value); +GrB_Info GxB_Context_new(GxB_Context *Context); +GrB_Info GxB_Context_set(GxB_Context Context, GxB_Context_Field field, ...); +GrB_Info GxB_Context_set_FP64(GxB_Context Context, GxB_Context_Field field, double value); +GrB_Info GxB_Context_set_INT32(GxB_Context Context, GxB_Context_Field field, int32_t value); + /* core */ GrB_Info GxB_Global_Option_get(GxB_Option_Field field, ...); -GrB_Info GxB_Global_Option_get_CHAR(GxB_Option_Field field, char **value); +GrB_Info GxB_Global_Option_get_CHAR(GxB_Option_Field field, const char **value); GrB_Info GxB_Global_Option_get_FP64(GxB_Option_Field field, double *value); GrB_Info GxB_Global_Option_get_FUNCTION(GxB_Option_Field field, void **value); GrB_Info GxB_Global_Option_get_INT32(GxB_Option_Field field, int32_t *value); GrB_Info GxB_Global_Option_get_INT64(GxB_Option_Field field, int64_t *value); GrB_Info GxB_Global_Option_set(GxB_Option_Field field, ...); +GrB_Info GxB_Global_Option_set_CHAR(GxB_Option_Field field, const char *value); GrB_Info GxB_Global_Option_set_FP64(GxB_Option_Field field, double value); GrB_Info GxB_Global_Option_set_FP64_ARRAY(GxB_Option_Field field, double *value); GrB_Info GxB_Global_Option_set_FUNCTION(GxB_Option_Field field, void *value); @@ -3133,12 +3159,8 @@ GrB_Info GxB_Scalar_type_name(char *type_name, const GrB_Scalar s); GrB_Info GxB_Scalar_wait(GrB_Scalar *s); /* selectop */ -GrB_Info GxB_SelectOp_error(const char **error, const GxB_SelectOp op); -GrB_Info GxB_SelectOp_fprint(GxB_SelectOp selectop, const char *name, GxB_Print_Level pr, FILE *f); -GrB_Info GxB_SelectOp_free(GxB_SelectOp *selectop); -GrB_Info GxB_SelectOp_new(GxB_SelectOp *selectop, GxB_select_function function, GrB_Type xtype, GrB_Type ttype); +GrB_Info GxB_SelectOp_fprint(GxB_SelectOp op, const char *name, GxB_Print_Level pr, FILE *f); GrB_Info GxB_SelectOp_ttype(GrB_Type *ttype, GxB_SelectOp selectop); -GrB_Info GxB_SelectOp_wait(GxB_SelectOp op, GrB_WaitMode waitmode); GrB_Info GxB_SelectOp_xtype(GrB_Type *xtype, GxB_SelectOp selectop); /* semiring */ @@ -3221,7 +3243,6 @@ GrB_Info GxB_Vector_unpack_Full(GrB_Vector v, void **vx, GrB_Index *vx_size, boo #define GxB_BITMAP ... #define GxB_CHUNK ... #define GxB_COMPRESSION_DEFAULT ... -#define GxB_COMPRESSION_INTEL ... #define GxB_COMPRESSION_LZ4 ... #define GxB_COMPRESSION_LZ4HC ... #define GxB_COMPRESSION_NONE ... @@ -3229,8 +3250,7 @@ GrB_Info GxB_Vector_unpack_Full(GrB_Vector v, void **vx, GrB_Index *vx_size, boo #define GxB_END ... #define GxB_FAST_IMPORT ... #define GxB_FULL ... -#define GxB_GPU_CHUNK ... -#define GxB_GPU_CONTROL ... +#define GxB_GPU_ID ... #define GxB_HYPERSPARSE ... #define GxB_IMPLEMENTATION ... #define GxB_IMPLEMENTATION_MAJOR ... From c45d27d3e7d9f2b0cc5b3f21b3f701d10fe0a816 Mon Sep 17 00:00:00 2001 From: Erik Welch Date: Sat, 20 May 2023 13:42:24 -0500 Subject: [PATCH 12/43] Make tests verbose when building wheels (#88) --- .github/workflows/wheels.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/wheels.yml b/.github/workflows/wheels.yml index 98b8ab6..793f58a 100644 --- a/.github/workflows/wheels.yml +++ b/.github/workflows/wheels.yml @@ -148,12 +148,13 @@ jobs: CIBW_TEST_EXTRAS: "test" # run tests - CIBW_TEST_COMMAND: "pytest --pyargs suitesparse_graphblas" + CIBW_TEST_COMMAND: "pytest -v --pyargs suitesparse_graphblas" # GitHub Actions macOS Intel runner cannot run ARM tests. Uncomment to silence warning. # CIBW_TEST_SKIP: "*-macosx_arm64" run: | + python -m pip install --upgrade pip python -m pip install cibuildwheel python -m cibuildwheel --output-dir wheelhouse . shell: bash From f7b630092ef91c16514a443ec8f5a8f694c914f8 Mon Sep 17 00:00:00 2001 From: Erik Welch Date: Fri, 2 Jun 2023 21:06:17 -0500 Subject: [PATCH 13/43] Test against v8.0.1.beta1 (#90) * Update to v8.0.1 * Print default JIT configs in CI (tests and wheels) --- .github/workflows/test.yml | 4 +- .github/workflows/wheels.yml | 2 +- .pre-commit-config.yaml | 8 ++-- suitesparse_graphblas/suitesparse_graphblas.h | 2 + .../suitesparse_graphblas_no_complex.h | 2 + suitesparse_graphblas/tests/test_jit.py | 39 +++++++++++++++++++ 6 files changed, 51 insertions(+), 6 deletions(-) create mode 100644 suitesparse_graphblas/tests/test_jit.py diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 07d7016..6a83376 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -19,7 +19,7 @@ jobs: # os: ["ubuntu-latest"] # source: ["source"] python-version: ["3.8", "3.9", "3.10", "3.11"] - graphblas-version: ["8.0.0"] + graphblas-version: ["8.0.1"] steps: - name: Checkout uses: actions/checkout@v3 @@ -40,6 +40,7 @@ jobs: - name: GraphBLAS (from source) if: (contains(matrix.source, 'source')) run: | + # From release (does not work with beta versions) GRAPHBLAS_PREFIX=${CONDA_PREFIX} bash suitesparse.sh refs/tags/${{ matrix.graphblas-version }}.0 # From tag @@ -63,6 +64,7 @@ jobs: env: CYTHON_COVERAGE: true run: | + pytest -s -k test_print_jit_config coverage run --branch -m pytest coverage run -a --branch suitesparse_graphblas/tests/test_initialize.py - name: create_headers.py check diff --git a/.github/workflows/wheels.yml b/.github/workflows/wheels.yml index 793f58a..31c6db3 100644 --- a/.github/workflows/wheels.yml +++ b/.github/workflows/wheels.yml @@ -148,7 +148,7 @@ jobs: CIBW_TEST_EXTRAS: "test" # run tests - CIBW_TEST_COMMAND: "pytest -v --pyargs suitesparse_graphblas" + CIBW_TEST_COMMAND: "pytest --pyargs suitesparse_graphblas -s -k test_print_jit_config && pytest -v --pyargs suitesparse_graphblas" # GitHub Actions macOS Intel runner cannot run ARM tests. Uncomment to silence warning. # CIBW_TEST_SKIP: "*-macosx_arm64" diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 1ec8879..541c75b 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -20,7 +20,7 @@ repos: - id: mixed-line-ending # - id: trailing-whitespace - repo: https://github.com/abravalheri/validate-pyproject - rev: v0.12.2 + rev: v0.13 hooks: - id: validate-pyproject name: Validate pyproject.toml @@ -34,7 +34,7 @@ repos: hooks: - id: isort - repo: https://github.com/asottile/pyupgrade - rev: v3.3.2 + rev: v3.4.0 hooks: - id: pyupgrade args: [--py38-plus] @@ -55,8 +55,8 @@ repos: additional_dependencies: &flake8_dependencies # These versions need updated manually - flake8==6.0.0 - - flake8-comprehensions==3.11.1 - - flake8-bugbear==23.3.23 + - flake8-comprehensions==3.12.0 + - flake8-bugbear==23.5.9 # - flake8-simplify==0.20.0 - repo: https://github.com/asottile/yesqa rev: v1.4.0 diff --git a/suitesparse_graphblas/suitesparse_graphblas.h b/suitesparse_graphblas/suitesparse_graphblas.h index 4fcb6d0..eb5db2f 100644 --- a/suitesparse_graphblas/suitesparse_graphblas.h +++ b/suitesparse_graphblas/suitesparse_graphblas.h @@ -3112,6 +3112,7 @@ GrB_Info GxB_BinaryOp_ztype_name(char *type_name, const GrB_BinaryOp binaryop); /* context */ GrB_Info GxB_Context_disengage(GxB_Context Context); GrB_Info GxB_Context_engage(GxB_Context Context); +GrB_Info GxB_Context_error(const char **error, const GxB_Context Context); GrB_Info GxB_Context_fprint(GxB_Context Context, const char *name, GxB_Print_Level pr, FILE *f); GrB_Info GxB_Context_free(GxB_Context *Context); GrB_Info GxB_Context_get(GxB_Context Context, GxB_Context_Field field, ...); @@ -3121,6 +3122,7 @@ GrB_Info GxB_Context_new(GxB_Context *Context); GrB_Info GxB_Context_set(GxB_Context Context, GxB_Context_Field field, ...); GrB_Info GxB_Context_set_FP64(GxB_Context Context, GxB_Context_Field field, double value); GrB_Info GxB_Context_set_INT32(GxB_Context Context, GxB_Context_Field field, int32_t value); +GrB_Info GxB_Context_wait(GxB_Context Context, GrB_WaitMode waitmode); /* core */ GrB_Info GxB_Global_Option_get(GxB_Option_Field field, ...); diff --git a/suitesparse_graphblas/suitesparse_graphblas_no_complex.h b/suitesparse_graphblas/suitesparse_graphblas_no_complex.h index 7d1ff46..5c49c31 100644 --- a/suitesparse_graphblas/suitesparse_graphblas_no_complex.h +++ b/suitesparse_graphblas/suitesparse_graphblas_no_complex.h @@ -2938,6 +2938,7 @@ GrB_Info GxB_BinaryOp_ztype_name(char *type_name, const GrB_BinaryOp binaryop); /* context */ GrB_Info GxB_Context_disengage(GxB_Context Context); GrB_Info GxB_Context_engage(GxB_Context Context); +GrB_Info GxB_Context_error(const char **error, const GxB_Context Context); GrB_Info GxB_Context_fprint(GxB_Context Context, const char *name, GxB_Print_Level pr, FILE *f); GrB_Info GxB_Context_free(GxB_Context *Context); GrB_Info GxB_Context_get(GxB_Context Context, GxB_Context_Field field, ...); @@ -2947,6 +2948,7 @@ GrB_Info GxB_Context_new(GxB_Context *Context); GrB_Info GxB_Context_set(GxB_Context Context, GxB_Context_Field field, ...); GrB_Info GxB_Context_set_FP64(GxB_Context Context, GxB_Context_Field field, double value); GrB_Info GxB_Context_set_INT32(GxB_Context Context, GxB_Context_Field field, int32_t value); +GrB_Info GxB_Context_wait(GxB_Context Context, GrB_WaitMode waitmode); /* core */ GrB_Info GxB_Global_Option_get(GxB_Option_Field field, ...); diff --git a/suitesparse_graphblas/tests/test_jit.py b/suitesparse_graphblas/tests/test_jit.py new file mode 100644 index 0000000..1921928 --- /dev/null +++ b/suitesparse_graphblas/tests/test_jit.py @@ -0,0 +1,39 @@ +from suitesparse_graphblas import ffi, lib + + +def test_print_jit_config(): + print() + print("===================================") + print("Printing default JIT configurations") + print("-----------------------------------") + jit_c_control = { + lib.GxB_JIT_OFF: "off", + lib.GxB_JIT_PAUSE: "pause", + lib.GxB_JIT_RUN: "run", + lib.GxB_JIT_LOAD: "load", + lib.GxB_JIT_ON: "on", + } + val_ptr = ffi.new("int32_t*") + assert lib.GxB_Global_Option_get_INT32(lib.GxB_JIT_C_CONTROL, val_ptr) == lib.GrB_SUCCESS + print("JIT_C_CONTROL", jit_c_control[val_ptr[0]]) + + assert lib.GxB_Global_Option_get_INT32(lib.GxB_JIT_USE_CMAKE, val_ptr) == lib.GrB_SUCCESS + print("JIT_USE_CMAKE", bool(val_ptr[0])) + + func = lib.GxB_Global_Option_get_CHAR + names = [ + "JIT_C_COMPILER_NAME", + "JIT_C_COMPILER_FLAGS", + "JIT_C_LINKER_FLAGS", + "JIT_C_LIBRARIES", + "JIT_C_CMAKE_LIBS", + "JIT_C_PREFACE", + "JIT_ERROR_LOG", + "JIT_CACHE_PATH", + ] + val_ptr = ffi.new("char**") + for name in names: + obj = getattr(lib, f"GxB_{name}") + assert func(obj, val_ptr) == lib.GrB_SUCCESS + print(name, ffi.string(val_ptr[0]).decode()) + print("===================================") From aaa0c0c7a85793261493bf3b6f67a645c9b1a429 Mon Sep 17 00:00:00 2001 From: Erik Welch Date: Fri, 2 Jun 2023 22:28:12 -0500 Subject: [PATCH 14/43] Run add_arm_to_libomp_dylib.sh only on arm64 (#91) --- .github/workflows/wheels.yml | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/.github/workflows/wheels.yml b/.github/workflows/wheels.yml index 31c6db3..306200d 100644 --- a/.github/workflows/wheels.yml +++ b/.github/workflows/wheels.yml @@ -106,8 +106,11 @@ jobs: # manually so that both x86 and arm builds can be built. run: | brew install coreutils - brew install libomp - sh add_arm_to_libomp_dylib.sh + if [[ ${{ matrix.cibw_archs }} == "arm64" ]] ; then + echo "Building universal libomp manually" + brew install libomp + sh add_arm_to_libomp_dylib.sh + fi - name: Build Wheels env: @@ -127,7 +130,7 @@ jobs: CIBW_ENVIRONMENT_MACOS: BREW_LIBOMP="1" SUITESPARSE_MACOS_ARCH=${{ matrix.cibw_archs }} # Uncomment to only build CPython wheels -# CIBW_BUILD: "cp*" + # CIBW_BUILD: "cp*" # Architectures to build specified in matrix CIBW_ARCHS: ${{ matrix.cibw_archs }} @@ -151,7 +154,9 @@ jobs: CIBW_TEST_COMMAND: "pytest --pyargs suitesparse_graphblas -s -k test_print_jit_config && pytest -v --pyargs suitesparse_graphblas" # GitHub Actions macOS Intel runner cannot run ARM tests. Uncomment to silence warning. -# CIBW_TEST_SKIP: "*-macosx_arm64" + # CIBW_TEST_SKIP: "*-macosx_arm64" + # XXX: tests are failing for macos_x86_64; let's see if we can figure out what's wrong by releasing a broken package... (sorry!) + # CIBW_TEST_SKIP: "*-macosx_*" run: | python -m pip install --upgrade pip @@ -181,7 +186,7 @@ jobs: needs: [build_wheels, build_sdist] runs-on: ubuntu-latest if: github.repository == 'GraphBLAS/python-suitesparse-graphblas' -# if: github.event_name == 'release' && github.event.action == 'published' + # if: github.event_name == 'release' && github.event.action == 'published' steps: - uses: actions/setup-python@v4 @@ -202,5 +207,5 @@ jobs: password: ${{ secrets.PYPI_TOKEN }} # Test PyPI: -# password: ${{ secrets.TEST_PYPI_API_TOKEN }} -# repository_url: https://test.pypi.org/legacy/ + # password: ${{ secrets.TEST_PYPI_API_TOKEN }} + # repository_url: https://test.pypi.org/legacy/ From d0182481dc0f058d3b755df1adaa7fa98b5f5b52 Mon Sep 17 00:00:00 2001 From: Erik Welch Date: Fri, 2 Jun 2023 23:20:30 -0500 Subject: [PATCH 15/43] Skip tests on macos when building wheels. (#92) This is probably a bad idea. --- .github/workflows/wheels.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/wheels.yml b/.github/workflows/wheels.yml index 306200d..7540025 100644 --- a/.github/workflows/wheels.yml +++ b/.github/workflows/wheels.yml @@ -106,9 +106,9 @@ jobs: # manually so that both x86 and arm builds can be built. run: | brew install coreutils + brew install libomp if [[ ${{ matrix.cibw_archs }} == "arm64" ]] ; then echo "Building universal libomp manually" - brew install libomp sh add_arm_to_libomp_dylib.sh fi @@ -156,7 +156,7 @@ jobs: # GitHub Actions macOS Intel runner cannot run ARM tests. Uncomment to silence warning. # CIBW_TEST_SKIP: "*-macosx_arm64" # XXX: tests are failing for macos_x86_64; let's see if we can figure out what's wrong by releasing a broken package... (sorry!) - # CIBW_TEST_SKIP: "*-macosx_*" + CIBW_TEST_SKIP: "*-macosx_*" run: | python -m pip install --upgrade pip From 9fc49900262a91486c45a43e9b21d9aad2fb6946 Mon Sep 17 00:00:00 2001 From: Erik Welch Date: Fri, 30 Jun 2023 14:31:39 -0500 Subject: [PATCH 16/43] Update to 8.0.2 (#93) * Update to 8.0.2 and turn off JIT by default (but it's still usable) --- .github/workflows/test.yml | 4 ++-- suitesparse.sh | 4 +++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 6a83376..7b47a63 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -19,7 +19,7 @@ jobs: # os: ["ubuntu-latest"] # source: ["source"] python-version: ["3.8", "3.9", "3.10", "3.11"] - graphblas-version: ["8.0.1"] + graphblas-version: ["8.0.2"] steps: - name: Checkout uses: actions/checkout@v3 @@ -52,7 +52,7 @@ jobs: # pushd DrTim*/build # echo ${CONDA_PREFIX} - # cmake -DCMAKE_INSTALL_PREFIX=${CONDA_PREFIX} -DCMAKE_INSTALL_LIBDIR=lib -DCMAKE_BUILD_TYPE=Release .. + # cmake -DJITINIT=2 -DCMAKE_INSTALL_PREFIX=${CONDA_PREFIX} -DCMAKE_INSTALL_LIBDIR=lib -DCMAKE_BUILD_TYPE=Release .. # cat Makefile # make all JOBS=16 # make install diff --git a/suitesparse.sh b/suitesparse.sh index 080201a..891391e 100755 --- a/suitesparse.sh +++ b/suitesparse.sh @@ -88,7 +88,9 @@ fi # Disable all Source/Generated2 kernels. For workflow development only. #cmake_params+=(-DCMAKE_CUDA_DEV=1) -cmake .. -DCMAKE_BUILD_TYPE=Release -G 'Unix Makefiles' "${cmake_params[@]}" +# Use `-DJITINIT=2` so that the JIT functionality is available, but disabled by default. +# Level 2, "run", means that pre-JIT kernels may be used, which does not require a compiler at runtime. +cmake .. -DJITINIT=2 -DCMAKE_BUILD_TYPE=Release -G 'Unix Makefiles' "${cmake_params[@]}" make -j$NPROC make install From 1a59a040c6c9243b1d3d64b915d608bc675475ee Mon Sep 17 00:00:00 2001 From: Erik Welch Date: Fri, 30 Jun 2023 15:09:17 -0500 Subject: [PATCH 17/43] Enable echo when running `suitesparse.sh` (#94) * Enable echo when running `suitesparse.sh` * Make conda faster in CI --- .github/workflows/test.yml | 6 ++++-- continuous_integration/environment.yml | 5 ++--- suitesparse.sh | 4 +++- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 7b47a63..2da86ba 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -31,12 +31,14 @@ jobs: auto-update-conda: true python-version: ${{ matrix.python-version }} environment-file: continuous_integration/environment.yml - channels: conda-forge + channels: conda-forge,nodefaults + channel-priority: strict activate-environment: suitesparse-graphblas + auto-activate-base: false - name: GraphBLAS (from conda-forge) if: (contains(matrix.source, 'conda-forge')) run: | - conda install -c conda-forge graphblas=${{ matrix.graphblas-version }} pytest-randomly + conda install graphblas=${{ matrix.graphblas-version }} - name: GraphBLAS (from source) if: (contains(matrix.source, 'source')) run: | diff --git a/continuous_integration/environment.yml b/continuous_integration/environment.yml index 22064d0..a5c0d41 100644 --- a/continuous_integration/environment.yml +++ b/continuous_integration/environment.yml @@ -1,13 +1,12 @@ name: suitesparse-graphblas channels: - conda-forge - - defaults + - nodefaults # Only install packages from conda-forge for faster solving dependencies: # - graphblas=6.0.2 - cffi - cython - numpy - pytest + - pytest-randomly - coverage - - black - - flake8 diff --git a/suitesparse.sh b/suitesparse.sh index 891391e..56c6784 100755 --- a/suitesparse.sh +++ b/suitesparse.sh @@ -1,10 +1,12 @@ #!/bin/bash +set -x # echo on + # parse SuiteSparse version from first argument, a git tag that ends in the version (no leading v) if [[ $1 =~ refs/tags/([0-9]*\.[0-9]*\.[0-9]*)\..*$ ]]; then VERSION=${BASH_REMATCH[1]} else - echo "Specify a SuiteSparse version, such as: $0 refs/tags/7.4.3.0" + echo "Specify a SuiteSparse version, such as: $0 refs/tags/7.4.3.0 (got: $1)" exit -1 fi echo VERSION: $VERSION From e3569b82b84431cd536550d0cc5f086d6ad5dd8a Mon Sep 17 00:00:00 2001 From: Erik Welch Date: Fri, 30 Jun 2023 23:04:28 -0500 Subject: [PATCH 18/43] Bump versions in pre-commit (#95) --- .pre-commit-config.yaml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 541c75b..535fee8 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -25,7 +25,7 @@ repos: - id: validate-pyproject name: Validate pyproject.toml - repo: https://github.com/PyCQA/autoflake - rev: v2.1.1 + rev: v2.2.0 hooks: - id: autoflake args: [--in-place] @@ -34,7 +34,7 @@ repos: hooks: - id: isort - repo: https://github.com/asottile/pyupgrade - rev: v3.4.0 + rev: v3.7.0 hooks: - id: pyupgrade args: [--py38-plus] @@ -55,11 +55,11 @@ repos: additional_dependencies: &flake8_dependencies # These versions need updated manually - flake8==6.0.0 - - flake8-comprehensions==3.12.0 - - flake8-bugbear==23.5.9 + - flake8-comprehensions==3.13.0 + - flake8-bugbear==23.6.5 # - flake8-simplify==0.20.0 - repo: https://github.com/asottile/yesqa - rev: v1.4.0 + rev: v1.5.0 hooks: - id: yesqa additional_dependencies: *flake8_dependencies From c231ca0b9618f3ba7b5181a1c5b24b20975b3867 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 2 Oct 2023 15:32:58 -0500 Subject: [PATCH 19/43] Bump actions/checkout from 3 to 4 (#96) Bumps [actions/checkout](https://github.com/actions/checkout) from 3 to 4. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/v3...v4) --- updated-dependencies: - dependency-name: actions/checkout dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/lint.yml | 2 +- .github/workflows/test.yml | 2 +- .github/workflows/wheels.yml | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 5ef2b10..7e85047 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -14,7 +14,7 @@ jobs: name: pre-commit-hooks runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - uses: actions/setup-python@v4 with: python-version: "3.10" diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 2da86ba..4505b2a 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -22,7 +22,7 @@ jobs: graphblas-version: ["8.0.2"] steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: fetch-depth: 0 - name: Conda diff --git a/.github/workflows/wheels.yml b/.github/workflows/wheels.yml index 7540025..d2846f1 100644 --- a/.github/workflows/wheels.yml +++ b/.github/workflows/wheels.yml @@ -16,7 +16,7 @@ jobs: name: Build SDist runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: fetch-depth: 0 @@ -75,7 +75,7 @@ jobs: cibw_archs: "arm64" steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: fetch-depth: 0 From d2faa2129033c5ad440ea9664f880bb1b746c2b7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 2 Oct 2023 15:33:20 -0500 Subject: [PATCH 20/43] Bump docker/setup-qemu-action from 2 to 3 (#97) Bumps [docker/setup-qemu-action](https://github.com/docker/setup-qemu-action) from 2 to 3. - [Release notes](https://github.com/docker/setup-qemu-action/releases) - [Commits](https://github.com/docker/setup-qemu-action/compare/v2...v3) --- updated-dependencies: - dependency-name: docker/setup-qemu-action dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/wheels.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/wheels.yml b/.github/workflows/wheels.yml index d2846f1..8f619a1 100644 --- a/.github/workflows/wheels.yml +++ b/.github/workflows/wheels.yml @@ -87,7 +87,7 @@ jobs: # see https://cibuildwheel.readthedocs.io/en/stable/faq/#emulation - name: Setup QEMU (for aarch64) if: matrix.cibw_archs == 'aarch64' - uses: docker/setup-qemu-action@v2 + uses: docker/setup-qemu-action@v3 with: platforms: arm64 From fb6b33ad0fd6c3ee12eabd7ca225c7a17b3c4659 Mon Sep 17 00:00:00 2001 From: Erik Welch Date: Mon, 2 Oct 2023 15:58:55 -0500 Subject: [PATCH 21/43] Update to 8.2.0 (#98) No changes to the C API --- .flake8 | 3 ++- .github/workflows/test.yml | 2 +- .pre-commit-config.yaml | 16 ++++++++-------- 3 files changed, 11 insertions(+), 10 deletions(-) diff --git a/.flake8 b/.flake8 index 414785b..efbe9a5 100644 --- a/.flake8 +++ b/.flake8 @@ -5,4 +5,5 @@ extend-ignore = E203, # E203 whitespace before ':' (to be compatible with black) per-file-ignores = - suitesparse_graphblas/io/binary.py:C408 + suitesparse_graphblas/io/binary.py:C408, + suitesparse_graphblas/tests/test_io.py:E721, diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 4505b2a..7fd09f6 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -19,7 +19,7 @@ jobs: # os: ["ubuntu-latest"] # source: ["source"] python-version: ["3.8", "3.9", "3.10", "3.11"] - graphblas-version: ["8.0.2"] + graphblas-version: ["8.2.0"] steps: - name: Checkout uses: actions/checkout@v4 diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 535fee8..64bed06 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -20,12 +20,12 @@ repos: - id: mixed-line-ending # - id: trailing-whitespace - repo: https://github.com/abravalheri/validate-pyproject - rev: v0.13 + rev: v0.14 hooks: - id: validate-pyproject name: Validate pyproject.toml - repo: https://github.com/PyCQA/autoflake - rev: v2.2.0 + rev: v2.2.1 hooks: - id: autoflake args: [--in-place] @@ -34,7 +34,7 @@ repos: hooks: - id: isort - repo: https://github.com/asottile/pyupgrade - rev: v3.7.0 + rev: v3.13.0 hooks: - id: pyupgrade args: [--py38-plus] @@ -44,19 +44,19 @@ repos: # - id: auto-walrus # args: [--line-length, "100"] - repo: https://github.com/psf/black - rev: 23.3.0 + rev: 23.9.1 hooks: - id: black # - id: black-jupyter - repo: https://github.com/PyCQA/flake8 - rev: 6.0.0 + rev: 6.1.0 hooks: - id: flake8 additional_dependencies: &flake8_dependencies # These versions need updated manually - - flake8==6.0.0 - - flake8-comprehensions==3.13.0 - - flake8-bugbear==23.6.5 + - flake8==6.1.0 + - flake8-comprehensions==3.14.0 + - flake8-bugbear==23.9.16 # - flake8-simplify==0.20.0 - repo: https://github.com/asottile/yesqa rev: v1.5.0 From 8d55769669b8cda4e095e5077782c31bacf80dad Mon Sep 17 00:00:00 2001 From: Erik Welch Date: Mon, 2 Oct 2023 17:21:50 -0500 Subject: [PATCH 22/43] Try building with cffi <1.16 (#99) Our automatic wheel builds failed --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 7265a23..35f3211 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ requires = [ "setuptools >=64", "setuptools-git-versioning", "wheel", - "cffi>=1.11", + "cffi>=1.11,<1.16", "cython", "oldest-supported-numpy", ] From 35393b10c755324f410215f5941bf293ee3282a3 Mon Sep 17 00:00:00 2001 From: Adam Lugowski Date: Wed, 4 Oct 2023 19:30:56 -0700 Subject: [PATCH 23/43] Fix Linux Python 3.12 wheel build (#102) * Install libffi-dev for Ubuntu Python 3.12 wheel * Drop 3.12 from regular tests as it's not available from Conda yet --- .github/workflows/wheels.yml | 3 +++ pyproject.toml | 1 + 2 files changed, 4 insertions(+) diff --git a/.github/workflows/wheels.yml b/.github/workflows/wheels.yml index 8f619a1..0651373 100644 --- a/.github/workflows/wheels.yml +++ b/.github/workflows/wheels.yml @@ -120,6 +120,9 @@ jobs: # Build SuiteSparse CIBW_BEFORE_ALL: bash suitesparse.sh ${{ github.ref }} + # Install FFI dev library, needed for Python 3.12 + CIBW_BEFORE_BUILD_LINUX: yum install -y libffi-devel + CIBW_ENVIRONMENT_LINUX: SUITESPARSE_FAST_BUILD=${{ env.SUITESPARSE_FAST_BUILD }} # CMAKE_GNUtoMS=ON asks suitesparse.sh to build libraries in MSVC style on Windows. diff --git a/pyproject.toml b/pyproject.toml index 35f3211..e2aaaee 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -53,6 +53,7 @@ classifiers = [ "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3 :: Only", "Intended Audience :: Developers", "Intended Audience :: Other Audience", From cdc1a5cf6757c4c45b0ab5b3767ae19531d70ca2 Mon Sep 17 00:00:00 2001 From: Adam Lugowski Date: Wed, 4 Oct 2023 19:31:49 -0700 Subject: [PATCH 24/43] Make PyPy wheels work (#100) * Unpin numpy version for PyPy wheels * Skip PyPy 3.10 due to lack of numpy wheels --- .github/workflows/wheels.yml | 7 +++++-- pyproject.toml | 5 ++++- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/.github/workflows/wheels.yml b/.github/workflows/wheels.yml index 0651373..1bc5145 100644 --- a/.github/workflows/wheels.yml +++ b/.github/workflows/wheels.yml @@ -138,8 +138,11 @@ jobs: # Architectures to build specified in matrix CIBW_ARCHS: ${{ matrix.cibw_archs }} - # No 32-bit builds, no musllinux, no PyPy aarch64 (only due to build speed, numpy does not ship aarch64 pypy wheels) - CIBW_SKIP: "*-win32 *_i686 *musl* pp*aarch64" + # No 32-bit builds + # no musllinux + # no PyPy aarch64 (only due to build speed, numpy does not ship aarch64 pypy wheels) + # as of writing numpy does not support pypy 3.10 + CIBW_SKIP: "*-win32 *_i686 *musl* pp*aarch64 pp310*" # Use delvewheel on Windows. # This copies graphblas.dll into the wheel. "repair" in cibuildwheel parlance includes copying any shared diff --git a/pyproject.toml b/pyproject.toml index e2aaaee..7e97dd8 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -6,7 +6,10 @@ requires = [ "wheel", "cffi>=1.11,<1.16", "cython", - "oldest-supported-numpy", + "oldest-supported-numpy; platform_python_implementation != 'PyPy'", + # Inspired by SciPy: unpin numpy version for PyPy builds, + # as oldest-supported-numpy does not take PyPy into account. + "numpy; platform_python_implementation=='PyPy'", ] [project] From f7402c540027726d3d4b8eab74a4e4cf3c769fa1 Mon Sep 17 00:00:00 2001 From: Adam Lugowski Date: Wed, 4 Oct 2023 19:33:05 -0700 Subject: [PATCH 25/43] Enable testing macOS wheels (#101) --- .github/workflows/wheels.yml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.github/workflows/wheels.yml b/.github/workflows/wheels.yml index 1bc5145..6911bf0 100644 --- a/.github/workflows/wheels.yml +++ b/.github/workflows/wheels.yml @@ -160,9 +160,7 @@ jobs: CIBW_TEST_COMMAND: "pytest --pyargs suitesparse_graphblas -s -k test_print_jit_config && pytest -v --pyargs suitesparse_graphblas" # GitHub Actions macOS Intel runner cannot run ARM tests. Uncomment to silence warning. - # CIBW_TEST_SKIP: "*-macosx_arm64" - # XXX: tests are failing for macos_x86_64; let's see if we can figure out what's wrong by releasing a broken package... (sorry!) - CIBW_TEST_SKIP: "*-macosx_*" + CIBW_TEST_SKIP: "*-macosx_arm64" run: | python -m pip install --upgrade pip From f83627a3c83178a2513592979cda32921e55f352 Mon Sep 17 00:00:00 2001 From: Erik Welch Date: Thu, 5 Oct 2023 09:01:56 -0500 Subject: [PATCH 26/43] Test Python 3.12 in CI (#103) --- .github/workflows/test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 7fd09f6..2a7d795 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -18,7 +18,7 @@ jobs: source: ["conda-forge"] # os: ["ubuntu-latest"] # source: ["source"] - python-version: ["3.8", "3.9", "3.10", "3.11"] + python-version: ["3.8", "3.9", "3.10", "3.11", "3.12"] graphblas-version: ["8.2.0"] steps: - name: Checkout From a317886b4535de1be86a09dfc1b0952228eaef3e Mon Sep 17 00:00:00 2001 From: Erik Welch Date: Thu, 5 Oct 2023 16:35:51 -0500 Subject: [PATCH 27/43] Revert #99 (#104) --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 7e97dd8..e6312d1 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ requires = [ "setuptools >=64", "setuptools-git-versioning", "wheel", - "cffi>=1.11,<1.16", + "cffi>=1.11", "cython", "oldest-supported-numpy; platform_python_implementation != 'PyPy'", # Inspired by SciPy: unpin numpy version for PyPy builds, From 84e41c2deab8f1e2cbe3a4aac53a7d84e92c9552 Mon Sep 17 00:00:00 2001 From: Adam Lugowski Date: Fri, 6 Oct 2023 08:06:14 -0700 Subject: [PATCH 28/43] Run wheels workflow on PR and cibuildwheel github action (#105) * Add SUITESPARSE_FASTEST_BUILD option * Build wheels on PR * Switch to cibuildwheel github action * Limit push wheels action run to only main branch --- .github/workflows/wheels.yml | 85 +++++++++++++++++++----------------- suitesparse.sh | 23 +++++++++- 2 files changed, 65 insertions(+), 43 deletions(-) diff --git a/.github/workflows/wheels.yml b/.github/workflows/wheels.yml index 6911bf0..24c440a 100644 --- a/.github/workflows/wheels.yml +++ b/.github/workflows/wheels.yml @@ -7,6 +7,11 @@ on: # Enable Run Workflow button in GitHub UI workflow_dispatch: + push: + branches: [ main ] + + pull_request: + concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true @@ -34,55 +39,47 @@ jobs: build_wheels: name: Wheels - ${{ matrix.cibw_archs }} - ${{ matrix.os }} runs-on: ${{ matrix.os }} + env: + # graphblas version to use if another one is not provided + default-graphblas-version: "8.2.0" + strategy: fail-fast: false matrix: - # Loosely based on scikit-learn's config: - # https://github.com/scikit-learn/scikit-learn/blob/main/.github/workflows/wheels.yml include: - os: windows-latest - python-version: "3.8" - platform_id: win_amd64 - cibw_archs: "auto" + cibw_archs: "auto64" - # Linux 64 bit manylinux2014 + # Linux x86 - os: ubuntu-latest - python-version: "3.8" - platform_id: manylinux_x86_64 - manylinux_image: manylinux2014 - cibw_archs: "native" + cibw_archs: "x86_64" + # skip musllinux + cibw_skip: "*musl*" - # Linux 64 bit manylinux2014 for aarch64 + # Linux aarch64 # Separate runner because this requires emulation (only x86 runners are available) and is very slow. - os: ubuntu-latest - python-version: "3.8" - platform_id: manylinux_x86_64 - manylinux_image: manylinux2014 cibw_archs: "aarch64" + # numpy wheels not available for aarch64 PyPy or musllinux + cibw_skip: "pp* *musl*" # macOS x86 - os: macos-latest - python-version: "3.8" - platform_id: macosx_x86_64 cibw_archs: "x86_64" - # Use x86 macOS runner to build ARM. + # macOS Apple Silicon cross-compiled on x86 macOS runner. # GitHub does not offer Apple Silicon yet (only for self-hosted). # See https://github.com/github/roadmap/issues/528 - os: macos-latest - python-version: "3.8" - platform_id: macosx_x86_64 cibw_archs: "arm64" + # Skip macOS ARM tests on Intel runner. + cibw_test_skip: "*-macosx_arm64" steps: - uses: actions/checkout@v4 with: fetch-depth: 0 - - uses: actions/setup-python@v4 - with: - python-version: ${{ matrix.python-version }} - # aarch64 Linux builds are cross-compiled on x86 runners using emulation # see https://cibuildwheel.readthedocs.io/en/stable/faq/#emulation - name: Setup QEMU (for aarch64) @@ -98,6 +95,20 @@ jobs: run: | echo "SUITESPARSE_FAST_BUILD=1" >> $GITHUB_ENV + - name: Setup for testing + if: github.event_name == 'push' || github.event_name == 'pull_request' + # Ask suitesparse.sh to compile in the fastest way possible and provide a GB version to build + run: | + echo "SUITESPARSE_FASTEST_BUILD=1" >> $GITHUB_ENV + echo "GB_VERSION_REF=refs/tags/${{ env.default-graphblas-version }}.0" >> $GITHUB_ENV + shell: bash + + - name: Setup GraphBLAS version from git tag + if: ${{ startsWith(github.ref, 'refs/tags/') }} + # If this is a tagged ref, like a release, then use the tag for the graphblas version + run: echo "GB_VERSION_REF=${{ github.ref }}" >> $GITHUB_ENV + shell: bash + - name: Install tools (macOS) if: contains(matrix.os, 'macos') # Install coreutils which includes `nproc` used by `make -j` in suitesparse.sh @@ -112,18 +123,20 @@ jobs: sh add_arm_to_libomp_dylib.sh fi - - name: Build Wheels + - uses: pypa/cibuildwheel@v2.16 + with: + output-dir: wheelhouse env: # very verbose CIBW_BUILD_VERBOSITY: 3 # Build SuiteSparse - CIBW_BEFORE_ALL: bash suitesparse.sh ${{ github.ref }} + CIBW_BEFORE_ALL: bash suitesparse.sh ${{ env.GB_VERSION_REF }} # Install FFI dev library, needed for Python 3.12 CIBW_BEFORE_BUILD_LINUX: yum install -y libffi-devel - CIBW_ENVIRONMENT_LINUX: SUITESPARSE_FAST_BUILD=${{ env.SUITESPARSE_FAST_BUILD }} + CIBW_ENVIRONMENT_PASS_LINUX: SUITESPARSE_FAST_BUILD SUITESPARSE_FASTEST_BUILD # CMAKE_GNUtoMS=ON asks suitesparse.sh to build libraries in MSVC style on Windows. CIBW_ENVIRONMENT_WINDOWS: CMAKE_GNUtoMS=ON GRAPHBLAS_PREFIX="C:/GraphBLAS" @@ -138,11 +151,8 @@ jobs: # Architectures to build specified in matrix CIBW_ARCHS: ${{ matrix.cibw_archs }} - # No 32-bit builds - # no musllinux - # no PyPy aarch64 (only due to build speed, numpy does not ship aarch64 pypy wheels) # as of writing numpy does not support pypy 3.10 - CIBW_SKIP: "*-win32 *_i686 *musl* pp*aarch64 pp310*" + CIBW_SKIP: "${{ matrix.cibw_skip }} pp310*" # Use delvewheel on Windows. # This copies graphblas.dll into the wheel. "repair" in cibuildwheel parlance includes copying any shared @@ -159,14 +169,7 @@ jobs: # run tests CIBW_TEST_COMMAND: "pytest --pyargs suitesparse_graphblas -s -k test_print_jit_config && pytest -v --pyargs suitesparse_graphblas" - # GitHub Actions macOS Intel runner cannot run ARM tests. Uncomment to silence warning. - CIBW_TEST_SKIP: "*-macosx_arm64" - - run: | - python -m pip install --upgrade pip - python -m pip install cibuildwheel - python -m cibuildwheel --output-dir wheelhouse . - shell: bash + CIBW_TEST_SKIP: ${{ matrix.cibw_test_skip }} - uses: actions/upload-artifact@v3 id: uploadAttempt1 @@ -189,8 +192,8 @@ jobs: name: Upload to PyPI needs: [build_wheels, build_sdist] runs-on: ubuntu-latest - if: github.repository == 'GraphBLAS/python-suitesparse-graphblas' - # if: github.event_name == 'release' && github.event.action == 'published' + # only upload releases to PyPI + if: github.repository == 'GraphBLAS/python-suitesparse-graphblas' && github.event_name == 'release' && github.event.action == 'published' steps: - uses: actions/setup-python@v4 @@ -212,4 +215,4 @@ jobs: # Test PyPI: # password: ${{ secrets.TEST_PYPI_API_TOKEN }} - # repository_url: https://test.pypi.org/legacy/ + # repository-url: https://test.pypi.org/legacy/ diff --git a/suitesparse.sh b/suitesparse.sh index 56c6784..1376bb3 100755 --- a/suitesparse.sh +++ b/suitesparse.sh @@ -87,8 +87,27 @@ if [ -n "${SUITESPARSE_FAST_BUILD}" ]; then echo "#define GxB_NO_UINT8 1" >> ../Source/GB_control.h fi -# Disable all Source/Generated2 kernels. For workflow development only. -#cmake_params+=(-DCMAKE_CUDA_DEV=1) +if [ -n "${SUITESPARSE_FASTEST_BUILD}" ]; then + echo "suitesparse.sh: Fastest build requested." + # Fastest build possible. For use in development and automated tests that do not depend on performance. + + echo "#define GxB_NO_BOOL 1" >> ../Source/GB_control.h + echo "#define GxB_NO_FP32 1" >> ../Source/GB_control.h + echo "#define GxB_NO_FP64 1" >> ../Source/GB_control.h + echo "#define GxB_NO_FC32 1" >> ../Source/GB_control.h + echo "#define GxB_NO_FC64 1" >> ../Source/GB_control.h + echo "#define GxB_NO_INT16 1" >> ../Source/GB_control.h + echo "#define GxB_NO_INT32 1" >> ../Source/GB_control.h + echo "#define GxB_NO_INT64 1" >> ../Source/GB_control.h + echo "#define GxB_NO_INT8 1" >> ../Source/GB_control.h + echo "#define GxB_NO_UINT16 1" >> ../Source/GB_control.h + echo "#define GxB_NO_UINT32 1" >> ../Source/GB_control.h + echo "#define GxB_NO_UINT64 1" >> ../Source/GB_control.h + echo "#define GxB_NO_UINT8 1" >> ../Source/GB_control.h + + # Disable all Source/Generated2 kernels. For workflow development only. + cmake_params+=(-DCMAKE_CUDA_DEV=1) +fi # Use `-DJITINIT=2` so that the JIT functionality is available, but disabled by default. # Level 2, "run", means that pre-JIT kernels may be used, which does not require a compiler at runtime. From 98394c704904e03497c814dfb3f29dffd6fa5602 Mon Sep 17 00:00:00 2001 From: Erik Welch Date: Fri, 6 Oct 2023 12:12:47 -0500 Subject: [PATCH 29/43] Set COMPACT for fastest build (#107) --- suitesparse.sh | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/suitesparse.sh b/suitesparse.sh index 1376bb3..2264ef0 100755 --- a/suitesparse.sh +++ b/suitesparse.sh @@ -105,6 +105,10 @@ if [ -n "${SUITESPARSE_FASTEST_BUILD}" ]; then echo "#define GxB_NO_UINT64 1" >> ../Source/GB_control.h echo "#define GxB_NO_UINT8 1" >> ../Source/GB_control.h + # Setting COMPACT probably makes setting config in GB_control.h above unnecessary + cmake_params+=(-DCOMPACT=1) + # Also no JIT for the fastest possible build + cmake_params+=(-DNJIT=1) # Disable all Source/Generated2 kernels. For workflow development only. cmake_params+=(-DCMAKE_CUDA_DEV=1) fi From fc4d14dc636cdcd4b4170f04a7fd4574230b6293 Mon Sep 17 00:00:00 2001 From: Adam Lugowski Date: Fri, 6 Oct 2023 13:01:11 -0700 Subject: [PATCH 30/43] Add musllinux wheels (#106) --- .github/workflows/wheels.yml | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/.github/workflows/wheels.yml b/.github/workflows/wheels.yml index 24c440a..ccb699a 100644 --- a/.github/workflows/wheels.yml +++ b/.github/workflows/wheels.yml @@ -37,7 +37,7 @@ jobs: build_wheels: - name: Wheels - ${{ matrix.cibw_archs }} - ${{ matrix.os }} + name: Wheels - ${{ matrix.cibw_archs }} ${{ matrix.arch_note}} - ${{ matrix.os }} runs-on: ${{ matrix.os }} env: # graphblas version to use if another one is not provided @@ -50,12 +50,22 @@ jobs: - os: windows-latest cibw_archs: "auto64" - # Linux x86 + # Linux x86 manylinux - os: ubuntu-latest cibw_archs: "x86_64" + # Python 3.12 wheel requires libffi-devel to be installed. manylinux container uses yum + cibw_before_build_linux: "yum install -y libffi-devel" # skip musllinux cibw_skip: "*musl*" + # Linux x86 musllinux + # Separate runner for a Musl build of graphblas. The glibc build is not guaranteed to be compatible. + - os: ubuntu-latest + cibw_archs: "x86_64" + arch_note: "musl" + # skip manylinux (built elsewhere), PyPy (no musl numpy wheels), CPython 3.8 (no musl numpy wheels) + cibw_skip: "*many* pp* cp38*" + # Linux aarch64 # Separate runner because this requires emulation (only x86 runners are available) and is very slow. - os: ubuntu-latest @@ -133,8 +143,7 @@ jobs: # Build SuiteSparse CIBW_BEFORE_ALL: bash suitesparse.sh ${{ env.GB_VERSION_REF }} - # Install FFI dev library, needed for Python 3.12 - CIBW_BEFORE_BUILD_LINUX: yum install -y libffi-devel + CIBW_BEFORE_BUILD_LINUX: ${{ matrix.cibw_before_build_linux }} CIBW_ENVIRONMENT_PASS_LINUX: SUITESPARSE_FAST_BUILD SUITESPARSE_FASTEST_BUILD From 78456b5402e3a5c36792597a9ee60f35821c7d0f Mon Sep 17 00:00:00 2001 From: Adam Lugowski Date: Sat, 7 Oct 2023 08:21:38 -0700 Subject: [PATCH 31/43] Add Adam as maintainer (#108) --- pyproject.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/pyproject.toml b/pyproject.toml index e6312d1..bff0249 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -29,6 +29,7 @@ maintainers = [ {name = "Erik Welch", email = "erik.n.welch@gmail.com"}, {name = "Jim Kitchen", email = "jim22k@gmail.com"}, {name = "Michel Pelletier", email = "michel@graphegon.com"}, + {name = "Adam Lugowski", email = "alugowski@gmail.com"}, ] keywords = [ "graphblas", From 0b92b85747284a8d089ad1009066f7b5b914ac3e Mon Sep 17 00:00:00 2001 From: Erik Welch Date: Fri, 13 Oct 2023 18:27:31 -0500 Subject: [PATCH 32/43] Update to SuiteSparse:GraphBLAS 8.2.1 (#110) * Update to SuiteSparse:GraphBLAS 8.2.1 * turn on echo in add_arm_to_libomp_dylib.sh --- .github/workflows/test.yml | 2 +- .github/workflows/wheels.yml | 4 ++-- add_arm_to_libomp_dylib.sh | 2 ++ 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 2a7d795..24498e8 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -19,7 +19,7 @@ jobs: # os: ["ubuntu-latest"] # source: ["source"] python-version: ["3.8", "3.9", "3.10", "3.11", "3.12"] - graphblas-version: ["8.2.0"] + graphblas-version: ["8.2.1"] steps: - name: Checkout uses: actions/checkout@v4 diff --git a/.github/workflows/wheels.yml b/.github/workflows/wheels.yml index ccb699a..32c8efb 100644 --- a/.github/workflows/wheels.yml +++ b/.github/workflows/wheels.yml @@ -2,7 +2,7 @@ name: Python wheel package build and publish on: release: - types: [created] + types: [published] # Enable Run Workflow button in GitHub UI workflow_dispatch: @@ -41,7 +41,7 @@ jobs: runs-on: ${{ matrix.os }} env: # graphblas version to use if another one is not provided - default-graphblas-version: "8.2.0" + default-graphblas-version: "8.2.1" strategy: fail-fast: false diff --git a/add_arm_to_libomp_dylib.sh b/add_arm_to_libomp_dylib.sh index 5109f98..99e32b0 100755 --- a/add_arm_to_libomp_dylib.sh +++ b/add_arm_to_libomp_dylib.sh @@ -19,6 +19,8 @@ if [ "$(arch)" != "x86_64" ] && [ "$(arch)" != "i386" ]; then exit 1; fi +set -x # echo on + #mkdir x86lib mkdir armlib From f8cd3b48ebe2ca0a8680fb47f4b0596bc86e71b6 Mon Sep 17 00:00:00 2001 From: Adam Lugowski Date: Sat, 14 Oct 2023 09:19:26 -0700 Subject: [PATCH 33/43] Add retry to brew calls (#111) --- .github/workflows/wheels.yml | 6 +++--- add_arm_to_libomp_dylib.sh | 5 +++-- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/.github/workflows/wheels.yml b/.github/workflows/wheels.yml index 32c8efb..8c02dc5 100644 --- a/.github/workflows/wheels.yml +++ b/.github/workflows/wheels.yml @@ -126,11 +126,11 @@ jobs: # GitHub actions comes with libomp already installed, but for its native arch only. Must build universal one # manually so that both x86 and arm builds can be built. run: | - brew install coreutils - brew install libomp + brew fetch --retry coreutils && brew install coreutils + brew fetch --retry libomp && brew install libomp if [[ ${{ matrix.cibw_archs }} == "arm64" ]] ; then echo "Building universal libomp manually" - sh add_arm_to_libomp_dylib.sh + sh add_arm_to_libomp_dylib.sh || exit 1 fi - uses: pypa/cibuildwheel@v2.16 diff --git a/add_arm_to_libomp_dylib.sh b/add_arm_to_libomp_dylib.sh index 99e32b0..40f657c 100755 --- a/add_arm_to_libomp_dylib.sh +++ b/add_arm_to_libomp_dylib.sh @@ -20,13 +20,14 @@ if [ "$(arch)" != "x86_64" ] && [ "$(arch)" != "i386" ]; then fi set -x # echo on +set -e # fail fast #mkdir x86lib mkdir armlib # download and unzip both x86 and arm libomp tarballs -#brew fetch --force --bottle-tag=x86_64_monterey libomp -brew fetch --force --bottle-tag=arm64_big_sur libomp +#brew fetch --retry --force --bottle-tag=x86_64_monterey libomp +brew fetch --retry --force --bottle-tag=arm64_big_sur libomp # untar #tar -xzf $(brew --cache --bottle-tag=x86_64_monterey libomp) --strip-components 2 -C x86lib From 093c2ad81de29454011b6cc47829b4a03367b401 Mon Sep 17 00:00:00 2001 From: Adam Lugowski Date: Sat, 14 Oct 2023 18:20:18 -0700 Subject: [PATCH 34/43] Add an upload destination input to wheels workflow manual dispatch (#112) Add an upload destination input to wheels workflow manual dispatch --- .github/workflows/wheels.yml | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/.github/workflows/wheels.yml b/.github/workflows/wheels.yml index 8c02dc5..be6bfd8 100644 --- a/.github/workflows/wheels.yml +++ b/.github/workflows/wheels.yml @@ -6,6 +6,15 @@ on: # Enable Run Workflow button in GitHub UI workflow_dispatch: + inputs: + # Manual dispatch allows optional upload of wheels to PyPI + upload_dest: + type: choice + description: Upload wheels to + options: + - No Upload + - PyPI + - Test PyPI push: branches: [ main ] @@ -202,7 +211,7 @@ jobs: needs: [build_wheels, build_sdist] runs-on: ubuntu-latest # only upload releases to PyPI - if: github.repository == 'GraphBLAS/python-suitesparse-graphblas' && github.event_name == 'release' && github.event.action == 'published' + if: github.repository == 'GraphBLAS/python-suitesparse-graphblas' && ((github.event_name == 'release' && github.event.action == 'published') || (github.event_name == 'workflow_dispatch' && github.event.inputs.upload_dest != 'No Upload')) steps: - uses: actions/setup-python@v4 @@ -214,14 +223,20 @@ jobs: name: artifact path: dist + # Upload to PyPI - uses: pypa/gh-action-pypi-publish@release/v1 + if: github.event_name == 'release' || (github.event_name == 'workflow_dispatch' && github.event.inputs.upload_dest == 'PyPI') with: # PyPI does not allow replacing a file. Without this flag the entire action fails if even a single duplicate exists. skip-existing: true verbose: true - # Real PyPI: password: ${{ secrets.PYPI_TOKEN }} - # Test PyPI: - # password: ${{ secrets.TEST_PYPI_API_TOKEN }} - # repository-url: https://test.pypi.org/legacy/ + # Upload to Test PyPI + - uses: pypa/gh-action-pypi-publish@release/v1 + if: github.event_name == 'workflow_dispatch' && github.event.inputs.upload_dest == 'Test PyPI' + with: + # PyPI does not allow replacing a file. Without this flag the entire action fails if even a single duplicate exists. + skip-existing: true + verbose: true + repository-url: https://test.pypi.org/legacy/ From decaf1502d1a6053ba7b829e61b5ed796139ff2a Mon Sep 17 00:00:00 2001 From: Adam Lugowski Date: Sun, 15 Oct 2023 19:24:02 -0700 Subject: [PATCH 35/43] Add id-token permission for PyPI trusted publishing (#113) --- .github/workflows/wheels.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.github/workflows/wheels.yml b/.github/workflows/wheels.yml index be6bfd8..6127d17 100644 --- a/.github/workflows/wheels.yml +++ b/.github/workflows/wheels.yml @@ -25,6 +25,10 @@ concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true +permissions: + # For PyPI Trusted Publisher + id-token: write + jobs: build_sdist: name: Build SDist @@ -225,6 +229,7 @@ jobs: # Upload to PyPI - uses: pypa/gh-action-pypi-publish@release/v1 + name: Upload to PyPI if: github.event_name == 'release' || (github.event_name == 'workflow_dispatch' && github.event.inputs.upload_dest == 'PyPI') with: # PyPI does not allow replacing a file. Without this flag the entire action fails if even a single duplicate exists. @@ -234,6 +239,7 @@ jobs: # Upload to Test PyPI - uses: pypa/gh-action-pypi-publish@release/v1 + name: Upload to Test PyPI if: github.event_name == 'workflow_dispatch' && github.event.inputs.upload_dest == 'Test PyPI' with: # PyPI does not allow replacing a file. Without this flag the entire action fails if even a single duplicate exists. From 70fe2043a1082e494e7ee1d0b3b5461951dbeb5b Mon Sep 17 00:00:00 2001 From: Adam Lugowski Date: Wed, 1 Nov 2023 14:47:29 -0700 Subject: [PATCH 36/43] Manage GraphBLAS version with GB_VERSION.txt file (#114) * Manage GraphBLAS version with GB_VERSION.txt file Also include a script to fetch latest upstream GraphBLAS version, as well as a workflow that can auto-update this file on a schedule. * Add shebang and drop unnecessary variable --- .github/workflows/test.yml | 11 ++--- .github/workflows/update_graphblas.yml | 61 +++++++++++++++++++++++++ .github/workflows/wheels.yml | 12 +++-- GB_VERSION.txt | 1 + latest_suitesparse_graphblas_version.py | 27 +++++++++++ 5 files changed, 101 insertions(+), 11 deletions(-) create mode 100644 .github/workflows/update_graphblas.yml create mode 100644 GB_VERSION.txt create mode 100644 latest_suitesparse_graphblas_version.py diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 24498e8..8c6249f 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -19,7 +19,6 @@ jobs: # os: ["ubuntu-latest"] # source: ["source"] python-version: ["3.8", "3.9", "3.10", "3.11", "3.12"] - graphblas-version: ["8.2.1"] steps: - name: Checkout uses: actions/checkout@v4 @@ -38,19 +37,19 @@ jobs: - name: GraphBLAS (from conda-forge) if: (contains(matrix.source, 'conda-forge')) run: | - conda install graphblas=${{ matrix.graphblas-version }} + conda install graphblas=$(cat GB_VERSION.txt) - name: GraphBLAS (from source) if: (contains(matrix.source, 'source')) run: | # From release (does not work with beta versions) - GRAPHBLAS_PREFIX=${CONDA_PREFIX} bash suitesparse.sh refs/tags/${{ matrix.graphblas-version }}.0 + GRAPHBLAS_PREFIX=${CONDA_PREFIX} bash suitesparse.sh refs/tags/$(cat GB_VERSION.txt).0 # From tag - # curl -L https://github.com/DrTimothyAldenDavis/GraphBLAS/archive/refs/tags/v${{ matrix.graphblas-version }}.tar.gz | tar xzf - - # pushd GraphBLAS-${{ matrix.graphblas-version }}/build + # curl -L https://github.com/DrTimothyAldenDavis/GraphBLAS/archive/refs/tags/v$(cat GB_VERSION.txt).tar.gz | tar xzf - + # pushd GraphBLAS-$(cat GB_VERSION.txt)/build # From branch - # curl -L https://github.com/DrTimothyAldenDavis/GraphBLAS/tarball/${{ matrix.graphblas-version }} | tar xzf - + # curl -L https://github.com/DrTimothyAldenDavis/GraphBLAS/tarball/$(cat GB_VERSION.txt) | tar xzf - # pushd DrTim*/build # echo ${CONDA_PREFIX} diff --git a/.github/workflows/update_graphblas.yml b/.github/workflows/update_graphblas.yml new file mode 100644 index 0000000..b2ecb47 --- /dev/null +++ b/.github/workflows/update_graphblas.yml @@ -0,0 +1,61 @@ +# Checks for latest SuiteSparse:GraphBLAS version on GitHub and creates a PR to update the version used by this repo. +name: Check for GraphBLAS updates + +# In addition to permissions below, must explicitly allow GitHub Actions to create pull requests. +# This setting can be found in a repository's settings under Actions > General > Workflow permissions. +# https://github.com/peter-evans/create-pull-request#workflow-permissions +permissions: + contents: write + pull-requests: write + +on: + # Note: Workflow must run at least once to appear in workflows list. + # Push to the bot's branch to trigger workflow. + push: + branches: [ auto_update_gb_version ] + + # Note: Workflow must exist in main branch for workflow dispatch option to appear + workflow_dispatch: + + # Enable cron to check for updates once a day: +# schedule: +# - cron: '0 0 * * *' + +jobs: + gb_version_check: + name: Check for GraphBLAS update + if: github.repository == 'GraphBLAS/python-suitesparse-graphblas' || github.repository == 'alugowski/python-suitesparse-graphblas' + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - uses: actions/setup-python@v4 + with: + python-version: "3.11" + + - name: Get latest GraphBLAS version + run: | + python latest_suitesparse_graphblas_version.py > GB_VERSION.txt + echo "GB_VERSION=$(cat GB_VERSION.txt)" >> $GITHUB_ENV + shell: bash + + - name: Create Pull Request + uses: peter-evans/create-pull-request@v5 + with: + # See documentation: https://github.com/peter-evans/create-pull-request + # Action behavior: https://github.com/peter-evans/create-pull-request#action-behaviour + # TL;DR: create a PR if there is a diff and keep it up to date with changes as they arrive. + # + # To trigger tests with this PR set up a Personal Access Token as in the docs above. +# token: ${{ secrets.PAT }} + add-paths: GB_VERSION.txt + commit-message: Update to GraphBLAS ${{ env.GB_VERSION }} + title: Update to SuiteSparse:GraphBLAS ${{ env.GB_VERSION }} + body: | + Auto-generated by `update_graphblas.yml` + + Close then reopen this PR to trigger tests. See [here](https://github.com/peter-evans/create-pull-request/blob/main/docs/concepts-guidelines.md#triggering-further-workflow-runs) for why automatic triggers do not work. + branch: auto_update_gb_version + delete-branch: true diff --git a/.github/workflows/wheels.yml b/.github/workflows/wheels.yml index 6127d17..3955c35 100644 --- a/.github/workflows/wheels.yml +++ b/.github/workflows/wheels.yml @@ -52,10 +52,6 @@ jobs: build_wheels: name: Wheels - ${{ matrix.cibw_archs }} ${{ matrix.arch_note}} - ${{ matrix.os }} runs-on: ${{ matrix.os }} - env: - # graphblas version to use if another one is not provided - default-graphblas-version: "8.2.1" - strategy: fail-fast: false matrix: @@ -123,7 +119,13 @@ jobs: # Ask suitesparse.sh to compile in the fastest way possible and provide a GB version to build run: | echo "SUITESPARSE_FASTEST_BUILD=1" >> $GITHUB_ENV - echo "GB_VERSION_REF=refs/tags/${{ env.default-graphblas-version }}.0" >> $GITHUB_ENV + shell: bash + + - name: Setup GraphBLAS version from GB_VERSION.txt + # Use GraphBLAS version specified in GB_VERSION.txt unless specified in a git tag (next workflow step). + # Git tag method required for uploads to PyPI. + if: github.event_name != 'release' && github.event.inputs.upload_dest != 'PyPI' + run: echo "GB_VERSION_REF=refs/tags/$(cat GB_VERSION.txt).0" >> $GITHUB_ENV shell: bash - name: Setup GraphBLAS version from git tag diff --git a/GB_VERSION.txt b/GB_VERSION.txt new file mode 100644 index 0000000..2b0aa21 --- /dev/null +++ b/GB_VERSION.txt @@ -0,0 +1 @@ +8.2.1 diff --git a/latest_suitesparse_graphblas_version.py b/latest_suitesparse_graphblas_version.py new file mode 100644 index 0000000..dbcc310 --- /dev/null +++ b/latest_suitesparse_graphblas_version.py @@ -0,0 +1,27 @@ +#!/usr/bin/env python + +""" +Find and print the latest version of SuiteSparse:GraphBLAS as published in this repo: +https://github.com/DrTimothyAldenDavis/GraphBLAS +""" + +import json +from urllib.error import URLError +from urllib.request import urlopen + +# fetch release data from GraphBLAS repo +for _ in range(5): + try: + with urlopen( + "https://api.github.com/repos/DrTimothyAldenDavis/GraphBLAS/releases/latest" + ) as url: + latest_release = json.load(url) + break + except URLError: + # sleep before trying again + from time import sleep + + sleep(1) + +version = latest_release["tag_name"].lstrip("v") +print(version) From 8020eb1eadbe830e5b49517c9bc8e65a13f69232 Mon Sep 17 00:00:00 2001 From: Adam Lugowski Date: Fri, 15 Dec 2023 13:20:40 -0800 Subject: [PATCH 37/43] Move libomp script to monterey (#117) --- add_arm_to_libomp_dylib.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/add_arm_to_libomp_dylib.sh b/add_arm_to_libomp_dylib.sh index 40f657c..d452ac1 100755 --- a/add_arm_to_libomp_dylib.sh +++ b/add_arm_to_libomp_dylib.sh @@ -27,11 +27,11 @@ mkdir armlib # download and unzip both x86 and arm libomp tarballs #brew fetch --retry --force --bottle-tag=x86_64_monterey libomp -brew fetch --retry --force --bottle-tag=arm64_big_sur libomp +brew fetch --retry --force --bottle-tag=arm64_monterey libomp # untar #tar -xzf $(brew --cache --bottle-tag=x86_64_monterey libomp) --strip-components 2 -C x86lib -tar -xzf $(brew --cache --bottle-tag=arm64_big_sur libomp) --strip-components 2 -C armlib +tar -xzf $(brew --cache --bottle-tag=arm64_monterey libomp) --strip-components 2 -C armlib # ARM and x86 dylibs have different install names due to different brew install directories. # The x86 install name will be expected so make the ARM install name match. From a955997332c897c14841d96ae1225901b0c9fea7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 15 Dec 2023 21:22:51 +0000 Subject: [PATCH 38/43] Bump conda-incubator/setup-miniconda from 2 to 3 (#115) --- .github/workflows/test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 8c6249f..8bbc36a 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -25,7 +25,7 @@ jobs: with: fetch-depth: 0 - name: Conda - uses: conda-incubator/setup-miniconda@v2 + uses: conda-incubator/setup-miniconda@v3 with: auto-update-conda: true python-version: ${{ matrix.python-version }} From 95e97bddb35983054fdaf453299c822b36b291cb Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 15 Dec 2023 22:25:33 +0000 Subject: [PATCH 39/43] Bump actions/setup-python from 4 to 5 (#116) --- .github/workflows/lint.yml | 2 +- .github/workflows/update_graphblas.yml | 2 +- .github/workflows/wheels.yml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 7e85047..595d77e 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -15,7 +15,7 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - - uses: actions/setup-python@v4 + - uses: actions/setup-python@v5 with: python-version: "3.10" - uses: pre-commit/action@v3.0.0 diff --git a/.github/workflows/update_graphblas.yml b/.github/workflows/update_graphblas.yml index b2ecb47..6963532 100644 --- a/.github/workflows/update_graphblas.yml +++ b/.github/workflows/update_graphblas.yml @@ -31,7 +31,7 @@ jobs: with: fetch-depth: 0 - - uses: actions/setup-python@v4 + - uses: actions/setup-python@v5 with: python-version: "3.11" diff --git a/.github/workflows/wheels.yml b/.github/workflows/wheels.yml index 3955c35..123a017 100644 --- a/.github/workflows/wheels.yml +++ b/.github/workflows/wheels.yml @@ -220,7 +220,7 @@ jobs: if: github.repository == 'GraphBLAS/python-suitesparse-graphblas' && ((github.event_name == 'release' && github.event.action == 'published') || (github.event_name == 'workflow_dispatch' && github.event.inputs.upload_dest != 'No Upload')) steps: - - uses: actions/setup-python@v4 + - uses: actions/setup-python@v5 with: python-version: "3.x" From 9bc5787c4ae23c0a1736768dd286bd42ad0f629e Mon Sep 17 00:00:00 2001 From: Adam Lugowski Date: Mon, 18 Dec 2023 00:13:46 -0800 Subject: [PATCH 40/43] Bump actions/upload-artifact and download-artifact from 3 to 4 (#121) --- .github/workflows/wheels.yml | 25 +++++++++---------------- 1 file changed, 9 insertions(+), 16 deletions(-) diff --git a/.github/workflows/wheels.yml b/.github/workflows/wheels.yml index 123a017..d9f3bee 100644 --- a/.github/workflows/wheels.yml +++ b/.github/workflows/wheels.yml @@ -44,8 +44,9 @@ jobs: - name: Check metadata run: pipx run twine check dist/* - - uses: actions/upload-artifact@v3 + - uses: actions/upload-artifact@v4 with: + name: sdist path: dist/*.tar.gz @@ -195,22 +196,12 @@ jobs: CIBW_TEST_SKIP: ${{ matrix.cibw_test_skip }} - - uses: actions/upload-artifact@v3 - id: uploadAttempt1 - continue-on-error: true + - uses: actions/upload-artifact@v4 with: + name: wheels-${{ matrix.os }}-${{ matrix.cibw_archs }}${{ matrix.arch_note}} path: wheelhouse/*.whl if-no-files-found: error - # Retry upload if first attempt failed. This happens somewhat randomly and for irregular reasons. - # Logic is a duplicate of previous step. - - uses: actions/upload-artifact@v3 - id: uploadAttempt2 - if: steps.uploadAttempt1.outcome == 'failure' - continue-on-error: false - with: - path: wheelhouse/*.whl - if-no-files-found: error upload_all: name: Upload to PyPI @@ -224,10 +215,12 @@ jobs: with: python-version: "3.x" - - uses: actions/download-artifact@v3 + - uses: actions/download-artifact@v4 with: - name: artifact - path: dist + path: dist_artifacts + + - name: Flatten artifacts to dist/ + run: mkdir dist && find dist_artifacts -type f -exec mv {} dist \; # Upload to PyPI - uses: pypa/gh-action-pypi-publish@release/v1 From 8379cfa4e1a2c346fb4c9ad76db737ebafd86247 Mon Sep 17 00:00:00 2001 From: Adam Lugowski Date: Mon, 18 Dec 2023 21:59:38 -0800 Subject: [PATCH 41/43] Simplify download-artifact usage thanks to v4.1 `merge-multipole` input (#122) --- .github/workflows/wheels.yml | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/.github/workflows/wheels.yml b/.github/workflows/wheels.yml index d9f3bee..fb7acdf 100644 --- a/.github/workflows/wheels.yml +++ b/.github/workflows/wheels.yml @@ -217,10 +217,8 @@ jobs: - uses: actions/download-artifact@v4 with: - path: dist_artifacts - - - name: Flatten artifacts to dist/ - run: mkdir dist && find dist_artifacts -type f -exec mv {} dist \; + path: dist + merge-multiple: true # Upload to PyPI - uses: pypa/gh-action-pypi-publish@release/v1 From 2dc37779a95efea0889776eb633a69a8c355e89b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 12 Feb 2024 12:54:50 -0800 Subject: [PATCH 42/43] Bump pre-commit/action from 3.0.0 to 3.0.1 (#124) * Bump pre-commit/action from 3.0.0 to 3.0.1 Bumps [pre-commit/action](https://github.com/pre-commit/action) from 3.0.0 to 3.0.1. - [Release notes](https://github.com/pre-commit/action/releases) - [Commits](https://github.com/pre-commit/action/compare/v3.0.0...v3.0.1) --- updated-dependencies: - dependency-name: pre-commit/action dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] * Add pycparser to environment.yml --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Adam Lugowski --- .github/workflows/lint.yml | 2 +- continuous_integration/environment.yml | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 595d77e..4140839 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -18,4 +18,4 @@ jobs: - uses: actions/setup-python@v5 with: python-version: "3.10" - - uses: pre-commit/action@v3.0.0 + - uses: pre-commit/action@v3.0.1 diff --git a/continuous_integration/environment.yml b/continuous_integration/environment.yml index a5c0d41..00cf29e 100644 --- a/continuous_integration/environment.yml +++ b/continuous_integration/environment.yml @@ -10,3 +10,4 @@ dependencies: - pytest - pytest-randomly - coverage + - pycparser From 045d489732638ce416c007bfdad102ce61d7de53 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 12 Feb 2024 12:55:08 -0800 Subject: [PATCH 43/43] Bump peter-evans/create-pull-request from 5 to 6 (#123) Bumps [peter-evans/create-pull-request](https://github.com/peter-evans/create-pull-request) from 5 to 6. - [Release notes](https://github.com/peter-evans/create-pull-request/releases) - [Commits](https://github.com/peter-evans/create-pull-request/compare/v5...v6) --- updated-dependencies: - dependency-name: peter-evans/create-pull-request dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/update_graphblas.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/update_graphblas.yml b/.github/workflows/update_graphblas.yml index 6963532..c524aa0 100644 --- a/.github/workflows/update_graphblas.yml +++ b/.github/workflows/update_graphblas.yml @@ -42,7 +42,7 @@ jobs: shell: bash - name: Create Pull Request - uses: peter-evans/create-pull-request@v5 + uses: peter-evans/create-pull-request@v6 with: # See documentation: https://github.com/peter-evans/create-pull-request # Action behavior: https://github.com/peter-evans/create-pull-request#action-behaviour