From 3fe2c4a9cf04634dffdf6051be37a60254cbf53f Mon Sep 17 00:00:00 2001 From: Toby Davis Date: Wed, 18 Oct 2023 11:44:34 +0100 Subject: [PATCH 01/26] Update to documentation configuration --- .readthedocs.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.readthedocs.yaml b/.readthedocs.yaml index 1fc469f6..fa5fcd2e 100644 --- a/.readthedocs.yaml +++ b/.readthedocs.yaml @@ -6,11 +6,11 @@ formats: all # Set the build image to use the most recent version build: - image: latest + os: "ubuntu-22.04" # Set the python version and requirements python: - version: "3.8" + version: "3" # install: # - requirements: docs/requirements.txt From b916a471e82e45a2399723cbab0e8f0afa6cbb28 Mon Sep 17 00:00:00 2001 From: Toby Davis Date: Wed, 18 Oct 2023 11:51:22 +0100 Subject: [PATCH 02/26] Update XSIMD --- librapid/vendor/xsimd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/librapid/vendor/xsimd b/librapid/vendor/xsimd index 6f8cc98a..bb9558c6 160000 --- a/librapid/vendor/xsimd +++ b/librapid/vendor/xsimd @@ -1 +1 @@ -Subproject commit 6f8cc98a979cdd271eb0d2a1fd754613ae52b327 +Subproject commit bb9558c6b75ed336dce0a6696dd4958131bcae02 From f6ae9bd00875c9f497ffbd3ebbff819e68210440 Mon Sep 17 00:00:00 2001 From: Toby Davis Date: Fri, 20 Oct 2023 00:49:48 +0100 Subject: [PATCH 03/26] Bug fixes and some typos amended --- .../include/librapid/array/arrayTypeDef.hpp | 2 +- librapid/include/librapid/math/vectorImpl.hpp | 24 +++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/librapid/include/librapid/array/arrayTypeDef.hpp b/librapid/include/librapid/array/arrayTypeDef.hpp index d355d7d4..30e830ee 100644 --- a/librapid/include/librapid/array/arrayTypeDef.hpp +++ b/librapid/include/librapid/array/arrayTypeDef.hpp @@ -41,7 +41,7 @@ namespace librapid { using ArrayF = array::ArrayContainer>; /// A reference type for Array objects. Use this to accept Array objects as parameters since - /// the compiler cannot determine the templates tingle for the Array typedef. For more + /// the compiler cannot determine the templates for the Array typedef. For more /// granularity, you can also accept a raw ArrayContainer object. \tparam StorageType The /// storage type of the array. \see Array \see ArrayF \see Function \see FunctionRef template diff --git a/librapid/include/librapid/math/vectorImpl.hpp b/librapid/include/librapid/math/vectorImpl.hpp index bc8ff529..114d1b9d 100644 --- a/librapid/include/librapid/math/vectorImpl.hpp +++ b/librapid/include/librapid/math/vectorImpl.hpp @@ -489,6 +489,11 @@ namespace librapid { Vector(const Vector &other) = default; Vector(Vector &&other) noexcept = default; + template + explicit Vector(T value) { + for (uint64_t i = 0; i < dims; ++i) { m_data[i] = value; } + } + template explicit Vector(Args... args) : m_data {args...} {} @@ -559,6 +564,11 @@ namespace librapid { auto operator=(const Vector &other) -> Vector & = default; auto operator=(Vector &&other) noexcept -> Vector & = default; + auto operator=(const ScalarType &val) -> Vector & { + for (uint64_t i = 0; i < dims; ++i) { m_data[i] = val; } + return *this; + } + template auto operator=(const Vector &other) -> Vector & { *this = other.template cast(); @@ -1044,6 +1054,20 @@ namespace librapid { LIBRAPID_NODISCARD LIBRAPID_ALWAYS_INLINE auto norm(const T &val) { return val / mag(val); } + + template + LIBRAPID_NODISCARD LIBRAPID_ALWAYS_INLINE auto + random(const Vector &lower, + const Vector &upper) { + using Scalar = decltype(::librapid::random(lower[0], upper[0])); + constexpr uint64_t dims = (LowerDims > UpperDims) ? LowerDims : UpperDims; + Vector ret; + for (uint64_t i = 0; i < dims; ++i) { + ret[i] = ::librapid::random( + i < LowerDims ? lower[i] : 0, upper[i], i < UpperDims ? upper[i] : 1); + } + return ret; + } } // namespace librapid template From 00d7a40f803b9ae2e6a223c0a0ccabb7dfad2159 Mon Sep 17 00:00:00 2001 From: Toby Davis Date: Fri, 20 Oct 2023 02:10:50 +0100 Subject: [PATCH 04/26] Start of Python support --- .gitignore | 6 +- librapid/__init__.py | 1 + pyproject.toml | 47 +++++++++++++ requirements.txt | 10 +++ setup.py | 152 +++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 215 insertions(+), 1 deletion(-) create mode 100644 librapid/__init__.py create mode 100644 pyproject.toml create mode 100644 requirements.txt create mode 100644 setup.py diff --git a/.gitignore b/.gitignore index 3aabb8ce..f1450fec 100644 --- a/.gitignore +++ b/.gitignore @@ -24,4 +24,8 @@ docs/source/docBuild *.synctex.gz -*.DS_Store \ No newline at end of file +*.DS_Store + +_skbuild +librapid.egg-info +librapid/librapid.egg-info \ No newline at end of file diff --git a/librapid/__init__.py b/librapid/__init__.py new file mode 100644 index 00000000..ef0978eb --- /dev/null +++ b/librapid/__init__.py @@ -0,0 +1 @@ +print("Hello from LibRapid") \ No newline at end of file diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 00000000..6447573e --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,47 @@ +[build-system] +requires = [ + "setuptools", + "wheel", + "pybind11", + "cibuildwheel", + "scikit-build-core", + "cmake", + "ninja", + "icecream" +] +build-backend = "scikit_build_core.build" + +[tool.scikit-build] + +cmake.args = [ +] + +cmake.build-type = "Release" + +ninja.make-fallback = true + +sdist.exclude = [ + "CMakeLists.txt", + "cmake", + "CMakeFiles", + "build", + "dist", + "*.h", + "*.c", + "*.hpp", + "*.cpp", + "*.tcc", + "*.cxx", + "*.cu", + "*.cuh", + "*.cl", + "*.so", + "*.dylib", + "*.dll", + "*.doc", + "*.tgz", +] + +[project] +name = "librapid" +version = "0.7.3" diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 00000000..5b8082ab --- /dev/null +++ b/requirements.txt @@ -0,0 +1,10 @@ +setuptools +wheel +twine +cibuildwheel +pytest +pybind11 +cmake +scikit-build +packaging +icecream \ No newline at end of file diff --git a/setup.py b/setup.py new file mode 100644 index 00000000..316e6862 --- /dev/null +++ b/setup.py @@ -0,0 +1,152 @@ +# -*- coding: utf-8 -*- + +import os +import platform +import shutil +import sys +import site +import pathlib +from setuptools import find_packages +from skbuild import setup +from skbuild.cmaker import get_cmake_version +from skbuild.exceptions import SKBuildError +import re +from icecream import ic + + +class Version: + def __init__(self, versionStr): + self.versionStr = versionStr + self.version = tuple(map(int, versionStr.split("."))) + + def major(self): + return self.version[0] + + def minor(self): + return self.version[1] + + def patch(self): + return self.version[2] + + def __str__(self): + return self.versionStr + + def __lt__(self, other): + for a, b in zip(self.version, other.version): + if a < b: + return True + elif a > b: + return False + + +# Python implementation (CPython, PyPy, Jython, IronPython) +PYTHON_IMPLEMENTATION = ic(platform.python_implementation()) + +# Root directory +ROOT_DIR = ic(os.path.dirname(os.path.abspath(__file__))) + +setup_requires = [] +install_requires = [] + +try: + if ic(Version(get_cmake_version())) < Version("3.10"): + setup_requires.append('cmake') + install_requires.append("cmake") +except SKBuildError: + setup_requires.append('cmake') + install_requires.append("cmake") + +if ic(platform.system()) == "Windows" and PYTHON_IMPLEMENTATION == "CPython": + setup_requires.append('pywin32') + install_requires.append("pywin32") + +# The full version, including alpha/beta/rc tags +currentMajorVersion = None +currentMinorVersion = None +currentPatchVersion = None + +try: + with open("./version.txt") as versionFile: + text = versionFile.read() + currentMajorVersion = ic(re.search("MAJOR [0-9]+", text).group().split()[1]) + currentMinorVersion = ic(re.search("MINOR [0-9]+", text).group().split()[1]) + currentPatchVersion = ic(re.search("PATCH [0-9]+", text).group().split()[1]) +except Exception as e: + print("[ ERROR ] Failed to read version.txt") + print(e) + sys.exit(1) + +release = ic(f"{currentMajorVersion}.{currentMinorVersion}.{currentPatchVersion}") + +# Locate and read the contents of README.md +with open(os.path.join(ROOT_DIR, 'README.md'), encoding='utf-8') as f: + long_description = f.read() + +cmakeArgs = ["-DLIBRAPID_USE_MULTIPREC=ON"] +if ic(os.environ.get("LIBRAPID_NATIVE_ARCH")): # Only defined on GitHub Actions + cmakeArgs.append(f"-DLIBRAPID_NATIVE_ARCH={os.environ.get('LIBRAPID_NATIVE_ARCH')}") + +if ic(os.environ.get("LIBRAPID_CUDA_WHEEL")): + moduleName = "librapid_cuda_" + os.environ["LIBRAPID_CUDA_WHEEL"] +else: + moduleName = "librapid" + +# Use multiple cores if possible +cmakeArgs.append("-DCMAKE_BUILD_PARALLEL_LEVEL=0") + +setup( + name=moduleName, + version=release, + author="Toby Davis", + author_email="pencilcaseman@gmail.com", + url="https://github.com/LibRapid/librapid", + description="A highly optimised C++ library for high-performance computing", + long_description=long_description, + long_description_content_type="text/markdown", + # packages=ic(["librapid"] + ["librapid." + mod for mod in find_packages("librapid/python")]), + packages=ic(["librapid." + mod for mod in find_packages("librapid")]), + package_dir={"": "librapid"}, + cmake_args=cmakeArgs, + cmake_install_dir="librapid", + license="MIT License", + keywords=["librapid", + "high-performance computing", + "c++", + "mathematics", + "array", + "matrix", + "vector", + "tensor", + "gpu", + "cuda", + "openmp", + "multithreading", + "multicore" + "parallel"], + classifiers=[ + "Development Status :: 2 - Pre-Alpha", + "Intended Audience :: Developers", + "Intended Audience :: Education", + "License :: OSI Approved :: MIT License", + "Programming Language :: Python", + "Programming Language :: Python :: 3.6", + "Programming Language :: Python :: 3.7", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: C++", + "Operating System :: Microsoft :: Windows", + "Operating System :: POSIX :: Linux", + "Operating System :: MacOS :: MacOS X", + "Topic :: Scientific/Engineering :: Mathematics", + "Topic :: Scientific/Engineering :: Artificial Intelligence", + "Topic :: Software Development :: Libraries :: Python Modules" + ], + extras_require={"test": "pytest"}, + install_requires=install_requires, + setup_requires=setup_requires, + include_package_data=False, + zip_safe=True +) From 845a037f0fab3e7dddea7c5e7a05ac75e988e770 Mon Sep 17 00:00:00 2001 From: Toby Davis Date: Fri, 20 Oct 2023 12:21:09 +0100 Subject: [PATCH 05/26] Updates to Python Bindings: --- CMakeLists.txt | 190 +++++---------------------- cmake/pythonAPI.cmake | 0 librapid/bindings/__init__.py | 1 + librapid/bindings/python/__init__.py | 1 + librapid/bindings/python/test.cpp | 24 ++++ setup.py | 1 - 6 files changed, 56 insertions(+), 161 deletions(-) create mode 100644 cmake/pythonAPI.cmake create mode 100644 librapid/bindings/__init__.py create mode 100644 librapid/bindings/python/__init__.py create mode 100644 librapid/bindings/python/test.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 88d77454..b658e0bd 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -83,8 +83,36 @@ file(GLOB_RECURSE LIBRAPID_SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/librapid/cxxblas/*.cxx" # Source files ) -set(module_name "librapid") -add_library(${module_name} STATIC ${LIBRAPID_SOURCES}) +if (${SKBUILD}) + message(STATUS "[ LIBRAPID ] Building for Python") + set(module_name "_librapid") + + set(BUILD_SHARED_LIBS OFF CACHE BOOL "Build shared libraries" FORCE) + + message(STATUS "[ LIBRAPID ] Cloning PyBind11") + FetchContent_Declare( + pybind11 + GIT_REPOSITORY https://github.com/pybind/pybind11.git + ) + FetchContent_MakeAvailable(pybind11) + + file(GLOB_RECURSE PYTHON_SOURCES + "${CMAKE_CURRENT_SOURCE_DIR}/librapid/bindings/python/*.hpp" # Header files + "${CMAKE_CURRENT_SOURCE_DIR}/librapid/bindings/python/*.cpp" # Source files + ) + + pybind11_add_module( + ${module_name} MODULE + + ${LIBRAPID_SOURCES} + ${PYTHON_SOURCES} + ) + + install(TARGETS ${module_name} DESTINATION .) +else() + set(module_name "librapid") + add_library(${module_name} STATIC ${LIBRAPID_SOURCES}) +endif() # clang-format off target_compile_definitions(${module_name} PUBLIC LIBRAPID_MAJOR=${LIBRAPID_MAJOR}) @@ -172,163 +200,6 @@ if (LIBRAPID_USE_BLAS) configure_blas() endif () -## If LIBRAPID_MKL_CONFIG_PATH is set, use that instead of the default -#if (LIBRAPID_MKL_CONFIG_PATH) -# message(STATUS "[ LIBRAPID ] Using MKLConfig.cmake from ${LIBRAPID_MKL_CONFIG_PATH}") -# include(${LIBRAPID_MKL_CONFIG_PATH}) -# message(STATUS "[ LIBRAPID ] Linking against MKL") -# message(STATUS "[ LIBRAPID ] MKL Libraries: ${MKL_LIBRARIES}") -# message(STATUS "[ LIBRAPID ] MKL Include Directories: ${MKL_INCLUDE}") -# target_link_libraries(${module_name} PUBLIC MKL::MKL) -# target_include_directories(${module_name} PUBLIC ${MKL_INCLUDE}) -# target_compile_definitions(${module_name} PUBLIC LIBRAPID_HAS_BLAS) -# set(LIBRAPID_HAS_BLAS ON) -# set_blas_definition("MKL") -#endif () -# -#if (LIBRAPID_GET_BLAS AND NOT LIBRAPID_HAS_BLAS) -# message(STATUS "[ LIBRAPID ] Downloading OpenBLAS Build...") -# -# FetchContent_Declare( -# BuildOpenBLAS -# GIT_REPOSITORY https://github.com/LibRapid/BuildOpenBLAS.git -# ) -# -# FetchContent_MakeAvailable(BuildOpenBLAS) -# -# set(BLAS_FOUND TRUE) -# set(LIBRAPID_USE_BLAS TRUE) -# -# if (${IS_WINDOWS}) -# # Use openblas-windows-latest -# set(BLAS_LIBRARIES "${FETCHCONTENT_BASE_DIR}/buildopenblas-src/openblas-windows-latest/lib/openblas.lib") -# elseif (${IS_MACOS}) -# # Use openblas-macos-latest -# set(BLAS_LIBRARIES "${FETCHCONTENT_BASE_DIR}/buildopenblas-src/openblas-macos-latest/lib/libopenblas.a") -# else () # Linux and other systems -# # Use openblas-ubuntu-latest -# set(BLAS_LIBRARIES "${FETCHCONTENT_BASE_DIR}/buildopenblas-src/openblas-ubuntu-latest/lib/libopenblas.a") -# endif () -#endif () -# -## See if BLAS should be linked against -#if (LIBRAPID_USE_BLAS AND NOT LIBRAPID_HAS_BLAS) -# if (${BLAS_FOUND}) -# message(STATUS "[ LIBRAPID ] BLAS located was ${BLAS_LIBRARIES}") -# -# list(GET ${BLAS_LIBRARIES} 0 LIBRAPID_BLAS) -# -# if (NOT ${LIBRAPID_BLAS}) -# set(LIBRAPID_BLAS ${BLAS_LIBRARIES}) -# endif () -# -# message(STATUS "[ LIBRAPID ] Using BLAS (" ${LIBRAPID_BLAS} ")") -# -# get_filename_component(filepath ${LIBRAPID_BLAS} DIRECTORY) -# get_filename_component(filename ${LIBRAPID_BLAS} NAME) -# -# # Attempt to identify which BLAS library is being used and -# # set the appropriate compile definition -# set_blas_definition_from_file(filename) -# -# # Copy include files -# set(inc_path "${filepath}/../include") -# message(STATUS "[ LIBRAPID ] Checking path ${inc_path} for include files") -# FILE(GLOB_RECURSE files "${filepath}/..") -# message(STATUS "[ LIBRAPID ] Information: ${files}") -# if (NOT (EXISTS ${inc_path})) -# message(STATUS "[ LIBRAPID ] Could not locate include path for BLAS") -# endif () -# -# set(has_cblas OFF) -# -# if (EXISTS "${inc_path}/openblas") -# FILE(GLOB_RECURSE include_files "${inc_path}/openblas/*.*") -# foreach (file IN LISTS include_files) -# get_filename_component(inc_file ${file} NAME) -# if (${inc_file} STREQUAL "cblas.h") -# set(has_cblas ON) -# endif () -# endforeach () -# else () -# FILE(GLOB_RECURSE include_files "${inc_path}/*.*") -# foreach (file IN LISTS include_files) -# get_filename_component(inc_file ${file} NAME) -# if (${inc_file} STREQUAL "cblas.h") -# set(has_cblas ON) -# endif () -# endforeach () -# endif () -# -# if (${has_cblas}) -# if (EXISTS "${inc_path}/openblas") -# FILE(GLOB_RECURSE include_files "${inc_path}/openblas/*.*") -# foreach (file IN LISTS include_files) -# message(STATUS "[ LIBRAPID ] Found OpenBLAS include file " ${file}) -# get_filename_component(inc_file ${file} NAME) -# configure_file(${file} "${CMAKE_CURRENT_SOURCE_DIR}/librapid/blas/${inc_file}" COPYONLY) -# endforeach () -# endif () -# # else () -# -# FILE(GLOB_RECURSE include_files "${inc_path}/*.*") -# foreach (file IN LISTS include_files) -# message(STATUS "[ LIBRAPID ] Found include file " ${file}) -# get_filename_component(inc_file ${file} NAME) -# configure_file(${file} "${CMAKE_CURRENT_SOURCE_DIR}/librapid/blas/${inc_file}" COPYONLY) -# endforeach () -# -# # endif () -# -# # Copy library files -# get_filename_component(lib_name ${LIBRAPID_BLAS} NAME) -# # message(STATUS "[ LIBRAPID ] Found library file ${lib_name}") -# configure_file(${LIBRAPID_BLAS} "${CMAKE_CURRENT_SOURCE_DIR}/librapid/blas/${lib_name}" COPYONLY) -# endif () -# -# # Copy binary files if on Windows -# if (${CMAKE_SYSTEM_NAME} STREQUAL "Windows") -# set(bin_path "${filepath}/../bin") -# if (NOT (EXISTS ${bin_path})) -# message(WARNING "Could not locate folder for BLAS") -# else () -# FILE(GLOB_RECURSE include_files "${bin_path}/*.dll") -# foreach (file IN LISTS include_files) -# message(STATUS "[ LIBRAPID ] Found binary file " ${file}) -# get_filename_component(filename ${file} NAME) -# configure_file(${file} "${CMAKE_CURRENT_SOURCE_DIR}/librapid/blas/${filename}" COPYONLY) -# endforeach () -# -# FILE(GLOB_RECURSE bin_files "${CMAKE_CURRENT_SOURCE_DIR}/*.dll") -# foreach (file IN LISTS bin_files) -# message(STATUS "[ LIBRAPID ] Found packaged binary file " ${file}) -# get_filename_component(filename ${file} NAME) -# configure_file(${file} "${CMAKE_CURRENT_SOURCE_DIR}/librapid/blas/${filename}" COPYONLY) -# endforeach () -# endif () -# endif () -# -# # Add the compile definition so LibRapid knows it has BLAS -# if (${has_cblas}) -# # Link the required library -# target_link_libraries(${module_name} PUBLIC -# "${CMAKE_CURRENT_SOURCE_DIR}/librapid/blas/${lib_name}" -# ) -# -# target_include_directories(${module_name} PUBLIC -# "${CMAKE_CURRENT_SOURCE_DIR}/librapid/blas" -# ) -# -# target_compile_definitions(${module_name} PUBLIC LIBRAPID_HAS_BLAS) -# set(LIBRAPID_HAS_BLAS true) -# else () -# message(WARNING "Although BLAS was found, no cblas.h file was found, so BLAS support is not enabled") -# endif () -# else () -# message(WARNING "BLAS support was requested but a valid BLAS interface was not found") -# endif () -#endif () - # Check if CUDA should be used if (LIBRAPID_USE_CUDA) find_package(CUDAToolkit QUIET) @@ -630,7 +501,6 @@ if (IS_WINDOWS AND LIBRAPID_NO_WINDOWS_H) NOWINOFFSETS NOWINMESSAGES ) - endif () if (LIBRAPID_GET_FFTW) diff --git a/cmake/pythonAPI.cmake b/cmake/pythonAPI.cmake new file mode 100644 index 00000000..e69de29b diff --git a/librapid/bindings/__init__.py b/librapid/bindings/__init__.py new file mode 100644 index 00000000..54168be4 --- /dev/null +++ b/librapid/bindings/__init__.py @@ -0,0 +1 @@ +print("YOYOYO WAZZUP") \ No newline at end of file diff --git a/librapid/bindings/python/__init__.py b/librapid/bindings/python/__init__.py new file mode 100644 index 00000000..fb026308 --- /dev/null +++ b/librapid/bindings/python/__init__.py @@ -0,0 +1 @@ +print("Hello from _librapid") \ No newline at end of file diff --git a/librapid/bindings/python/test.cpp b/librapid/bindings/python/test.cpp new file mode 100644 index 00000000..2d53c34e --- /dev/null +++ b/librapid/bindings/python/test.cpp @@ -0,0 +1,24 @@ +#define LIBRAPID_ASSERT + +#include +#include +#include +#include + +namespace py = pybind11; +namespace lrc = librapid; + +// Docstring for the module +std::string moduleDocstring = "A highly-optimised Python library for numeric calculations"; + +PYBIND11_MODULE(_librapid, module) { + module.doc() = moduleDocstring; + + module.def("test", [](uint64_t n) { + if (n & 1) { + return 3 * n + 1; + } else { + return n / 2; + } + }); +} diff --git a/setup.py b/setup.py index 316e6862..4ae014b0 100644 --- a/setup.py +++ b/setup.py @@ -103,7 +103,6 @@ def __lt__(self, other): description="A highly optimised C++ library for high-performance computing", long_description=long_description, long_description_content_type="text/markdown", - # packages=ic(["librapid"] + ["librapid." + mod for mod in find_packages("librapid/python")]), packages=ic(["librapid." + mod for mod in find_packages("librapid")]), package_dir={"": "librapid"}, cmake_args=cmakeArgs, From 4f0a16113c7b29c9bcc44b6f0ff3a4611f859c86 Mon Sep 17 00:00:00 2001 From: Toby Davis Date: Sat, 21 Oct 2023 00:17:01 +0100 Subject: [PATCH 06/26] I've got no idea what I'm doing --- .github/workflows/create-release.yaml | 20 +- .github/workflows/wheels.yaml | 564 ++++++ .gitignore | 7 +- CMakeLists.txt | 51 + MANIFEST.in | 1602 +++++++++++++++++ librapid/__init__.py | 12 +- librapid/bindings/generators/argument.py | 139 ++ .../bindings/generators/arrayGenerator.py | 15 + librapid/bindings/generators/class_.py | 112 ++ librapid/bindings/generators/file.py | 32 + librapid/bindings/generators/function.py | 133 ++ librapid/bindings/generators/main.py | 47 + librapid/bindings/generators/module.py | 52 + .../bindings/generators/shapeGenerator.py | 294 +++ librapid/bindings/python/test.cpp | 24 - pyproject.toml | 60 +- setup.py | 151 -- 17 files changed, 3124 insertions(+), 191 deletions(-) create mode 100644 .github/workflows/wheels.yaml create mode 100644 MANIFEST.in create mode 100644 librapid/bindings/generators/argument.py create mode 100644 librapid/bindings/generators/arrayGenerator.py create mode 100644 librapid/bindings/generators/class_.py create mode 100644 librapid/bindings/generators/file.py create mode 100644 librapid/bindings/generators/function.py create mode 100644 librapid/bindings/generators/main.py create mode 100644 librapid/bindings/generators/module.py create mode 100644 librapid/bindings/generators/shapeGenerator.py delete mode 100644 librapid/bindings/python/test.cpp delete mode 100644 setup.py diff --git a/.github/workflows/create-release.yaml b/.github/workflows/create-release.yaml index 2ca618fd..d4176bfa 100644 --- a/.github/workflows/create-release.yaml +++ b/.github/workflows/create-release.yaml @@ -17,17 +17,17 @@ jobs: with: submodules: recursive - - name: Compile - run: | - mkdir build - cd build - cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_STANDARD=17 -DLIBRAPID_BUILD_EXAMPLES=on -DLIBRAPID_BUILD_TESTS=on -DLIBRAPID_GET_BLAS=ON -DLIBRAPID_USE_MULTIPREC=ON - cmake --build . --config Release + - name: Check Compilation, Tests, Examples, Docs and Benchmarks + uses: actions/workflow-run-action@v2 + with: + workflow: "continuous-integration.yaml" + ref: ${{ github.ref }} - - name: Run Tests - run: | - cd build - ctest -C Release --output-on-failure + - name: Generate Python Wheels + uses: actions/workflow-run-action@v2 + with: + workflow: "wheels.yaml" + ref: ${{ github.ref }} - name: Zip Source Code run: | diff --git a/.github/workflows/wheels.yaml b/.github/workflows/wheels.yaml new file mode 100644 index 00000000..da82e814 --- /dev/null +++ b/.github/workflows/wheels.yaml @@ -0,0 +1,564 @@ +# Workflow to build +name: Wheels + +on: + workflow_dispatch: + +jobs: + # Build the wheels for Linux, Windows and macOS for CPython 3.7 and newer + build_wheels: + name: Build wheel for ${{ matrix.pythonType }}${{ matrix.pythonVersion }}-${{ matrix.platformID }} + runs-on: ${{ matrix.os }} + + strategy: + # Ensure that a wheel builder finishes even if another fails + fail-fast: false + matrix: + include: + # Window 64 bit + - os: windows-latest + pythonVersion: 37 + bitness: 64 + platformID: win_amd64 + pythonType: "cp" + + - os: windows-latest + pythonVersion: 38 + bitness: 64 + platformID: win_amd64 + pythonType: "cp" + + - os: windows-latest + pythonVersion: 39 + bitness: 64 + platformID: win_amd64 + pythonType: "cp" + + - os: windows-latest + pythonVersion: 310 + bitness: 64 + platformID: win_amd64 + pythonType: "cp" + + - os: windows-latest + pythonVersion: 311 + bitness: 64 + platformID: win_amd64 + pythonType: "cp" + + - os: windows-latest + pythonVersion: 312 + bitness: 64 + platformID: win_amd64 + pythonType: "cp" + + # Arm Windows + - os: windows-latest + pythonVersion: 39 + bitness: 32 + platformID: win_arm64 + pythonType: "cp" + + - os: windows-latest + pythonVersion: 310 + bitness: 32 + platformID: win_arm64 + pythonType: "cp" + + - os: windows-latest + pythonVersion: 311 + bitness: 32 + platformID: win_arm64 + pythonType: "cp" + + - os: windows-latest + pythonVersion: 312 + bitness: 32 + platformID: win_arm64 + pythonType: "cp" + + # PyPy on Windows + - os: windows-latest + pythonVersion: 37 + bitness: 64 + platformID: win_amd64 + pythonType: "pp" + + - os: windows-latest + pythonVersion: 38 + bitness: 64 + platformID: win_amd64 + pythonType: "pp" + + - os: windows-latest + pythonVersion: 39 + bitness: 64 + platformID: win_amd64 + pythonType: "pp" + + - os: windows-latest + pythonVersion: 310 + bitness: 64 + platformID: win_amd64 + pythonType: "pp" + + # Linux 64 bit manylinux2014 + - os: ubuntu-latest + pythonVersion: 37 + bitness: 64 + platformID: manylinux_x86_64 + manylinux_image: manylinux2014 + pythonType: "cp" + + - os: ubuntu-latest + pythonVersion: 38 + bitness: 64 + platformID: manylinux_x86_64 + manylinux_image: manylinux2014 + pythonType: "cp" + + - os: ubuntu-latest + pythonVersion: 39 + bitness: 64 + platformID: manylinux_x86_64 + manylinux_image: manylinux2014 + pythonType: "cp" + + - os: ubuntu-latest + pythonVersion: 310 + bitness: 64 + platformID: manylinux_x86_64 + manylinux_image: manylinux2014 + pythonType: "cp" + + - os: ubuntu-latest + pythonVersion: 311 + bitness: 64 + platformID: manylinux_x86_64 + manylinux_image: manylinux2014 + pythonType: "cp" + + - os: ubuntu-latest + pythonVersion: 312 + bitness: 64 + platformID: manylinux_x86_64 + manylinux_image: manylinux2014 + pythonType: "cp" + + # Linux PyPy 64 bit manylinux2014 + - os: ubuntu-latest + pythonVersion: 37 + bitness: 64 + platformID: manylinux_x86_64 + manylinux_image: manylinux2014 + pythonType: "pp" + + - os: ubuntu-latest + pythonVersion: 38 + bitness: 64 + platformID: manylinux_x86_64 + manylinux_image: manylinux2014 + pythonType: "pp" + + - os: ubuntu-latest + pythonVersion: 39 + bitness: 64 + platformID: manylinux_x86_64 + manylinux_image: manylinux2014 + pythonType: "pp" + + - os: ubuntu-latest + pythonVersion: 310 + bitness: 64 + platformID: manylinux_x86_64 + manylinux_image: manylinux2014 + pythonType: "pp" + + # MacOS x86_64 + - os: macos-latest + pythonVersion: 37 + bitness: 64 + platform_id: macosx_x86_64 + pythonType: "cp" + + - os: macos-latest + pythonVersion: 38 + bitness: 64 + platform_id: macosx_x86_64 + pythonType: "cp" + + - os: macos-latest + pythonVersion: 39 + bitness: 64 + platform_id: macosx_x86_64 + pythonType: "cp" + + - os: macos-latest + pythonVersion: 310 + bitness: 64 + platform_id: macosx_x86_64 + pythonType: "cp" + + - os: macos-latest + pythonVersion: 311 + bitness: 64 + platform_id: macosx_x86_64 + pythonType: "cp" + + - os: macos-latest + pythonVersion: 312 + bitness: 64 + platform_id: macosx_x86_64 + pythonType: "cp" + + # Apple-Silicon MacOS + - os: macos-latest + pythonVersion: 38 + bitness: 64 + platform_id: macosx_arm64 + pythonType: "cp" + + - os: macos-latest + pythonVersion: 39 + bitness: 64 + platform_id: macosx_arm64 + pythonType: "cp" + + - os: macos-latest + pythonVersion: 310 + bitness: 64 + platform_id: macosx_arm64 + pythonType: "cp" + + - os: macos-latest + pythonVersion: 311 + bitness: 64 + platform_id: macosx_arm64 + pythonType: "cp" + + - os: macos-latest + pythonVersion: 312 + bitness: 64 + platform_id: macosx_arm64 + pythonType: "cp" + + # Apple-Silicon MacOS PyPy + - os: macos-latest + pythonVersion: 38 + bitness: 64 + platform_id: macosx_arm64 + pythonType: "pp" + + - os: macos-latest + pythonVersion: 39 + bitness: 64 + platform_id: macosx_arm64 + pythonType: "pp" + + - os: macos-latest + pythonVersion: 310 + bitness: 64 + platform_id: macosx_arm64 + pythonType: "pp" + + steps: + - name: Checkout LibRapid + uses: actions/checkout@v3 + with: + submodules: recursive + + - name: Setup Python + uses: actions/setup-python@v4 + with: + python-version: "3.9" + + - name: Install Requirements + run: pip install -r requirements.txt + + - name: Build Wheels + if: runner.os == 'macOS' + env: + CIBW_BUILD: ${{ matrix.pythonType }}${{ matrix.pythonVersion }}-${{ matrix.platformID }} + CIBW_ARCHS: all + CIBW_MANYLINUX_X86_64_IMAGE: ${{ matrix.manylinux_image }} + CIBW_MANYLINUX_I686_IMAGE: ${{ matrix.manylinux_image }} + CIBW_MANYLINUX_PYPY_X86_64_IMAGE: ${{ matrix.manylinux_image }} + CIBW_MANYLINUX_PYPY_I686_IMAGE: ${{ matrix.manylinux_image }} + CIBW_BUILD_VERBOSITY: 1 + CC: gcc-11 + CXX: g++-11 + CMAKE_BUILD_PARALLEL_LEVEL: 1 + GITHUB_ACTIONS: true + LIBRAPID_GET_BLAS: false + LIBRAPID_GET_FFTW: false + + run: | + python -m pip install cibuildwheel + python -m cibuildwheel --output-dir wheelhouse + + - name: Build Wheels + if: runner.os != 'macOS' + env: + CIBW_BUILD: ${{ matrix.pythonType }}${{ matrix.pythonVersion }}-${{ matrix.platformID }} + CIBW_ARCHS: all + CIBW_MANYLINUX_X86_64_IMAGE: ${{ matrix.manylinux_image }} + CIBW_MANYLINUX_I686_IMAGE: ${{ matrix.manylinux_image }} + CIBW_MANYLINUX_PYPY_X86_64_IMAGE: ${{ matrix.manylinux_image }} + CIBW_MANYLINUX_PYPY_I686_IMAGE: ${{ matrix.manylinux_image }} + CIBW_BUILD_VERBOSITY: 1 + CMAKE_BUILD_PARALLEL_LEVEL: 1 + GITHUB_ACTIONS: true + LIBRAPID_GET_BLAS: true + LIBRAPID_GET_FFTW: false + + run: | + python -m pip install cibuildwheel + python -m cibuildwheel --output-dir wheelhouse + + - name: Store Artifacts + uses: actions/upload-artifact@v3 + with: + path: wheelhouse/*.whl + + # Build the source distribution under Linux + build_sdist: + name: Source Distribution + runs-on: ubuntu-latest + + steps: + - name: Checkout LibRapid + uses: actions/checkout@v3 + with: + submodules: recursive + + - name: Setup Python + uses: actions/setup-python@v4 + with: + python-version: '3.9' # update once build dependencies are available + + - name: Install Requirements + run: pip install -r requirements.txt + + - name: Build Source Distribution + run: | + python -m build --sdist --outdir dist + twine check dist/*.tar.gz + + - name: Store artifacts + uses: actions/upload-artifact@v3 + with: + path: dist/*.tar.gz + + # Upload the wheels and the source distribution + upload_artifacts: + name: Upload to PyPi + runs-on: ubuntu-latest + # needs: [build_wheels, build_wheels_cuda, build_sdist] + needs: [build_wheels, build_sdist] + # The artifacts cannot be uploaded on PRs + if: github.event_name != 'pull_request' + + steps: + - name: Checkout LibRapid + uses: actions/checkout@v3 + with: + submodules: recursive + + - name: Download artifacts + uses: actions/download-artifact@v3 + with: + path: dist + + - name: Setup Python + uses: actions/setup-python@v4 + + - name: Install Requirements + run: pip install -r requirements.txt + + - name: Upload Artifacts + continue-on-error: true + run: | + ls dist + twine upload --skip-existing dist/artifact/* -u ${{ secrets.PYPI_USER }} -p ${{ secrets.PYPI_PASSWORD }} + + + # To uncomment: remove hash -- no space after!!! + # # Build the wheels for Linux and Windows with CUDA support + # build_wheels_cuda: + # name: Build wheel for ${{ matrix.cppp }}${{ matrix.python }}-${{ matrix.platform_id }}-${{ matrix.manylinux_image }}-cuda${{ matrix.cuda_version }} + # runs-on: ${{ matrix.os }} + # needs: [run_linux_tests, run_macos_tests, run_windows_tests] + # if: needs.check_build_trigger.outputs.build + # + # strategy: + # # Ensure that a wheel builder finishes even if another fails + # fail-fast: false + # matrix: + # include: + # # Window 64 bit + # - os: windows-latest + # python: 37 + # bitness: 64 + # platform_id: win_amd64 + # cuda_version: "11.4.0" + # use_openblas: true + # cppp: "cp" + # - os: windows-latest + # python: 37 + # bitness: 64 + # platform_id: win_amd64 + # cuda_version: "11.5.0" + # use_openblas: true + # cppp: "cp" + # - os: windows-latest + # python: 37 + # bitness: 64 + # platform_id: win_amd64 + # cuda_version: "11.6.0" + # use_openblas: true + # cppp: "cp" + # - os: windows-latest + # python: 37 + # bitness: 64 + # platform_id: win_amd64 + # cuda_version: "11.7.0" + # use_openblas: true + # cppp: "cp" + # + # - os: windows-latest + # python: 38 + # bitness: 64 + # platform_id: win_amd64 + # cuda_version: "11.4.0" + # use_openblas: true + # cppp: "cp" + # - os: windows-latest + # python: 38 + # bitness: 64 + # platform_id: win_amd64 + # cuda_version: "11.5.0" + # use_openblas: true + # cppp: "cp" + # - os: windows-latest + # python: 38 + # bitness: 64 + # platform_id: win_amd64 + # cuda_version: "11.6.0" + # use_openblas: true + # cppp: "cp" + # - os: windows-latest + # python: 38 + # bitness: 64 + # platform_id: win_amd64 + # cuda_version: "11.7.0" + # use_openblas: true + # cppp: "cp" + # + # - os: windows-latest + # python: 39 + # bitness: 64 + # platform_id: win_amd64 + # cuda_version: "11.4.0" + # use_openblas: true + # cppp: "cp" + # - os: windows-latest + # python: 39 + # bitness: 64 + # platform_id: win_amd64 + # cuda_version: "11.5.0" + # use_openblas: true + # cppp: "cp" + # - os: windows-latest + # python: 39 + # bitness: 64 + # platform_id: win_amd64 + # cuda_version: "11.6.0" + # use_openblas: true + # cppp: "cp" + # - os: windows-latest + # python: 39 + # bitness: 64 + # platform_id: win_amd64 + # cuda_version: "11.7.0" + # use_openblas: true + # cppp: "cp" + # + # - os: windows-latest + # python: 310 + # bitness: 64 + # platform_id: win_amd64 + # cuda_version: "11.4.0" + # use_openblas: true + # cppp: "cp" + # - os: windows-latest + # python: 310 + # bitness: 64 + # platform_id: win_amd64 + # cuda_version: "11.5.0" + # use_openblas: true + # cppp: "cp" + # - os: windows-latest + # python: 310 + # bitness: 64 + # platform_id: win_amd64 + # cuda_version: "11.6.0" + # use_openblas: true + # cppp: "cp" + # - os: windows-latest + # python: 310 + # bitness: 64 + # platform_id: win_amd64 + # cuda_version: "11.7.0" + # use_openblas: true + # cppp: "cp" + # + # steps: + # - name: Checkout LibRapid + # uses: actions/checkout@v3 + # with: + # submodules: recursive + # + # - name: Setup Python + # uses: actions/setup-python@v4 + # with: + # python-version: "3.9" # update once build dependencies are available + # + # - name: Install Requirements + # run: pip install -r requirements.txt + # + # - name: Clone OpenBLAS Build + # if: ${{ matrix.use_openblas }} + # uses: dawidd6/action-download-artifact@v2 + # with: + # workflow: build-openblas.yaml + # workflow_conclusion: success + # name: OpenBLAS on ${{ matrix.os }} + # path: src/librapid/openblas_install + # + # - name: Install CUDA-Toolkit + # uses: Jimver/cuda-toolkit@v0.2.8 + # with: + # cuda: ${{ matrix.cuda_version }} + # + # - name: Build Wheels + # env: + # CIBW_BUILD: ${{ matrix.cppp }}${{ matrix.python }}-${{ matrix.platform_id }} + # CIBW_ARCHS: all + # CIBW_MANYLINUX_X86_64_IMAGE: ${{ matrix.manylinux_image }} + # CIBW_MANYLINUX_I686_IMAGE: ${{ matrix.manylinux_image }} + # CIBW_MANYLINUX_PYPY_X86_64_IMAGE: ${{ matrix.manylinux_image }} + # CIBW_MANYLINUX_PYPY_I686_IMAGE: ${{ matrix.manylinux_image }} + # CIBW_TEST_SKIP: "*-macosx_arm64" + # CIBW_BUILD_VERBOSITY: 1 + # CMAKE_BUILD_PARALLEL_LEVEL: 1 + # LIBRAPID_CUDA_WHEEL: ${{ matrix.cuda_version }} + # LIBRAPID_CI_BUILD: true + # + # run: | + # python -m pip install cibuildwheel + # python -m cibuildwheel --output-dir wheelhouse + # + # - name: Store Artifacts + # uses: actions/upload-artifact@v3 + # with: + # path: wheelhouse/*.whl diff --git a/.gitignore b/.gitignore index f1450fec..631f057f 100644 --- a/.gitignore +++ b/.gitignore @@ -28,4 +28,9 @@ docs/source/docBuild _skbuild librapid.egg-info -librapid/librapid.egg-info \ No newline at end of file +librapid/librapid.egg-info +librapid/bindings/python/generated + +dist/ + +*.pyc diff --git a/CMakeLists.txt b/CMakeLists.txt index b658e0bd..e7e90467 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -96,6 +96,57 @@ if (${SKBUILD}) ) FetchContent_MakeAvailable(pybind11) + # Run auto-generation script + # 1. Find the Python executable + # 2. cd into 'librapid/bindings/generators' + # 3. Run '${pythonExe} main.py' + + find_package(Python3 COMPONENTS Interpreter) + if (NOT Python3_FOUND) + message(FATAL_ERROR "Python3 not found") + endif () + message(STATUS "[ LIBRAPID ] Python3 executable: ${Python3_EXECUTABLE}") + execute_process( + COMMAND ${Python3_EXECUTABLE} "${CMAKE_CURRENT_SOURCE_DIR}/librapid/bindings/generators/main.py" + WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/librapid/bindings/generators" + ) + + + # Since it is not possible to set the CMake options in setup.py (we have to use pyproject.toml), we have to manually + # read from the environment to set everything correctly: + # LIBRAPID_USE_BLAS = ${LIBRAPID_USE_BLAS} + # LIBRAPID_GET_BLAS = ${LIBRAPID_GET_BLAS} + # LIBRAPID_USE_CUDA = ON + # LIBRAPID_USE_OPENCL = ON + # LIBRAPID_USE_OMP = ON + # LIBRAPID_USE_MULTIPREC = ON + # LIBRAPID_NATIVE_ARCH = NOT ${GITHUB_ACTIONS} + # LIBRAPID_FAST_MATH = ${LIBRAPID_FAST_MATH} + # LIBRAPID_GET_FFTW = ${LIBRAPID_GET_FFTW} + + if ($ENV{LIBRAPID_GET_BLAS}) + set(LIBRAPID_GET_BLAS ON) + endif () + + if (NOT $ENV{GITHUB_ACTIONS}) + set(LIBRAPID_NATIVE_ARCH ON) + endif () + + if ($ENV{LIBRAPID_FAST_MATH}) + set(LIBRAPID_FAST_MATH ON) + endif () + + if ($ENV{LIBRAPID_GET_FFTW}) + set(LIBRAPID_GET_FFTW ON) + endif () + + set(LIBRAPID_USE_BLAS ON) + set(LIBRAPID_USE_CUDA ON) + set(LIBRAPID_USE_OPENCL ON) + set(LIBRAPID_USE_OMP ON) + set(LIBRAPID_USE_MULTIPREC ON) + set(LIBRAPID_GET_MULTIPREC ON) + file(GLOB_RECURSE PYTHON_SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/librapid/bindings/python/*.hpp" # Header files "${CMAKE_CURRENT_SOURCE_DIR}/librapid/bindings/python/*.cpp" # Source files diff --git a/MANIFEST.in b/MANIFEST.in new file mode 100644 index 00000000..4934760b --- /dev/null +++ b/MANIFEST.in @@ -0,0 +1,1602 @@ +include .github/FUNDING.yml +include .github/ISSUE_TEMPLATE/bug_report.md +include .github/ISSUE_TEMPLATE/feature_request.md +include .github/auto-assign.yaml +include .github/dependabot.yml +include .github/workflows/continuous-integration.yaml +include .github/workflows/create-release.yaml +include .github/workflows/run-carbonate.yaml +include .gitignore +include .gitmodules +include .readthedocs.yaml +include CITATION.cff +include CMakeLists.txt +include CODE_OF_CONDUCT.md +include CONTRIBUTING.md +include Doxyfile +include LICENSE +include README.md +include SECURITY.md +include cmake/ArchDetect.cmake +include cmake/ArchDetect2.cmake +include cmake/CodeCoverage.cmake +include cmake/FindMPFR.cmake +include cmake/FindMPIR.cmake +include cmake/blasConfig.cmake +include cmake/llvm-cov-wrapper +include cmake/pythonAPI.cmake +include cmake/valgrindTarget.cmake +include cmake/warnings.cmake +include docs/Makefile +include docs/environment.yaml +include docs/make.bat +include docs/requirements.txt +include docs/source/_static/LR_icon.png +include docs/source/_static/LR_icon_128.png +include docs/source/_static/LR_small_dark.png +include docs/source/_static/LR_small_light.png +include docs/source/_static/LibRapid_dark.png +include docs/source/_static/LibRapid_light.png +include docs/source/_static/css/custom.css +include docs/source/_static/css/s4defs-roles.css +include docs/source/_templates/layout.html +include docs/source/apiReference.md +include docs/source/array/array.md +include docs/source/array/arrayIterators.md +include docs/source/array/arrayListing.md +include docs/source/array/arrayOperations.md +include docs/source/array/arrayView.md +include docs/source/array/cudaStorage.md +include docs/source/array/fromData.md +include docs/source/array/linalg/level1.md +include docs/source/array/linalg/level2.md +include docs/source/array/linalg/level2/gemv.md +include docs/source/array/linalg/level3.md +include docs/source/array/linalg/level3/gemm.md +include docs/source/array/linalg/linalg.md +include docs/source/array/openclStorage.md +include docs/source/array/pseudoconstructors.md +include docs/source/array/sizeType.md +include docs/source/array/storage.md +include docs/source/array/strideTools.md +include docs/source/caution.rst +include docs/source/cmakeIntegration.md +include docs/source/complex/complex.md +include docs/source/complex/complexListing.md +include docs/source/complex/examples.md +include docs/source/complex/implementation.md +include docs/source/conf.py +include docs/source/gettingStarted.md +include docs/source/index.md +include docs/source/math/math.md +include docs/source/ml/activationFunctions.md +include docs/source/ml/ml.md +include docs/source/ml/sigmoid.md +include docs/source/modules/modules.rst +include docs/source/modules/testFile.md +include docs/source/multiPrecision/multiPrecision.md +include docs/source/multiPrecision/multiPrecisionListing.md +include docs/source/performance/performance.md +include docs/source/set/examples.md +include docs/source/set/implementation.md +include docs/source/set/set.md +include docs/source/set/setListing.md +include docs/source/topics/arrayIterators.md +include docs/source/topics/topics.md +include docs/source/tutorials.md +include docs/source/utilities/map.md +include docs/source/utilities/utilities.md +include docs/source/vector/vector.md +include docs/source/vector/vectorListing.md +include doxygenThemes/.github/workflows/publish.yaml +include doxygenThemes/.gitignore +include doxygenThemes/Doxyfile +include doxygenThemes/LICENSE +include doxygenThemes/Makefile +include doxygenThemes/README.md +include doxygenThemes/docs/customization.md +include doxygenThemes/docs/extensions.md +include doxygenThemes/docs/img/darkmode_toggle.png +include doxygenThemes/docs/img/fancy_scrollbars_firefox.png +include doxygenThemes/docs/img/fancy_scrollbars_webkit.gif +include doxygenThemes/docs/img/fragment_copy_button.png +include doxygenThemes/docs/img/interactive_toc_mobile.png +include doxygenThemes/docs/img/paragraph_link.png +include doxygenThemes/docs/tricks.md +include doxygenThemes/doxygen-awesome-darkmode-toggle.js +include doxygenThemes/doxygen-awesome-fragment-copy-button.js +include doxygenThemes/doxygen-awesome-interactive-toc.js +include doxygenThemes/doxygen-awesome-paragraph-link.js +include doxygenThemes/doxygen-awesome-sidebar-only-darkmode-toggle.css +include doxygenThemes/doxygen-awesome-sidebar-only.css +include doxygenThemes/doxygen-awesome.css +include doxygenThemes/doxygen-custom/custom-alternative.css +include doxygenThemes/doxygen-custom/custom.css +include doxygenThemes/doxygen-custom/header.html +include doxygenThemes/doxygen-custom/toggle-alternative-theme.js +include doxygenThemes/img/screenshot.png +include doxygenThemes/img/testimage.png +include doxygenThemes/img/theme-variants.drawio.svg +include doxygenThemes/include/MyLibrary/example.hpp +include doxygenThemes/include/MyLibrary/subclass-example.hpp +include doxygenThemes/logo.drawio.svg +include examples/CMakeLists.txt +include examples/example-array-1.cpp +include examples/example-array-2.cpp +include examples/example-complex-1.cpp +include examples/example-cuda.cpp +include examples/example-opencl.cpp +include examples/example-vector-1.cpp +include examples/templateCMakeLists.txt +include img/LR_icon.png +include librapid/__init__.py +include librapid/bindings/__init__.py +include librapid/bindings/python/__init__.py +include librapid/cxxblas/CMakeLists.txt +include librapid/cxxblas/LICENSE +include librapid/cxxblas/README.md +include librapid/cxxblas/auxiliary/auxiliary.h +include librapid/cxxblas/auxiliary/auxiliary.tcc +include librapid/cxxblas/auxiliary/complex.h +include librapid/cxxblas/auxiliary/complex.tcc +include librapid/cxxblas/auxiliary/complextrait.h +include librapid/cxxblas/auxiliary/debugmacro.h +include librapid/cxxblas/auxiliary/fakeuse.h +include librapid/cxxblas/auxiliary/iscomplex.h +include librapid/cxxblas/auxiliary/ismpfrreal.h +include librapid/cxxblas/auxiliary/issame.h +include librapid/cxxblas/auxiliary/pow.h +include librapid/cxxblas/auxiliary/pow.tcc +include librapid/cxxblas/auxiliary/restrictto.h +include librapid/cxxblas/cxxblas.cxx +include librapid/cxxblas/cxxblas.doc +include librapid/cxxblas/cxxblas.h +include librapid/cxxblas/cxxblas.tcc +include librapid/cxxblas/drivers/accelerate.h +include librapid/cxxblas/drivers/atlas.h +include librapid/cxxblas/drivers/cblas.h +include librapid/cxxblas/drivers/drivers.h +include librapid/cxxblas/drivers/drivers.tcc +include librapid/cxxblas/drivers/gotoblas.h +include librapid/cxxblas/drivers/mklblas.h +include librapid/cxxblas/drivers/openblas.h +include librapid/cxxblas/drivers/refblas.h +include librapid/cxxblas/drivers/sparseblas.h +include librapid/cxxblas/drivers/veclib.h +include librapid/cxxblas/level1/asum.doc +include librapid/cxxblas/level1/asum.h +include librapid/cxxblas/level1/asum.tcc +include librapid/cxxblas/level1/axpy.doc +include librapid/cxxblas/level1/axpy.h +include librapid/cxxblas/level1/axpy.tcc +include librapid/cxxblas/level1/copy.doc +include librapid/cxxblas/level1/copy.h +include librapid/cxxblas/level1/copy.tcc +include librapid/cxxblas/level1/dot.h +include librapid/cxxblas/level1/dot.tcc +include librapid/cxxblas/level1/iamax.h +include librapid/cxxblas/level1/iamax.tcc +include librapid/cxxblas/level1/level1.h +include librapid/cxxblas/level1/level1.tcc +include librapid/cxxblas/level1/nrm2.h +include librapid/cxxblas/level1/nrm2.tcc +include librapid/cxxblas/level1/rot.h +include librapid/cxxblas/level1/rot.tcc +include librapid/cxxblas/level1/rotm.h +include librapid/cxxblas/level1/rotm.tcc +include librapid/cxxblas/level1/scal.h +include librapid/cxxblas/level1/scal.tcc +include librapid/cxxblas/level1/swap.h +include librapid/cxxblas/level1/swap.tcc +include librapid/cxxblas/level1extensions/acxpby.h +include librapid/cxxblas/level1extensions/acxpby.tcc +include librapid/cxxblas/level1extensions/acxpy.h +include librapid/cxxblas/level1extensions/acxpy.tcc +include librapid/cxxblas/level1extensions/asum1.h +include librapid/cxxblas/level1extensions/asum1.tcc +include librapid/cxxblas/level1extensions/axpby.h +include librapid/cxxblas/level1extensions/axpby.tcc +include librapid/cxxblas/level1extensions/axpy.h +include librapid/cxxblas/level1extensions/axpy.tcc +include librapid/cxxblas/level1extensions/ccopy.h +include librapid/cxxblas/level1extensions/ccopy.tcc +include librapid/cxxblas/level1extensions/dot.h +include librapid/cxxblas/level1extensions/dot.tcc +include librapid/cxxblas/level1extensions/gbaxpby.h +include librapid/cxxblas/level1extensions/gbaxpby.tcc +include librapid/cxxblas/level1extensions/gbaxpy.h +include librapid/cxxblas/level1extensions/gbaxpy.tcc +include librapid/cxxblas/level1extensions/gbcopy.h +include librapid/cxxblas/level1extensions/gbcopy.tcc +include librapid/cxxblas/level1extensions/gbcotr.h +include librapid/cxxblas/level1extensions/gbcotr.tcc +include librapid/cxxblas/level1extensions/gbscal.h +include librapid/cxxblas/level1extensions/gbscal.tcc +include librapid/cxxblas/level1extensions/geaxpby.h +include librapid/cxxblas/level1extensions/geaxpby.tcc +include librapid/cxxblas/level1extensions/geaxpy.h +include librapid/cxxblas/level1extensions/geaxpy.tcc +include librapid/cxxblas/level1extensions/gecopy.h +include librapid/cxxblas/level1extensions/gecopy.tcc +include librapid/cxxblas/level1extensions/gecotr.h +include librapid/cxxblas/level1extensions/gecotr.tcc +include librapid/cxxblas/level1extensions/geraxpy.h +include librapid/cxxblas/level1extensions/geraxpy.tcc +include librapid/cxxblas/level1extensions/gerscal.h +include librapid/cxxblas/level1extensions/gerscal.tcc +include librapid/cxxblas/level1extensions/gescal.h +include librapid/cxxblas/level1extensions/gescal.tcc +include librapid/cxxblas/level1extensions/geswap.h +include librapid/cxxblas/level1extensions/geswap.tcc +include librapid/cxxblas/level1extensions/hescal.h +include librapid/cxxblas/level1extensions/hescal.tcc +include librapid/cxxblas/level1extensions/imax1.h +include librapid/cxxblas/level1extensions/imax1.tcc +include librapid/cxxblas/level1extensions/level1extensions.h +include librapid/cxxblas/level1extensions/level1extensions.tcc +include librapid/cxxblas/level1extensions/racxpy.h +include librapid/cxxblas/level1extensions/racxpy.tcc +include librapid/cxxblas/level1extensions/raxpy.h +include librapid/cxxblas/level1extensions/raxpy.tcc +include librapid/cxxblas/level1extensions/rscal.h +include librapid/cxxblas/level1extensions/rscal.tcc +include librapid/cxxblas/level1extensions/syscal.h +include librapid/cxxblas/level1extensions/syscal.tcc +include librapid/cxxblas/level1extensions/tpaxpby.h +include librapid/cxxblas/level1extensions/tpaxpby.tcc +include librapid/cxxblas/level1extensions/tpaxpy.h +include librapid/cxxblas/level1extensions/tpaxpy.tcc +include librapid/cxxblas/level1extensions/tpcopy.h +include librapid/cxxblas/level1extensions/tpcopy.tcc +include librapid/cxxblas/level1extensions/tpscal.h +include librapid/cxxblas/level1extensions/tpscal.tcc +include librapid/cxxblas/level1extensions/traxpby.h +include librapid/cxxblas/level1extensions/traxpby.tcc +include librapid/cxxblas/level1extensions/traxpy.h +include librapid/cxxblas/level1extensions/traxpy.tcc +include librapid/cxxblas/level1extensions/trcopy.h +include librapid/cxxblas/level1extensions/trcopy.tcc +include librapid/cxxblas/level1extensions/trscal.h +include librapid/cxxblas/level1extensions/trscal.tcc +include librapid/cxxblas/level2/gbmv.h +include librapid/cxxblas/level2/gbmv.tcc +include librapid/cxxblas/level2/gemv.h +include librapid/cxxblas/level2/gemv.tcc +include librapid/cxxblas/level2/ger.h +include librapid/cxxblas/level2/ger.tcc +include librapid/cxxblas/level2/hbmv.h +include librapid/cxxblas/level2/hbmv.tcc +include librapid/cxxblas/level2/hemv.h +include librapid/cxxblas/level2/hemv.tcc +include librapid/cxxblas/level2/her.h +include librapid/cxxblas/level2/her.tcc +include librapid/cxxblas/level2/her2.h +include librapid/cxxblas/level2/her2.tcc +include librapid/cxxblas/level2/hpmv.h +include librapid/cxxblas/level2/hpmv.tcc +include librapid/cxxblas/level2/hpr.h +include librapid/cxxblas/level2/hpr.tcc +include librapid/cxxblas/level2/hpr2.h +include librapid/cxxblas/level2/hpr2.tcc +include librapid/cxxblas/level2/level2.h +include librapid/cxxblas/level2/level2.tcc +include librapid/cxxblas/level2/sbmv.h +include librapid/cxxblas/level2/sbmv.tcc +include librapid/cxxblas/level2/spmv.h +include librapid/cxxblas/level2/spmv.tcc +include librapid/cxxblas/level2/spr.h +include librapid/cxxblas/level2/spr.tcc +include librapid/cxxblas/level2/spr2.h +include librapid/cxxblas/level2/spr2.tcc +include librapid/cxxblas/level2/symv.h +include librapid/cxxblas/level2/symv.tcc +include librapid/cxxblas/level2/syr.h +include librapid/cxxblas/level2/syr.tcc +include librapid/cxxblas/level2/syr2.h +include librapid/cxxblas/level2/syr2.tcc +include librapid/cxxblas/level2/tbmv.h +include librapid/cxxblas/level2/tbmv.tcc +include librapid/cxxblas/level2/tbsv.h +include librapid/cxxblas/level2/tbsv.tcc +include librapid/cxxblas/level2/tpmv.h +include librapid/cxxblas/level2/tpmv.tcc +include librapid/cxxblas/level2/tpsv.h +include librapid/cxxblas/level2/tpsv.tcc +include librapid/cxxblas/level2/trmv.h +include librapid/cxxblas/level2/trmv.tcc +include librapid/cxxblas/level2/trsv.h +include librapid/cxxblas/level2/trsv.tcc +include librapid/cxxblas/level2extensions/gbmv.h +include librapid/cxxblas/level2extensions/gbmv.tcc +include librapid/cxxblas/level2extensions/gemv.h +include librapid/cxxblas/level2extensions/gemv.tcc +include librapid/cxxblas/level2extensions/hemv.h +include librapid/cxxblas/level2extensions/hemv.tcc +include librapid/cxxblas/level2extensions/her.h +include librapid/cxxblas/level2extensions/her.tcc +include librapid/cxxblas/level2extensions/her2.h +include librapid/cxxblas/level2extensions/her2.tcc +include librapid/cxxblas/level2extensions/level2extensions.h +include librapid/cxxblas/level2extensions/level2extensions.tcc +include librapid/cxxblas/level2extensions/symv.h +include librapid/cxxblas/level2extensions/symv.tcc +include librapid/cxxblas/level2extensions/trmv.h +include librapid/cxxblas/level2extensions/trmv.tcc +include librapid/cxxblas/level2extensions/trsv.h +include librapid/cxxblas/level2extensions/trsv.tcc +include librapid/cxxblas/level3/gemm.h +include librapid/cxxblas/level3/gemm.tcc +include librapid/cxxblas/level3/hemm.h +include librapid/cxxblas/level3/hemm.tcc +include librapid/cxxblas/level3/her2k.h +include librapid/cxxblas/level3/her2k.tcc +include librapid/cxxblas/level3/herk.h +include librapid/cxxblas/level3/herk.tcc +include librapid/cxxblas/level3/level3.h +include librapid/cxxblas/level3/level3.tcc +include librapid/cxxblas/level3/symm.h +include librapid/cxxblas/level3/symm.tcc +include librapid/cxxblas/level3/syr2k.h +include librapid/cxxblas/level3/syr2k.tcc +include librapid/cxxblas/level3/syrk.h +include librapid/cxxblas/level3/syrk.tcc +include librapid/cxxblas/level3/trmm.h +include librapid/cxxblas/level3/trmm.tcc +include librapid/cxxblas/level3/trsm.h +include librapid/cxxblas/level3/trsm.tcc +include librapid/cxxblas/level3extensions/gbmm.h +include librapid/cxxblas/level3extensions/gbmm.tcc +include librapid/cxxblas/level3extensions/hbmm.h +include librapid/cxxblas/level3extensions/hbmm.tcc +include librapid/cxxblas/level3extensions/level3extensions.h +include librapid/cxxblas/level3extensions/level3extensions.tcc +include librapid/cxxblas/level3extensions/sbmm.h +include librapid/cxxblas/level3extensions/sbmm.tcc +include librapid/cxxblas/level3extensions/tbmm.h +include librapid/cxxblas/level3extensions/tbmm.tcc +include librapid/cxxblas/netlib/Makefile +include librapid/cxxblas/netlib/blas.tgz +include librapid/cxxblas/netlib/cblas.tgz +include librapid/cxxblas/sparselevel2/gecrsmv.h +include librapid/cxxblas/sparselevel2/gecrsmv.tcc +include librapid/cxxblas/sparselevel2/heccsmv.h +include librapid/cxxblas/sparselevel2/heccsmv.tcc +include librapid/cxxblas/sparselevel2/hecrsmv.h +include librapid/cxxblas/sparselevel2/hecrsmv.tcc +include librapid/cxxblas/sparselevel2/sparselevel2.h +include librapid/cxxblas/sparselevel2/sparselevel2.tcc +include librapid/cxxblas/sparselevel2/syccsmv.h +include librapid/cxxblas/sparselevel2/syccsmv.tcc +include librapid/cxxblas/sparselevel2/sycrsmv.h +include librapid/cxxblas/sparselevel2/sycrsmv.tcc +include librapid/cxxblas/sparselevel2/trccssv.h +include librapid/cxxblas/sparselevel2/trccssv.tcc +include librapid/cxxblas/sparselevel2/trcrssv.h +include librapid/cxxblas/sparselevel2/trcrssv.tcc +include librapid/cxxblas/sparselevel3/gecrsmm.h +include librapid/cxxblas/sparselevel3/gecrsmm.tcc +include librapid/cxxblas/sparselevel3/heccsmm.h +include librapid/cxxblas/sparselevel3/heccsmm.tcc +include librapid/cxxblas/sparselevel3/hecrsmm.h +include librapid/cxxblas/sparselevel3/hecrsmm.tcc +include librapid/cxxblas/sparselevel3/sparselevel3.h +include librapid/cxxblas/sparselevel3/sparselevel3.tcc +include librapid/cxxblas/sparselevel3/syccsmm.h +include librapid/cxxblas/sparselevel3/syccsmm.tcc +include librapid/cxxblas/sparselevel3/sycrsmm.h +include librapid/cxxblas/sparselevel3/sycrsmm.tcc +include librapid/cxxblas/sparselevel3/trccssm.h +include librapid/cxxblas/sparselevel3/trccssm.tcc +include librapid/cxxblas/sparselevel3/trcrssm.h +include librapid/cxxblas/sparselevel3/trcrssm.tcc +include librapid/cxxblas/tinylevel1/acxpby.h +include librapid/cxxblas/tinylevel1/acxpby.tcc +include librapid/cxxblas/tinylevel1/acxpy.h +include librapid/cxxblas/tinylevel1/acxpy.tcc +include librapid/cxxblas/tinylevel1/axpby.h +include librapid/cxxblas/tinylevel1/axpby.tcc +include librapid/cxxblas/tinylevel1/axpy.h +include librapid/cxxblas/tinylevel1/axpy.tcc +include librapid/cxxblas/tinylevel1/ccopy.h +include librapid/cxxblas/tinylevel1/ccopy.tcc +include librapid/cxxblas/tinylevel1/copy.h +include librapid/cxxblas/tinylevel1/copy.tcc +include librapid/cxxblas/tinylevel1/geaxpy.h +include librapid/cxxblas/tinylevel1/geaxpy.tcc +include librapid/cxxblas/tinylevel1/gecopy.h +include librapid/cxxblas/tinylevel1/gecopy.tcc +include librapid/cxxblas/tinylevel1/gerscal.h +include librapid/cxxblas/tinylevel1/gerscal.tcc +include librapid/cxxblas/tinylevel1/gescal.h +include librapid/cxxblas/tinylevel1/gescal.tcc +include librapid/cxxblas/tinylevel1/rscal.h +include librapid/cxxblas/tinylevel1/rscal.tcc +include librapid/cxxblas/tinylevel1/scal.h +include librapid/cxxblas/tinylevel1/scal.tcc +include librapid/cxxblas/tinylevel1/tinylevel1.h +include librapid/cxxblas/tinylevel1/tinylevel1.tcc +include librapid/cxxblas/tinylevel2/gemv.h +include librapid/cxxblas/tinylevel2/gemv.tcc +include librapid/cxxblas/tinylevel2/tinylevel2.h +include librapid/cxxblas/tinylevel2/tinylevel2.tcc +include librapid/cxxblas/typedefs.h +include librapid/include/librapid/array/array.hpp +include librapid/include/librapid/array/arrayContainer.hpp +include librapid/include/librapid/array/arrayFromData.hpp +include librapid/include/librapid/array/arrayIterator.hpp +include librapid/include/librapid/array/arrayTypeDef.hpp +include librapid/include/librapid/array/assignOps.hpp +include librapid/include/librapid/array/commaInitializer.hpp +include librapid/include/librapid/array/fill.hpp +include librapid/include/librapid/array/fourierTransform.hpp +include librapid/include/librapid/array/function.hpp +include librapid/include/librapid/array/generalArrayView.hpp +include librapid/include/librapid/array/generalArrayViewToString.hpp +include librapid/include/librapid/array/linalg/arrayMultiply.hpp +include librapid/include/librapid/array/linalg/compat.hpp +include librapid/include/librapid/array/linalg/level2/gemv.cl +include librapid/include/librapid/array/linalg/level2/gemv.cu +include librapid/include/librapid/array/linalg/level2/gemv.hpp +include librapid/include/librapid/array/linalg/level3/geam.hpp +include librapid/include/librapid/array/linalg/level3/gemm.cl +include librapid/include/librapid/array/linalg/level3/gemm.cu +include librapid/include/librapid/array/linalg/level3/gemm.hpp +include librapid/include/librapid/array/linalg/linalg.hpp +include librapid/include/librapid/array/linalg/transpose.hpp +include librapid/include/librapid/array/operations.hpp +include librapid/include/librapid/array/pseudoConstructors.hpp +include librapid/include/librapid/array/shape.hpp +include librapid/include/librapid/array/storage.hpp +include librapid/include/librapid/array/strideTools.hpp +include librapid/include/librapid/autodiff/autodiff.hpp +include librapid/include/librapid/autodiff/dual.hpp +include librapid/include/librapid/core/config.hpp +include librapid/include/librapid/core/core.hpp +include librapid/include/librapid/core/cudaConfig.hpp +include librapid/include/librapid/core/debugTrap.hpp +include librapid/include/librapid/core/forward.hpp +include librapid/include/librapid/core/genericConfig.hpp +include librapid/include/librapid/core/global.hpp +include librapid/include/librapid/core/gnuConfig.hpp +include librapid/include/librapid/core/helperMacros.hpp +include librapid/include/librapid/core/librapidPch.hpp +include librapid/include/librapid/core/literals.hpp +include librapid/include/librapid/core/msvcConfig.hpp +include librapid/include/librapid/core/openclConfig.hpp +include librapid/include/librapid/core/preMain.hpp +include librapid/include/librapid/core/traits.hpp +include librapid/include/librapid/core/typetraits.hpp +include librapid/include/librapid/core/warningSuppress.hpp +include librapid/include/librapid/cuda/cudaKernelProcesor.hpp +include librapid/include/librapid/cuda/cudaStorage.hpp +include librapid/include/librapid/cuda/exception.h +include librapid/include/librapid/cuda/helper_cuda.h +include librapid/include/librapid/cuda/helper_cuda_drvapi.h +include librapid/include/librapid/cuda/helper_cusolver.h +include librapid/include/librapid/cuda/helper_functions.h +include librapid/include/librapid/cuda/helper_image.h +include librapid/include/librapid/cuda/helper_math.h +include librapid/include/librapid/cuda/helper_string.h +include librapid/include/librapid/cuda/kernel_header.h +include librapid/include/librapid/cuda/kernels/abs.cu +include librapid/include/librapid/cuda/kernels/activations.cu +include librapid/include/librapid/cuda/kernels/arithmetic.cu +include librapid/include/librapid/cuda/kernels/expLogPow.cu +include librapid/include/librapid/cuda/kernels/fill.cu +include librapid/include/librapid/cuda/kernels/floorCeilRound.cu +include librapid/include/librapid/cuda/kernels/kernelHelper.cuh +include librapid/include/librapid/cuda/kernels/negate.cu +include librapid/include/librapid/cuda/kernels/trigonometry.cu +include librapid/include/librapid/cuda/kernels/vectorOps.cuh +include librapid/include/librapid/cuda/nvrtc_helper.h +include librapid/include/librapid/datastructures/bitset.hpp +include librapid/include/librapid/datastructures/datastructures.hpp +include librapid/include/librapid/datastructures/map.hpp +include librapid/include/librapid/datastructures/set.hpp +include librapid/include/librapid/librapid.hpp +include librapid/include/librapid/math/compileTime.hpp +include librapid/include/librapid/math/complex.hpp +include librapid/include/librapid/math/constants.hpp +include librapid/include/librapid/math/coreMath.hpp +include librapid/include/librapid/math/fastMath.hpp +include librapid/include/librapid/math/half.hpp +include librapid/include/librapid/math/math.hpp +include librapid/include/librapid/math/multiprec.hpp +include librapid/include/librapid/math/random.hpp +include librapid/include/librapid/math/round.hpp +include librapid/include/librapid/math/utilityFunctions.hpp +include librapid/include/librapid/math/vector.hpp +include librapid/include/librapid/math/vectorForward.hpp +include librapid/include/librapid/math/vectorImpl.hpp +include librapid/include/librapid/ml/activations.hpp +include librapid/include/librapid/ml/ml.hpp +include librapid/include/librapid/opencl/kernels/abs.cl +include librapid/include/librapid/opencl/kernels/activations.cl +include librapid/include/librapid/opencl/kernels/arithmetic.cl +include librapid/include/librapid/opencl/kernels/core.cl +include librapid/include/librapid/opencl/kernels/dual.cl +include librapid/include/librapid/opencl/kernels/expLogPow.cl +include librapid/include/librapid/opencl/kernels/fill.cl +include librapid/include/librapid/opencl/kernels/floorCeilRound.cl +include librapid/include/librapid/opencl/kernels/negate.cl +include librapid/include/librapid/opencl/kernels/transpose.cl +include librapid/include/librapid/opencl/kernels/trigonometry.cl +include librapid/include/librapid/opencl/opencl.hpp +include librapid/include/librapid/opencl/openclConfigure.hpp +include librapid/include/librapid/opencl/openclErrorIdentifier.hpp +include librapid/include/librapid/opencl/openclKernelProcessor.hpp +include librapid/include/librapid/opencl/openclStorage.hpp +include librapid/include/librapid/simd/simd.hpp +include librapid/include/librapid/simd/vecOps.hpp +include librapid/include/librapid/utils/cacheLineSize.hpp +include librapid/include/librapid/utils/memUtils.hpp +include librapid/include/librapid/utils/time.hpp +include librapid/include/librapid/utils/utils.hpp +include librapid/librapid +include librapid/src/cacheLineSize.cpp +include librapid/src/compat.cpp +include librapid/src/cudaKernelProcessor.cpp +include librapid/src/fastMath.cpp +include librapid/src/global.cpp +include librapid/src/helper_cuda.cpp +include librapid/src/literals.cpp +include librapid/src/multiprecCasting.cpp +include librapid/src/multiprecExpLogPow.cpp +include librapid/src/multiprecFloorCeil.cpp +include librapid/src/multiprecHypot.cpp +include librapid/src/multiprecModAbs.cpp +include librapid/src/multiprecToString.cpp +include librapid/src/multiprecTrig.cpp +include librapid/src/openclConfigure.cpp +include librapid/src/openclErrorIdentifier.cpp +include librapid/src/preMain.cpp +include librapid/vendor/CLBlast/.appveyor.yml +include librapid/vendor/CLBlast/.github/FUNDING.yml +include librapid/vendor/CLBlast/.github/workflows/build_and_test.yml +include librapid/vendor/CLBlast/.github/workflows/release.yml +include librapid/vendor/CLBlast/.gitignore +include librapid/vendor/CLBlast/CHANGELOG +include librapid/vendor/CLBlast/CMakeLists.txt +include librapid/vendor/CLBlast/CONTRIBUTING.md +include librapid/vendor/CLBlast/LICENSE +include librapid/vendor/CLBlast/README.md +include librapid/vendor/CLBlast/clblast.pc.in +include librapid/vendor/CLBlast/cmake/Modules/FindCBLAS.cmake +include librapid/vendor/CLBlast/cmake/Modules/FindMKL.cmake +include librapid/vendor/CLBlast/cmake/Modules/FindOpenCL.cmake +include librapid/vendor/CLBlast/cmake/Modules/FindclBLAS.cmake +include librapid/vendor/CLBlast/cmake/Modules/FindcuBLAS.cmake +include librapid/vendor/CLBlast/cmake/c_flag_overrides.cmake +include librapid/vendor/CLBlast/cmake/cxx_flag_overrides.cmake +include librapid/vendor/CLBlast/doc/api.md +include librapid/vendor/CLBlast/doc/benchmarking.md +include librapid/vendor/CLBlast/doc/bindings.md +include librapid/vendor/CLBlast/doc/details_conv.md +include librapid/vendor/CLBlast/doc/details_gemm.md +include librapid/vendor/CLBlast/doc/faq.md +include librapid/vendor/CLBlast/doc/glossary.md +include librapid/vendor/CLBlast/doc/installation.md +include librapid/vendor/CLBlast/doc/routines.md +include librapid/vendor/CLBlast/doc/testing.md +include librapid/vendor/CLBlast/doc/tuning.md +include librapid/vendor/CLBlast/include/clblast.h +include librapid/vendor/CLBlast/include/clblast_c.h +include librapid/vendor/CLBlast/include/clblast_cuda.h +include librapid/vendor/CLBlast/include/clblast_half.h +include librapid/vendor/CLBlast/include/clblast_netlib_c.h +include librapid/vendor/CLBlast/samples/cache.c +include librapid/vendor/CLBlast/samples/daxpy_cuda.cpp +include librapid/vendor/CLBlast/samples/dgemv.c +include librapid/vendor/CLBlast/samples/dtrsm.cpp +include librapid/vendor/CLBlast/samples/haxpy.c +include librapid/vendor/CLBlast/samples/samax.c +include librapid/vendor/CLBlast/samples/sasum.c +include librapid/vendor/CLBlast/samples/sgemm.c +include librapid/vendor/CLBlast/samples/sgemm.cpp +include librapid/vendor/CLBlast/samples/sgemm_batched.cpp +include librapid/vendor/CLBlast/samples/sgemm_cuda.cpp +include librapid/vendor/CLBlast/samples/sgemm_netlib.c +include librapid/vendor/CLBlast/samples/tuning_api.cpp +include librapid/vendor/CLBlast/scripts/benchmark/benchmark.py +include librapid/vendor/CLBlast/scripts/benchmark/benchmark_all.py +include librapid/vendor/CLBlast/scripts/benchmark/plot.py +include librapid/vendor/CLBlast/scripts/benchmark/settings.py +include librapid/vendor/CLBlast/scripts/benchmark/utils.py +include librapid/vendor/CLBlast/scripts/database/database.py +include librapid/vendor/CLBlast/scripts/database/database/__init__.py +include librapid/vendor/CLBlast/scripts/database/database/bests.py +include librapid/vendor/CLBlast/scripts/database/database/clblast.py +include librapid/vendor/CLBlast/scripts/database/database/db.py +include librapid/vendor/CLBlast/scripts/database/database/defaults.py +include librapid/vendor/CLBlast/scripts/database/database/io.py +include librapid/vendor/CLBlast/scripts/generator/generator.py +include librapid/vendor/CLBlast/scripts/generator/generator/__init__.py +include librapid/vendor/CLBlast/scripts/generator/generator/convert.py +include librapid/vendor/CLBlast/scripts/generator/generator/cpp.py +include librapid/vendor/CLBlast/scripts/generator/generator/datatype.py +include librapid/vendor/CLBlast/scripts/generator/generator/doc.py +include librapid/vendor/CLBlast/scripts/generator/generator/pyclblast.py +include librapid/vendor/CLBlast/scripts/generator/generator/routine.py +include librapid/vendor/CLBlast/src/api_common.cpp +include librapid/vendor/CLBlast/src/cache.cpp +include librapid/vendor/CLBlast/src/cache.hpp +include librapid/vendor/CLBlast/src/clblast.cpp +include librapid/vendor/CLBlast/src/clblast_c.cpp +include librapid/vendor/CLBlast/src/clblast_cuda.cpp +include librapid/vendor/CLBlast/src/clblast_netlib_c.cpp +include librapid/vendor/CLBlast/src/clpp11.hpp +include librapid/vendor/CLBlast/src/cupp11.hpp +include librapid/vendor/CLBlast/src/cxpp11_common.hpp +include librapid/vendor/CLBlast/src/database/apple_cpu_fallback.hpp +include librapid/vendor/CLBlast/src/database/database.cpp +include librapid/vendor/CLBlast/src/database/database.hpp +include librapid/vendor/CLBlast/src/database/database_structure.hpp +include librapid/vendor/CLBlast/src/database/kernels/copy/copy.cpp +include librapid/vendor/CLBlast/src/database/kernels/copy/copy.hpp +include librapid/vendor/CLBlast/src/database/kernels/copy/copy_16.hpp +include librapid/vendor/CLBlast/src/database/kernels/copy/copy_32.hpp +include librapid/vendor/CLBlast/src/database/kernels/copy/copy_3232.hpp +include librapid/vendor/CLBlast/src/database/kernels/copy/copy_64.hpp +include librapid/vendor/CLBlast/src/database/kernels/copy/copy_6464.hpp +include librapid/vendor/CLBlast/src/database/kernels/gemm_routine/gemm_routine.cpp +include librapid/vendor/CLBlast/src/database/kernels/gemm_routine/gemm_routine.hpp +include librapid/vendor/CLBlast/src/database/kernels/gemm_routine/gemm_routine_16.hpp +include librapid/vendor/CLBlast/src/database/kernels/gemm_routine/gemm_routine_32.hpp +include librapid/vendor/CLBlast/src/database/kernels/gemm_routine/gemm_routine_3232.hpp +include librapid/vendor/CLBlast/src/database/kernels/gemm_routine/gemm_routine_64.hpp +include librapid/vendor/CLBlast/src/database/kernels/gemm_routine/gemm_routine_6464.hpp +include librapid/vendor/CLBlast/src/database/kernels/invert/invert.cpp +include librapid/vendor/CLBlast/src/database/kernels/invert/invert.hpp +include librapid/vendor/CLBlast/src/database/kernels/invert/invert_16.hpp +include librapid/vendor/CLBlast/src/database/kernels/invert/invert_32.hpp +include librapid/vendor/CLBlast/src/database/kernels/invert/invert_3232.hpp +include librapid/vendor/CLBlast/src/database/kernels/invert/invert_64.hpp +include librapid/vendor/CLBlast/src/database/kernels/invert/invert_6464.hpp +include librapid/vendor/CLBlast/src/database/kernels/pad/pad.cpp +include librapid/vendor/CLBlast/src/database/kernels/pad/pad.hpp +include librapid/vendor/CLBlast/src/database/kernels/pad/pad_16.hpp +include librapid/vendor/CLBlast/src/database/kernels/pad/pad_32.hpp +include librapid/vendor/CLBlast/src/database/kernels/pad/pad_3232.hpp +include librapid/vendor/CLBlast/src/database/kernels/pad/pad_64.hpp +include librapid/vendor/CLBlast/src/database/kernels/pad/pad_6464.hpp +include librapid/vendor/CLBlast/src/database/kernels/padtranspose/padtranspose.cpp +include librapid/vendor/CLBlast/src/database/kernels/padtranspose/padtranspose.hpp +include librapid/vendor/CLBlast/src/database/kernels/padtranspose/padtranspose_16.hpp +include librapid/vendor/CLBlast/src/database/kernels/padtranspose/padtranspose_32.hpp +include librapid/vendor/CLBlast/src/database/kernels/padtranspose/padtranspose_3232.hpp +include librapid/vendor/CLBlast/src/database/kernels/padtranspose/padtranspose_64.hpp +include librapid/vendor/CLBlast/src/database/kernels/padtranspose/padtranspose_6464.hpp +include librapid/vendor/CLBlast/src/database/kernels/transpose/transpose.cpp +include librapid/vendor/CLBlast/src/database/kernels/transpose/transpose.hpp +include librapid/vendor/CLBlast/src/database/kernels/transpose/transpose_16.hpp +include librapid/vendor/CLBlast/src/database/kernels/transpose/transpose_32.hpp +include librapid/vendor/CLBlast/src/database/kernels/transpose/transpose_3232.hpp +include librapid/vendor/CLBlast/src/database/kernels/transpose/transpose_64.hpp +include librapid/vendor/CLBlast/src/database/kernels/transpose/transpose_6464.hpp +include librapid/vendor/CLBlast/src/database/kernels/trsv_routine/trsv_routine.cpp +include librapid/vendor/CLBlast/src/database/kernels/trsv_routine/trsv_routine.hpp +include librapid/vendor/CLBlast/src/database/kernels/trsv_routine/trsv_routine_16.hpp +include librapid/vendor/CLBlast/src/database/kernels/trsv_routine/trsv_routine_32.hpp +include librapid/vendor/CLBlast/src/database/kernels/trsv_routine/trsv_routine_3232.hpp +include librapid/vendor/CLBlast/src/database/kernels/trsv_routine/trsv_routine_64.hpp +include librapid/vendor/CLBlast/src/database/kernels/trsv_routine/trsv_routine_6464.hpp +include librapid/vendor/CLBlast/src/database/kernels/xaxpy/xaxpy.cpp +include librapid/vendor/CLBlast/src/database/kernels/xaxpy/xaxpy.hpp +include librapid/vendor/CLBlast/src/database/kernels/xaxpy/xaxpy_16.hpp +include librapid/vendor/CLBlast/src/database/kernels/xaxpy/xaxpy_32.hpp +include librapid/vendor/CLBlast/src/database/kernels/xaxpy/xaxpy_3232.hpp +include librapid/vendor/CLBlast/src/database/kernels/xaxpy/xaxpy_64.hpp +include librapid/vendor/CLBlast/src/database/kernels/xaxpy/xaxpy_6464.hpp +include librapid/vendor/CLBlast/src/database/kernels/xconvgemm/xconvgemm.cpp +include librapid/vendor/CLBlast/src/database/kernels/xconvgemm/xconvgemm.hpp +include librapid/vendor/CLBlast/src/database/kernels/xconvgemm/xconvgemm_16.hpp +include librapid/vendor/CLBlast/src/database/kernels/xconvgemm/xconvgemm_32.hpp +include librapid/vendor/CLBlast/src/database/kernels/xconvgemm/xconvgemm_3232.hpp +include librapid/vendor/CLBlast/src/database/kernels/xconvgemm/xconvgemm_64.hpp +include librapid/vendor/CLBlast/src/database/kernels/xconvgemm/xconvgemm_6464.hpp +include librapid/vendor/CLBlast/src/database/kernels/xdot/xdot.cpp +include librapid/vendor/CLBlast/src/database/kernels/xdot/xdot.hpp +include librapid/vendor/CLBlast/src/database/kernels/xdot/xdot_16.hpp +include librapid/vendor/CLBlast/src/database/kernels/xdot/xdot_32.hpp +include librapid/vendor/CLBlast/src/database/kernels/xdot/xdot_3232.hpp +include librapid/vendor/CLBlast/src/database/kernels/xdot/xdot_64.hpp +include librapid/vendor/CLBlast/src/database/kernels/xdot/xdot_6464.hpp +include librapid/vendor/CLBlast/src/database/kernels/xgemm/xgemm.cpp +include librapid/vendor/CLBlast/src/database/kernels/xgemm/xgemm.hpp +include librapid/vendor/CLBlast/src/database/kernels/xgemm/xgemm_16.hpp +include librapid/vendor/CLBlast/src/database/kernels/xgemm/xgemm_32.hpp +include librapid/vendor/CLBlast/src/database/kernels/xgemm/xgemm_3232.hpp +include librapid/vendor/CLBlast/src/database/kernels/xgemm/xgemm_64.hpp +include librapid/vendor/CLBlast/src/database/kernels/xgemm/xgemm_6464.hpp +include librapid/vendor/CLBlast/src/database/kernels/xgemm_direct/xgemm_direct.cpp +include librapid/vendor/CLBlast/src/database/kernels/xgemm_direct/xgemm_direct.hpp +include librapid/vendor/CLBlast/src/database/kernels/xgemm_direct/xgemm_direct_16.hpp +include librapid/vendor/CLBlast/src/database/kernels/xgemm_direct/xgemm_direct_32.hpp +include librapid/vendor/CLBlast/src/database/kernels/xgemm_direct/xgemm_direct_3232.hpp +include librapid/vendor/CLBlast/src/database/kernels/xgemm_direct/xgemm_direct_64.hpp +include librapid/vendor/CLBlast/src/database/kernels/xgemm_direct/xgemm_direct_6464.hpp +include librapid/vendor/CLBlast/src/database/kernels/xgemv/xgemv.cpp +include librapid/vendor/CLBlast/src/database/kernels/xgemv/xgemv.hpp +include librapid/vendor/CLBlast/src/database/kernels/xgemv/xgemv_16.hpp +include librapid/vendor/CLBlast/src/database/kernels/xgemv/xgemv_32.hpp +include librapid/vendor/CLBlast/src/database/kernels/xgemv/xgemv_3232.hpp +include librapid/vendor/CLBlast/src/database/kernels/xgemv/xgemv_64.hpp +include librapid/vendor/CLBlast/src/database/kernels/xgemv/xgemv_6464.hpp +include librapid/vendor/CLBlast/src/database/kernels/xgemv_fast/xgemv_fast.cpp +include librapid/vendor/CLBlast/src/database/kernels/xgemv_fast/xgemv_fast.hpp +include librapid/vendor/CLBlast/src/database/kernels/xgemv_fast/xgemv_fast_16.hpp +include librapid/vendor/CLBlast/src/database/kernels/xgemv_fast/xgemv_fast_32.hpp +include librapid/vendor/CLBlast/src/database/kernels/xgemv_fast/xgemv_fast_3232.hpp +include librapid/vendor/CLBlast/src/database/kernels/xgemv_fast/xgemv_fast_64.hpp +include librapid/vendor/CLBlast/src/database/kernels/xgemv_fast/xgemv_fast_6464.hpp +include librapid/vendor/CLBlast/src/database/kernels/xgemv_fast_rot/xgemv_fast_rot.cpp +include librapid/vendor/CLBlast/src/database/kernels/xgemv_fast_rot/xgemv_fast_rot.hpp +include librapid/vendor/CLBlast/src/database/kernels/xgemv_fast_rot/xgemv_fast_rot_16.hpp +include librapid/vendor/CLBlast/src/database/kernels/xgemv_fast_rot/xgemv_fast_rot_32.hpp +include librapid/vendor/CLBlast/src/database/kernels/xgemv_fast_rot/xgemv_fast_rot_3232.hpp +include librapid/vendor/CLBlast/src/database/kernels/xgemv_fast_rot/xgemv_fast_rot_64.hpp +include librapid/vendor/CLBlast/src/database/kernels/xgemv_fast_rot/xgemv_fast_rot_6464.hpp +include librapid/vendor/CLBlast/src/database/kernels/xger/xger.cpp +include librapid/vendor/CLBlast/src/database/kernels/xger/xger.hpp +include librapid/vendor/CLBlast/src/database/kernels/xger/xger_16.hpp +include librapid/vendor/CLBlast/src/database/kernels/xger/xger_32.hpp +include librapid/vendor/CLBlast/src/database/kernels/xger/xger_3232.hpp +include librapid/vendor/CLBlast/src/database/kernels/xger/xger_64.hpp +include librapid/vendor/CLBlast/src/database/kernels/xger/xger_6464.hpp +include librapid/vendor/CLBlast/src/kernel_preprocessor.cpp +include librapid/vendor/CLBlast/src/kernel_preprocessor.hpp +include librapid/vendor/CLBlast/src/kernels/common.opencl +include librapid/vendor/CLBlast/src/kernels/level1/level1.opencl +include librapid/vendor/CLBlast/src/kernels/level1/xamax.opencl +include librapid/vendor/CLBlast/src/kernels/level1/xasum.opencl +include librapid/vendor/CLBlast/src/kernels/level1/xaxpy.opencl +include librapid/vendor/CLBlast/src/kernels/level1/xcopy.opencl +include librapid/vendor/CLBlast/src/kernels/level1/xdot.opencl +include librapid/vendor/CLBlast/src/kernels/level1/xhad.opencl +include librapid/vendor/CLBlast/src/kernels/level1/xnrm2.opencl +include librapid/vendor/CLBlast/src/kernels/level1/xscal.opencl +include librapid/vendor/CLBlast/src/kernels/level1/xswap.opencl +include librapid/vendor/CLBlast/src/kernels/level2/level2.opencl +include librapid/vendor/CLBlast/src/kernels/level2/xgemv.opencl +include librapid/vendor/CLBlast/src/kernels/level2/xgemv_fast.opencl +include librapid/vendor/CLBlast/src/kernels/level2/xger.opencl +include librapid/vendor/CLBlast/src/kernels/level2/xher.opencl +include librapid/vendor/CLBlast/src/kernels/level2/xher2.opencl +include librapid/vendor/CLBlast/src/kernels/level2/xtrsv.opencl +include librapid/vendor/CLBlast/src/kernels/level3/convert_hermitian.opencl +include librapid/vendor/CLBlast/src/kernels/level3/convert_symmetric.opencl +include librapid/vendor/CLBlast/src/kernels/level3/convert_triangular.opencl +include librapid/vendor/CLBlast/src/kernels/level3/copy_fast.opencl +include librapid/vendor/CLBlast/src/kernels/level3/copy_pad.opencl +include librapid/vendor/CLBlast/src/kernels/level3/invert_diagonal_blocks_part1.opencl +include librapid/vendor/CLBlast/src/kernels/level3/invert_diagonal_blocks_part2.opencl +include librapid/vendor/CLBlast/src/kernels/level3/level3.opencl +include librapid/vendor/CLBlast/src/kernels/level3/transpose_fast.opencl +include librapid/vendor/CLBlast/src/kernels/level3/transpose_pad.opencl +include librapid/vendor/CLBlast/src/kernels/level3/xgemm_batched.opencl +include librapid/vendor/CLBlast/src/kernels/level3/xgemm_direct_batched.opencl +include librapid/vendor/CLBlast/src/kernels/level3/xgemm_direct_part1.opencl +include librapid/vendor/CLBlast/src/kernels/level3/xgemm_direct_part2.opencl +include librapid/vendor/CLBlast/src/kernels/level3/xgemm_direct_part3.opencl +include librapid/vendor/CLBlast/src/kernels/level3/xgemm_part1.opencl +include librapid/vendor/CLBlast/src/kernels/level3/xgemm_part2.opencl +include librapid/vendor/CLBlast/src/kernels/level3/xgemm_part3.opencl +include librapid/vendor/CLBlast/src/kernels/level3/xgemm_part4.opencl +include librapid/vendor/CLBlast/src/kernels/levelx/col2im.opencl +include librapid/vendor/CLBlast/src/kernels/levelx/im2col.opencl +include librapid/vendor/CLBlast/src/kernels/levelx/xconvgemm_part1.opencl +include librapid/vendor/CLBlast/src/kernels/levelx/xconvgemm_part2.opencl +include librapid/vendor/CLBlast/src/kernels/opencl_to_cuda.h +include librapid/vendor/CLBlast/src/pyclblast/MANIFEST.in +include librapid/vendor/CLBlast/src/pyclblast/README.md +include librapid/vendor/CLBlast/src/pyclblast/samples/haxpy.py +include librapid/vendor/CLBlast/src/pyclblast/samples/override_parameters.py +include librapid/vendor/CLBlast/src/pyclblast/samples/saxpy.py +include librapid/vendor/CLBlast/src/pyclblast/samples/saxpybatched.py +include librapid/vendor/CLBlast/src/pyclblast/samples/sgemm.py +include librapid/vendor/CLBlast/src/pyclblast/samples/sgemv.py +include librapid/vendor/CLBlast/src/pyclblast/setup.py +include librapid/vendor/CLBlast/src/pyclblast/src/pyclblast.pyx +include librapid/vendor/CLBlast/src/pyclblast/test/__init__.py +include librapid/vendor/CLBlast/src/pyclblast/test/test_pyclblast.py +include librapid/vendor/CLBlast/src/routine.cpp +include librapid/vendor/CLBlast/src/routine.hpp +include librapid/vendor/CLBlast/src/routines/common.cpp +include librapid/vendor/CLBlast/src/routines/common.hpp +include librapid/vendor/CLBlast/src/routines/level1/xamax.cpp +include librapid/vendor/CLBlast/src/routines/level1/xamax.hpp +include librapid/vendor/CLBlast/src/routines/level1/xamin.hpp +include librapid/vendor/CLBlast/src/routines/level1/xasum.cpp +include librapid/vendor/CLBlast/src/routines/level1/xasum.hpp +include librapid/vendor/CLBlast/src/routines/level1/xaxpy.cpp +include librapid/vendor/CLBlast/src/routines/level1/xaxpy.hpp +include librapid/vendor/CLBlast/src/routines/level1/xcopy.cpp +include librapid/vendor/CLBlast/src/routines/level1/xcopy.hpp +include librapid/vendor/CLBlast/src/routines/level1/xdot.cpp +include librapid/vendor/CLBlast/src/routines/level1/xdot.hpp +include librapid/vendor/CLBlast/src/routines/level1/xdotc.cpp +include librapid/vendor/CLBlast/src/routines/level1/xdotc.hpp +include librapid/vendor/CLBlast/src/routines/level1/xdotu.cpp +include librapid/vendor/CLBlast/src/routines/level1/xdotu.hpp +include librapid/vendor/CLBlast/src/routines/level1/xmax.hpp +include librapid/vendor/CLBlast/src/routines/level1/xmin.hpp +include librapid/vendor/CLBlast/src/routines/level1/xnrm2.cpp +include librapid/vendor/CLBlast/src/routines/level1/xnrm2.hpp +include librapid/vendor/CLBlast/src/routines/level1/xscal.cpp +include librapid/vendor/CLBlast/src/routines/level1/xscal.hpp +include librapid/vendor/CLBlast/src/routines/level1/xsum.hpp +include librapid/vendor/CLBlast/src/routines/level1/xswap.cpp +include librapid/vendor/CLBlast/src/routines/level1/xswap.hpp +include librapid/vendor/CLBlast/src/routines/level2/xgbmv.cpp +include librapid/vendor/CLBlast/src/routines/level2/xgbmv.hpp +include librapid/vendor/CLBlast/src/routines/level2/xgemv.cpp +include librapid/vendor/CLBlast/src/routines/level2/xgemv.hpp +include librapid/vendor/CLBlast/src/routines/level2/xger.cpp +include librapid/vendor/CLBlast/src/routines/level2/xger.hpp +include librapid/vendor/CLBlast/src/routines/level2/xgerc.cpp +include librapid/vendor/CLBlast/src/routines/level2/xgerc.hpp +include librapid/vendor/CLBlast/src/routines/level2/xgeru.cpp +include librapid/vendor/CLBlast/src/routines/level2/xgeru.hpp +include librapid/vendor/CLBlast/src/routines/level2/xhbmv.cpp +include librapid/vendor/CLBlast/src/routines/level2/xhbmv.hpp +include librapid/vendor/CLBlast/src/routines/level2/xhemv.cpp +include librapid/vendor/CLBlast/src/routines/level2/xhemv.hpp +include librapid/vendor/CLBlast/src/routines/level2/xher.cpp +include librapid/vendor/CLBlast/src/routines/level2/xher.hpp +include librapid/vendor/CLBlast/src/routines/level2/xher2.cpp +include librapid/vendor/CLBlast/src/routines/level2/xher2.hpp +include librapid/vendor/CLBlast/src/routines/level2/xhpmv.cpp +include librapid/vendor/CLBlast/src/routines/level2/xhpmv.hpp +include librapid/vendor/CLBlast/src/routines/level2/xhpr.cpp +include librapid/vendor/CLBlast/src/routines/level2/xhpr.hpp +include librapid/vendor/CLBlast/src/routines/level2/xhpr2.cpp +include librapid/vendor/CLBlast/src/routines/level2/xhpr2.hpp +include librapid/vendor/CLBlast/src/routines/level2/xsbmv.cpp +include librapid/vendor/CLBlast/src/routines/level2/xsbmv.hpp +include librapid/vendor/CLBlast/src/routines/level2/xspmv.cpp +include librapid/vendor/CLBlast/src/routines/level2/xspmv.hpp +include librapid/vendor/CLBlast/src/routines/level2/xspr.cpp +include librapid/vendor/CLBlast/src/routines/level2/xspr.hpp +include librapid/vendor/CLBlast/src/routines/level2/xspr2.cpp +include librapid/vendor/CLBlast/src/routines/level2/xspr2.hpp +include librapid/vendor/CLBlast/src/routines/level2/xsymv.cpp +include librapid/vendor/CLBlast/src/routines/level2/xsymv.hpp +include librapid/vendor/CLBlast/src/routines/level2/xsyr.cpp +include librapid/vendor/CLBlast/src/routines/level2/xsyr.hpp +include librapid/vendor/CLBlast/src/routines/level2/xsyr2.cpp +include librapid/vendor/CLBlast/src/routines/level2/xsyr2.hpp +include librapid/vendor/CLBlast/src/routines/level2/xtbmv.cpp +include librapid/vendor/CLBlast/src/routines/level2/xtbmv.hpp +include librapid/vendor/CLBlast/src/routines/level2/xtpmv.cpp +include librapid/vendor/CLBlast/src/routines/level2/xtpmv.hpp +include librapid/vendor/CLBlast/src/routines/level2/xtrmv.cpp +include librapid/vendor/CLBlast/src/routines/level2/xtrmv.hpp +include librapid/vendor/CLBlast/src/routines/level2/xtrsv.cpp +include librapid/vendor/CLBlast/src/routines/level2/xtrsv.hpp +include librapid/vendor/CLBlast/src/routines/level3/xgemm.cpp +include librapid/vendor/CLBlast/src/routines/level3/xgemm.hpp +include librapid/vendor/CLBlast/src/routines/level3/xhemm.cpp +include librapid/vendor/CLBlast/src/routines/level3/xhemm.hpp +include librapid/vendor/CLBlast/src/routines/level3/xher2k.cpp +include librapid/vendor/CLBlast/src/routines/level3/xher2k.hpp +include librapid/vendor/CLBlast/src/routines/level3/xherk.cpp +include librapid/vendor/CLBlast/src/routines/level3/xherk.hpp +include librapid/vendor/CLBlast/src/routines/level3/xsymm.cpp +include librapid/vendor/CLBlast/src/routines/level3/xsymm.hpp +include librapid/vendor/CLBlast/src/routines/level3/xsyr2k.cpp +include librapid/vendor/CLBlast/src/routines/level3/xsyr2k.hpp +include librapid/vendor/CLBlast/src/routines/level3/xsyrk.cpp +include librapid/vendor/CLBlast/src/routines/level3/xsyrk.hpp +include librapid/vendor/CLBlast/src/routines/level3/xtrmm.cpp +include librapid/vendor/CLBlast/src/routines/level3/xtrmm.hpp +include librapid/vendor/CLBlast/src/routines/level3/xtrsm.cpp +include librapid/vendor/CLBlast/src/routines/level3/xtrsm.hpp +include librapid/vendor/CLBlast/src/routines/levelx/xaxpybatched.cpp +include librapid/vendor/CLBlast/src/routines/levelx/xaxpybatched.hpp +include librapid/vendor/CLBlast/src/routines/levelx/xcol2im.cpp +include librapid/vendor/CLBlast/src/routines/levelx/xcol2im.hpp +include librapid/vendor/CLBlast/src/routines/levelx/xconvgemm.cpp +include librapid/vendor/CLBlast/src/routines/levelx/xconvgemm.hpp +include librapid/vendor/CLBlast/src/routines/levelx/xgemmbatched.cpp +include librapid/vendor/CLBlast/src/routines/levelx/xgemmbatched.hpp +include librapid/vendor/CLBlast/src/routines/levelx/xgemmstridedbatched.cpp +include librapid/vendor/CLBlast/src/routines/levelx/xgemmstridedbatched.hpp +include librapid/vendor/CLBlast/src/routines/levelx/xhad.cpp +include librapid/vendor/CLBlast/src/routines/levelx/xhad.hpp +include librapid/vendor/CLBlast/src/routines/levelx/xim2col.cpp +include librapid/vendor/CLBlast/src/routines/levelx/xim2col.hpp +include librapid/vendor/CLBlast/src/routines/levelx/xinvert.cpp +include librapid/vendor/CLBlast/src/routines/levelx/xinvert.hpp +include librapid/vendor/CLBlast/src/routines/levelx/xomatcopy.cpp +include librapid/vendor/CLBlast/src/routines/levelx/xomatcopy.hpp +include librapid/vendor/CLBlast/src/routines/routines.hpp +include librapid/vendor/CLBlast/src/tuning/configurations.cpp +include librapid/vendor/CLBlast/src/tuning/configurations.hpp +include librapid/vendor/CLBlast/src/tuning/kernels/copy_fast.cpp +include librapid/vendor/CLBlast/src/tuning/kernels/copy_fast.hpp +include librapid/vendor/CLBlast/src/tuning/kernels/copy_pad.cpp +include librapid/vendor/CLBlast/src/tuning/kernels/copy_pad.hpp +include librapid/vendor/CLBlast/src/tuning/kernels/invert.cpp +include librapid/vendor/CLBlast/src/tuning/kernels/invert.hpp +include librapid/vendor/CLBlast/src/tuning/kernels/transpose_fast.cpp +include librapid/vendor/CLBlast/src/tuning/kernels/transpose_fast.hpp +include librapid/vendor/CLBlast/src/tuning/kernels/transpose_pad.cpp +include librapid/vendor/CLBlast/src/tuning/kernels/transpose_pad.hpp +include librapid/vendor/CLBlast/src/tuning/kernels/xaxpy.cpp +include librapid/vendor/CLBlast/src/tuning/kernels/xaxpy.hpp +include librapid/vendor/CLBlast/src/tuning/kernels/xconvgemm.cpp +include librapid/vendor/CLBlast/src/tuning/kernels/xconvgemm.hpp +include librapid/vendor/CLBlast/src/tuning/kernels/xdot.cpp +include librapid/vendor/CLBlast/src/tuning/kernels/xdot.hpp +include librapid/vendor/CLBlast/src/tuning/kernels/xgemm.cpp +include librapid/vendor/CLBlast/src/tuning/kernels/xgemm.hpp +include librapid/vendor/CLBlast/src/tuning/kernels/xgemm_direct.cpp +include librapid/vendor/CLBlast/src/tuning/kernels/xgemm_direct.hpp +include librapid/vendor/CLBlast/src/tuning/kernels/xgemv.cpp +include librapid/vendor/CLBlast/src/tuning/kernels/xgemv.hpp +include librapid/vendor/CLBlast/src/tuning/kernels/xger.cpp +include librapid/vendor/CLBlast/src/tuning/kernels/xger.hpp +include librapid/vendor/CLBlast/src/tuning/routines/routine_tuner.hpp +include librapid/vendor/CLBlast/src/tuning/routines/xgemm.cpp +include librapid/vendor/CLBlast/src/tuning/routines/xtrsv.cpp +include librapid/vendor/CLBlast/src/tuning/tuning.cpp +include librapid/vendor/CLBlast/src/tuning/tuning.hpp +include librapid/vendor/CLBlast/src/tuning/tuning_api.cpp +include librapid/vendor/CLBlast/src/utilities/android.hpp +include librapid/vendor/CLBlast/src/utilities/buffer_test.hpp +include librapid/vendor/CLBlast/src/utilities/clblast_exceptions.cpp +include librapid/vendor/CLBlast/src/utilities/clblast_exceptions.hpp +include librapid/vendor/CLBlast/src/utilities/compile.cpp +include librapid/vendor/CLBlast/src/utilities/compile.hpp +include librapid/vendor/CLBlast/src/utilities/device_mapping.hpp +include librapid/vendor/CLBlast/src/utilities/msvc.hpp +include librapid/vendor/CLBlast/src/utilities/timing.cpp +include librapid/vendor/CLBlast/src/utilities/timing.hpp +include librapid/vendor/CLBlast/src/utilities/utilities.cpp +include librapid/vendor/CLBlast/src/utilities/utilities.hpp +include librapid/vendor/CLBlast/test/correctness/misc/override_parameters.cpp +include librapid/vendor/CLBlast/test/correctness/misc/preprocessor.cpp +include librapid/vendor/CLBlast/test/correctness/misc/retrieve_parameters.cpp +include librapid/vendor/CLBlast/test/correctness/routines/level1/xamax.cpp +include librapid/vendor/CLBlast/test/correctness/routines/level1/xasum.cpp +include librapid/vendor/CLBlast/test/correctness/routines/level1/xaxpy.cpp +include librapid/vendor/CLBlast/test/correctness/routines/level1/xcopy.cpp +include librapid/vendor/CLBlast/test/correctness/routines/level1/xdot.cpp +include librapid/vendor/CLBlast/test/correctness/routines/level1/xdotc.cpp +include librapid/vendor/CLBlast/test/correctness/routines/level1/xdotu.cpp +include librapid/vendor/CLBlast/test/correctness/routines/level1/xnrm2.cpp +include librapid/vendor/CLBlast/test/correctness/routines/level1/xrot.cpp +include librapid/vendor/CLBlast/test/correctness/routines/level1/xrotg.cpp +include librapid/vendor/CLBlast/test/correctness/routines/level1/xrotm.cpp +include librapid/vendor/CLBlast/test/correctness/routines/level1/xrotmg.cpp +include librapid/vendor/CLBlast/test/correctness/routines/level1/xscal.cpp +include librapid/vendor/CLBlast/test/correctness/routines/level1/xswap.cpp +include librapid/vendor/CLBlast/test/correctness/routines/level2/xgbmv.cpp +include librapid/vendor/CLBlast/test/correctness/routines/level2/xgemv.cpp +include librapid/vendor/CLBlast/test/correctness/routines/level2/xger.cpp +include librapid/vendor/CLBlast/test/correctness/routines/level2/xgerc.cpp +include librapid/vendor/CLBlast/test/correctness/routines/level2/xgeru.cpp +include librapid/vendor/CLBlast/test/correctness/routines/level2/xhbmv.cpp +include librapid/vendor/CLBlast/test/correctness/routines/level2/xhemv.cpp +include librapid/vendor/CLBlast/test/correctness/routines/level2/xher.cpp +include librapid/vendor/CLBlast/test/correctness/routines/level2/xher2.cpp +include librapid/vendor/CLBlast/test/correctness/routines/level2/xhpmv.cpp +include librapid/vendor/CLBlast/test/correctness/routines/level2/xhpr.cpp +include librapid/vendor/CLBlast/test/correctness/routines/level2/xhpr2.cpp +include librapid/vendor/CLBlast/test/correctness/routines/level2/xsbmv.cpp +include librapid/vendor/CLBlast/test/correctness/routines/level2/xspmv.cpp +include librapid/vendor/CLBlast/test/correctness/routines/level2/xspr.cpp +include librapid/vendor/CLBlast/test/correctness/routines/level2/xspr2.cpp +include librapid/vendor/CLBlast/test/correctness/routines/level2/xsymv.cpp +include librapid/vendor/CLBlast/test/correctness/routines/level2/xsyr.cpp +include librapid/vendor/CLBlast/test/correctness/routines/level2/xsyr2.cpp +include librapid/vendor/CLBlast/test/correctness/routines/level2/xtbmv.cpp +include librapid/vendor/CLBlast/test/correctness/routines/level2/xtbsv.cpp +include librapid/vendor/CLBlast/test/correctness/routines/level2/xtpmv.cpp +include librapid/vendor/CLBlast/test/correctness/routines/level2/xtpsv.cpp +include librapid/vendor/CLBlast/test/correctness/routines/level2/xtrmv.cpp +include librapid/vendor/CLBlast/test/correctness/routines/level2/xtrsv.cpp +include librapid/vendor/CLBlast/test/correctness/routines/level3/xgemm.cpp +include librapid/vendor/CLBlast/test/correctness/routines/level3/xhemm.cpp +include librapid/vendor/CLBlast/test/correctness/routines/level3/xher2k.cpp +include librapid/vendor/CLBlast/test/correctness/routines/level3/xherk.cpp +include librapid/vendor/CLBlast/test/correctness/routines/level3/xsymm.cpp +include librapid/vendor/CLBlast/test/correctness/routines/level3/xsyr2k.cpp +include librapid/vendor/CLBlast/test/correctness/routines/level3/xsyrk.cpp +include librapid/vendor/CLBlast/test/correctness/routines/level3/xtrmm.cpp +include librapid/vendor/CLBlast/test/correctness/routines/level3/xtrsm.cpp +include librapid/vendor/CLBlast/test/correctness/routines/levelx/xaxpybatched.cpp +include librapid/vendor/CLBlast/test/correctness/routines/levelx/xcol2im.cpp +include librapid/vendor/CLBlast/test/correctness/routines/levelx/xconvgemm.cpp +include librapid/vendor/CLBlast/test/correctness/routines/levelx/xgemmbatched.cpp +include librapid/vendor/CLBlast/test/correctness/routines/levelx/xgemmstridedbatched.cpp +include librapid/vendor/CLBlast/test/correctness/routines/levelx/xhad.cpp +include librapid/vendor/CLBlast/test/correctness/routines/levelx/xim2col.cpp +include librapid/vendor/CLBlast/test/correctness/routines/levelx/xinvert.cpp +include librapid/vendor/CLBlast/test/correctness/routines/levelx/xomatcopy.cpp +include librapid/vendor/CLBlast/test/correctness/testblas.cpp +include librapid/vendor/CLBlast/test/correctness/testblas.hpp +include librapid/vendor/CLBlast/test/correctness/tester.cpp +include librapid/vendor/CLBlast/test/correctness/tester.hpp +include librapid/vendor/CLBlast/test/diagnostics.cpp +include librapid/vendor/CLBlast/test/performance/client.cpp +include librapid/vendor/CLBlast/test/performance/client.hpp +include librapid/vendor/CLBlast/test/performance/routines/level1/xamax.cpp +include librapid/vendor/CLBlast/test/performance/routines/level1/xasum.cpp +include librapid/vendor/CLBlast/test/performance/routines/level1/xaxpy.cpp +include librapid/vendor/CLBlast/test/performance/routines/level1/xcopy.cpp +include librapid/vendor/CLBlast/test/performance/routines/level1/xdot.cpp +include librapid/vendor/CLBlast/test/performance/routines/level1/xdotc.cpp +include librapid/vendor/CLBlast/test/performance/routines/level1/xdotu.cpp +include librapid/vendor/CLBlast/test/performance/routines/level1/xnrm2.cpp +include librapid/vendor/CLBlast/test/performance/routines/level1/xrot.cpp +include librapid/vendor/CLBlast/test/performance/routines/level1/xrotg.cpp +include librapid/vendor/CLBlast/test/performance/routines/level1/xrotm.cpp +include librapid/vendor/CLBlast/test/performance/routines/level1/xrotmg.cpp +include librapid/vendor/CLBlast/test/performance/routines/level1/xscal.cpp +include librapid/vendor/CLBlast/test/performance/routines/level1/xswap.cpp +include librapid/vendor/CLBlast/test/performance/routines/level2/xgbmv.cpp +include librapid/vendor/CLBlast/test/performance/routines/level2/xgemv.cpp +include librapid/vendor/CLBlast/test/performance/routines/level2/xger.cpp +include librapid/vendor/CLBlast/test/performance/routines/level2/xgerc.cpp +include librapid/vendor/CLBlast/test/performance/routines/level2/xgeru.cpp +include librapid/vendor/CLBlast/test/performance/routines/level2/xhbmv.cpp +include librapid/vendor/CLBlast/test/performance/routines/level2/xhemv.cpp +include librapid/vendor/CLBlast/test/performance/routines/level2/xher.cpp +include librapid/vendor/CLBlast/test/performance/routines/level2/xher2.cpp +include librapid/vendor/CLBlast/test/performance/routines/level2/xhpmv.cpp +include librapid/vendor/CLBlast/test/performance/routines/level2/xhpr.cpp +include librapid/vendor/CLBlast/test/performance/routines/level2/xhpr2.cpp +include librapid/vendor/CLBlast/test/performance/routines/level2/xsbmv.cpp +include librapid/vendor/CLBlast/test/performance/routines/level2/xspmv.cpp +include librapid/vendor/CLBlast/test/performance/routines/level2/xspr.cpp +include librapid/vendor/CLBlast/test/performance/routines/level2/xspr2.cpp +include librapid/vendor/CLBlast/test/performance/routines/level2/xsymv.cpp +include librapid/vendor/CLBlast/test/performance/routines/level2/xsyr.cpp +include librapid/vendor/CLBlast/test/performance/routines/level2/xsyr2.cpp +include librapid/vendor/CLBlast/test/performance/routines/level2/xtbmv.cpp +include librapid/vendor/CLBlast/test/performance/routines/level2/xtbsv.cpp +include librapid/vendor/CLBlast/test/performance/routines/level2/xtpmv.cpp +include librapid/vendor/CLBlast/test/performance/routines/level2/xtpsv.cpp +include librapid/vendor/CLBlast/test/performance/routines/level2/xtrmv.cpp +include librapid/vendor/CLBlast/test/performance/routines/level2/xtrsv.cpp +include librapid/vendor/CLBlast/test/performance/routines/level3/xgemm.cpp +include librapid/vendor/CLBlast/test/performance/routines/level3/xhemm.cpp +include librapid/vendor/CLBlast/test/performance/routines/level3/xher2k.cpp +include librapid/vendor/CLBlast/test/performance/routines/level3/xherk.cpp +include librapid/vendor/CLBlast/test/performance/routines/level3/xsymm.cpp +include librapid/vendor/CLBlast/test/performance/routines/level3/xsyr2k.cpp +include librapid/vendor/CLBlast/test/performance/routines/level3/xsyrk.cpp +include librapid/vendor/CLBlast/test/performance/routines/level3/xtrmm.cpp +include librapid/vendor/CLBlast/test/performance/routines/level3/xtrsm.cpp +include librapid/vendor/CLBlast/test/performance/routines/levelx/xaxpybatched.cpp +include librapid/vendor/CLBlast/test/performance/routines/levelx/xcol2im.cpp +include librapid/vendor/CLBlast/test/performance/routines/levelx/xconvgemm.cpp +include librapid/vendor/CLBlast/test/performance/routines/levelx/xgemmbatched.cpp +include librapid/vendor/CLBlast/test/performance/routines/levelx/xgemmstridedbatched.cpp +include librapid/vendor/CLBlast/test/performance/routines/levelx/xhad.cpp +include librapid/vendor/CLBlast/test/performance/routines/levelx/xim2col.cpp +include librapid/vendor/CLBlast/test/performance/routines/levelx/xinvert.cpp +include librapid/vendor/CLBlast/test/performance/routines/levelx/xomatcopy.cpp +include librapid/vendor/CLBlast/test/routines/common.hpp +include librapid/vendor/CLBlast/test/routines/level1/xamax.hpp +include librapid/vendor/CLBlast/test/routines/level1/xasum.hpp +include librapid/vendor/CLBlast/test/routines/level1/xaxpy.hpp +include librapid/vendor/CLBlast/test/routines/level1/xcopy.hpp +include librapid/vendor/CLBlast/test/routines/level1/xdot.hpp +include librapid/vendor/CLBlast/test/routines/level1/xdotc.hpp +include librapid/vendor/CLBlast/test/routines/level1/xdotu.hpp +include librapid/vendor/CLBlast/test/routines/level1/xnrm2.hpp +include librapid/vendor/CLBlast/test/routines/level1/xscal.hpp +include librapid/vendor/CLBlast/test/routines/level1/xswap.hpp +include librapid/vendor/CLBlast/test/routines/level2/xgbmv.hpp +include librapid/vendor/CLBlast/test/routines/level2/xgemv.hpp +include librapid/vendor/CLBlast/test/routines/level2/xger.hpp +include librapid/vendor/CLBlast/test/routines/level2/xgerc.hpp +include librapid/vendor/CLBlast/test/routines/level2/xgeru.hpp +include librapid/vendor/CLBlast/test/routines/level2/xhbmv.hpp +include librapid/vendor/CLBlast/test/routines/level2/xhemv.hpp +include librapid/vendor/CLBlast/test/routines/level2/xher.hpp +include librapid/vendor/CLBlast/test/routines/level2/xher2.hpp +include librapid/vendor/CLBlast/test/routines/level2/xhpmv.hpp +include librapid/vendor/CLBlast/test/routines/level2/xhpr.hpp +include librapid/vendor/CLBlast/test/routines/level2/xhpr2.hpp +include librapid/vendor/CLBlast/test/routines/level2/xsbmv.hpp +include librapid/vendor/CLBlast/test/routines/level2/xspmv.hpp +include librapid/vendor/CLBlast/test/routines/level2/xspr.hpp +include librapid/vendor/CLBlast/test/routines/level2/xspr2.hpp +include librapid/vendor/CLBlast/test/routines/level2/xsymv.hpp +include librapid/vendor/CLBlast/test/routines/level2/xsyr.hpp +include librapid/vendor/CLBlast/test/routines/level2/xsyr2.hpp +include librapid/vendor/CLBlast/test/routines/level2/xtbmv.hpp +include librapid/vendor/CLBlast/test/routines/level2/xtpmv.hpp +include librapid/vendor/CLBlast/test/routines/level2/xtrmv.hpp +include librapid/vendor/CLBlast/test/routines/level2/xtrsv.hpp +include librapid/vendor/CLBlast/test/routines/level3/xgemm.hpp +include librapid/vendor/CLBlast/test/routines/level3/xhemm.hpp +include librapid/vendor/CLBlast/test/routines/level3/xher2k.hpp +include librapid/vendor/CLBlast/test/routines/level3/xherk.hpp +include librapid/vendor/CLBlast/test/routines/level3/xsymm.hpp +include librapid/vendor/CLBlast/test/routines/level3/xsyr2k.hpp +include librapid/vendor/CLBlast/test/routines/level3/xsyrk.hpp +include librapid/vendor/CLBlast/test/routines/level3/xtrmm.hpp +include librapid/vendor/CLBlast/test/routines/level3/xtrsm.hpp +include librapid/vendor/CLBlast/test/routines/level3/xtrsm_data.hpp +include librapid/vendor/CLBlast/test/routines/levelx/xaxpybatched.hpp +include librapid/vendor/CLBlast/test/routines/levelx/xcol2im.hpp +include librapid/vendor/CLBlast/test/routines/levelx/xconvgemm.hpp +include librapid/vendor/CLBlast/test/routines/levelx/xgemmbatched.hpp +include librapid/vendor/CLBlast/test/routines/levelx/xgemmstridedbatched.hpp +include librapid/vendor/CLBlast/test/routines/levelx/xhad.hpp +include librapid/vendor/CLBlast/test/routines/levelx/xim2col.hpp +include librapid/vendor/CLBlast/test/routines/levelx/xinvert.hpp +include librapid/vendor/CLBlast/test/routines/levelx/xomatcopy.hpp +include librapid/vendor/CLBlast/test/test_utilities.cpp +include librapid/vendor/CLBlast/test/test_utilities.hpp +include librapid/vendor/CLBlast/test/wrapper_cblas.hpp +include librapid/vendor/CLBlast/test/wrapper_clblas.hpp +include librapid/vendor/CLBlast/test/wrapper_cublas.hpp +include librapid/vendor/CLBlast/test/wrapper_cuda.hpp +include librapid/vendor/fmt/.clang-format +include librapid/vendor/fmt/.github/dependabot.yml +include librapid/vendor/fmt/.github/issue_template.md +include librapid/vendor/fmt/.github/pull_request_template.md +include librapid/vendor/fmt/.github/workflows/cifuzz.yml +include librapid/vendor/fmt/.github/workflows/doc.yml +include librapid/vendor/fmt/.github/workflows/linux.yml +include librapid/vendor/fmt/.github/workflows/macos.yml +include librapid/vendor/fmt/.github/workflows/scorecard.yml +include librapid/vendor/fmt/.github/workflows/windows.yml +include librapid/vendor/fmt/.gitignore +include librapid/vendor/fmt/CMakeLists.txt +include librapid/vendor/fmt/CONTRIBUTING.md +include librapid/vendor/fmt/ChangeLog.md +include librapid/vendor/fmt/LICENSE +include librapid/vendor/fmt/README.rst +include librapid/vendor/fmt/doc/CMakeLists.txt +include librapid/vendor/fmt/doc/_static/bootstrap.min.js +include librapid/vendor/fmt/doc/_static/breathe.css +include librapid/vendor/fmt/doc/_static/fonts/glyphicons-halflings-regular.eot +include librapid/vendor/fmt/doc/_static/fonts/glyphicons-halflings-regular.svg +include librapid/vendor/fmt/doc/_static/fonts/glyphicons-halflings-regular.ttf +include librapid/vendor/fmt/doc/_static/fonts/glyphicons-halflings-regular.woff +include librapid/vendor/fmt/doc/_templates/layout.html +include librapid/vendor/fmt/doc/_templates/search.html +include librapid/vendor/fmt/doc/api.rst +include librapid/vendor/fmt/doc/basic-bootstrap/README +include librapid/vendor/fmt/doc/basic-bootstrap/layout.html +include librapid/vendor/fmt/doc/basic-bootstrap/theme.conf +include librapid/vendor/fmt/doc/bootstrap/alerts.less +include librapid/vendor/fmt/doc/bootstrap/badges.less +include librapid/vendor/fmt/doc/bootstrap/bootstrap.less +include librapid/vendor/fmt/doc/bootstrap/breadcrumbs.less +include librapid/vendor/fmt/doc/bootstrap/button-groups.less +include librapid/vendor/fmt/doc/bootstrap/buttons.less +include librapid/vendor/fmt/doc/bootstrap/carousel.less +include librapid/vendor/fmt/doc/bootstrap/close.less +include librapid/vendor/fmt/doc/bootstrap/code.less +include librapid/vendor/fmt/doc/bootstrap/component-animations.less +include librapid/vendor/fmt/doc/bootstrap/dropdowns.less +include librapid/vendor/fmt/doc/bootstrap/forms.less +include librapid/vendor/fmt/doc/bootstrap/glyphicons.less +include librapid/vendor/fmt/doc/bootstrap/grid.less +include librapid/vendor/fmt/doc/bootstrap/input-groups.less +include librapid/vendor/fmt/doc/bootstrap/jumbotron.less +include librapid/vendor/fmt/doc/bootstrap/labels.less +include librapid/vendor/fmt/doc/bootstrap/list-group.less +include librapid/vendor/fmt/doc/bootstrap/media.less +include librapid/vendor/fmt/doc/bootstrap/mixins.less +include librapid/vendor/fmt/doc/bootstrap/mixins/alerts.less +include librapid/vendor/fmt/doc/bootstrap/mixins/background-variant.less +include librapid/vendor/fmt/doc/bootstrap/mixins/border-radius.less +include librapid/vendor/fmt/doc/bootstrap/mixins/buttons.less +include librapid/vendor/fmt/doc/bootstrap/mixins/center-block.less +include librapid/vendor/fmt/doc/bootstrap/mixins/clearfix.less +include librapid/vendor/fmt/doc/bootstrap/mixins/forms.less +include librapid/vendor/fmt/doc/bootstrap/mixins/gradients.less +include librapid/vendor/fmt/doc/bootstrap/mixins/grid-framework.less +include librapid/vendor/fmt/doc/bootstrap/mixins/grid.less +include librapid/vendor/fmt/doc/bootstrap/mixins/hide-text.less +include librapid/vendor/fmt/doc/bootstrap/mixins/image.less +include librapid/vendor/fmt/doc/bootstrap/mixins/labels.less +include librapid/vendor/fmt/doc/bootstrap/mixins/list-group.less +include librapid/vendor/fmt/doc/bootstrap/mixins/nav-divider.less +include librapid/vendor/fmt/doc/bootstrap/mixins/nav-vertical-align.less +include librapid/vendor/fmt/doc/bootstrap/mixins/opacity.less +include librapid/vendor/fmt/doc/bootstrap/mixins/pagination.less +include librapid/vendor/fmt/doc/bootstrap/mixins/panels.less +include librapid/vendor/fmt/doc/bootstrap/mixins/progress-bar.less +include librapid/vendor/fmt/doc/bootstrap/mixins/reset-filter.less +include librapid/vendor/fmt/doc/bootstrap/mixins/resize.less +include librapid/vendor/fmt/doc/bootstrap/mixins/responsive-visibility.less +include librapid/vendor/fmt/doc/bootstrap/mixins/size.less +include librapid/vendor/fmt/doc/bootstrap/mixins/tab-focus.less +include librapid/vendor/fmt/doc/bootstrap/mixins/table-row.less +include librapid/vendor/fmt/doc/bootstrap/mixins/text-emphasis.less +include librapid/vendor/fmt/doc/bootstrap/mixins/text-overflow.less +include librapid/vendor/fmt/doc/bootstrap/mixins/vendor-prefixes.less +include librapid/vendor/fmt/doc/bootstrap/modals.less +include librapid/vendor/fmt/doc/bootstrap/navbar.less +include librapid/vendor/fmt/doc/bootstrap/navs.less +include librapid/vendor/fmt/doc/bootstrap/normalize.less +include librapid/vendor/fmt/doc/bootstrap/pager.less +include librapid/vendor/fmt/doc/bootstrap/pagination.less +include librapid/vendor/fmt/doc/bootstrap/panels.less +include librapid/vendor/fmt/doc/bootstrap/popovers.less +include librapid/vendor/fmt/doc/bootstrap/print.less +include librapid/vendor/fmt/doc/bootstrap/progress-bars.less +include librapid/vendor/fmt/doc/bootstrap/responsive-embed.less +include librapid/vendor/fmt/doc/bootstrap/responsive-utilities.less +include librapid/vendor/fmt/doc/bootstrap/scaffolding.less +include librapid/vendor/fmt/doc/bootstrap/tables.less +include librapid/vendor/fmt/doc/bootstrap/theme.less +include librapid/vendor/fmt/doc/bootstrap/thumbnails.less +include librapid/vendor/fmt/doc/bootstrap/tooltip.less +include librapid/vendor/fmt/doc/bootstrap/type.less +include librapid/vendor/fmt/doc/bootstrap/utilities.less +include librapid/vendor/fmt/doc/bootstrap/variables.less +include librapid/vendor/fmt/doc/bootstrap/wells.less +include librapid/vendor/fmt/doc/build.py +include librapid/vendor/fmt/doc/conf.py +include librapid/vendor/fmt/doc/contents.rst +include librapid/vendor/fmt/doc/fmt.less +include librapid/vendor/fmt/doc/index.rst +include librapid/vendor/fmt/doc/python-license.txt +include librapid/vendor/fmt/doc/syntax.rst +include librapid/vendor/fmt/doc/usage.rst +include librapid/vendor/fmt/include/fmt/args.h +include librapid/vendor/fmt/include/fmt/chrono.h +include librapid/vendor/fmt/include/fmt/color.h +include librapid/vendor/fmt/include/fmt/compile.h +include librapid/vendor/fmt/include/fmt/core.h +include librapid/vendor/fmt/include/fmt/format-inl.h +include librapid/vendor/fmt/include/fmt/format.h +include librapid/vendor/fmt/include/fmt/os.h +include librapid/vendor/fmt/include/fmt/ostream.h +include librapid/vendor/fmt/include/fmt/printf.h +include librapid/vendor/fmt/include/fmt/ranges.h +include librapid/vendor/fmt/include/fmt/std.h +include librapid/vendor/fmt/include/fmt/xchar.h +include librapid/vendor/fmt/src/fmt.cc +include librapid/vendor/fmt/src/format.cc +include librapid/vendor/fmt/src/os.cc +include librapid/vendor/fmt/support/Android.mk +include librapid/vendor/fmt/support/AndroidManifest.xml +include librapid/vendor/fmt/support/C++.sublime-syntax +include librapid/vendor/fmt/support/README +include librapid/vendor/fmt/support/Vagrantfile +include librapid/vendor/fmt/support/bazel/.bazelversion +include librapid/vendor/fmt/support/bazel/BUILD.bazel +include librapid/vendor/fmt/support/bazel/README.md +include librapid/vendor/fmt/support/bazel/WORKSPACE.bazel +include librapid/vendor/fmt/support/build-docs.py +include librapid/vendor/fmt/support/build.gradle +include librapid/vendor/fmt/support/cmake/FindSetEnv.cmake +include librapid/vendor/fmt/support/cmake/JoinPaths.cmake +include librapid/vendor/fmt/support/cmake/fmt-config.cmake.in +include librapid/vendor/fmt/support/cmake/fmt.pc.in +include librapid/vendor/fmt/support/compute-powers.py +include librapid/vendor/fmt/support/docopt.py +include librapid/vendor/fmt/support/manage.py +include librapid/vendor/fmt/support/printable.py +include librapid/vendor/fmt/support/rtd/conf.py +include librapid/vendor/fmt/support/rtd/index.rst +include librapid/vendor/fmt/support/rtd/theme/layout.html +include librapid/vendor/fmt/support/rtd/theme/theme.conf +include librapid/vendor/fmt/test/CMakeLists.txt +include librapid/vendor/fmt/test/add-subdirectory-test/CMakeLists.txt +include librapid/vendor/fmt/test/add-subdirectory-test/main.cc +include librapid/vendor/fmt/test/args-test.cc +include librapid/vendor/fmt/test/assert-test.cc +include librapid/vendor/fmt/test/chrono-test.cc +include librapid/vendor/fmt/test/color-test.cc +include librapid/vendor/fmt/test/compile-error-test/CMakeLists.txt +include librapid/vendor/fmt/test/compile-fp-test.cc +include librapid/vendor/fmt/test/compile-test.cc +include librapid/vendor/fmt/test/core-test.cc +include librapid/vendor/fmt/test/cuda-test/CMakeLists.txt +include librapid/vendor/fmt/test/cuda-test/cpp14.cc +include librapid/vendor/fmt/test/cuda-test/cuda-cpp14.cu +include librapid/vendor/fmt/test/detect-stdfs.cc +include librapid/vendor/fmt/test/enforce-checks-test.cc +include librapid/vendor/fmt/test/find-package-test/CMakeLists.txt +include librapid/vendor/fmt/test/find-package-test/main.cc +include librapid/vendor/fmt/test/format-impl-test.cc +include librapid/vendor/fmt/test/format-test.cc +include librapid/vendor/fmt/test/fuzzing/.gitignore +include librapid/vendor/fmt/test/fuzzing/CMakeLists.txt +include librapid/vendor/fmt/test/fuzzing/README.md +include librapid/vendor/fmt/test/fuzzing/build.sh +include librapid/vendor/fmt/test/fuzzing/chrono-duration.cc +include librapid/vendor/fmt/test/fuzzing/chrono-timepoint.cc +include librapid/vendor/fmt/test/fuzzing/float.cc +include librapid/vendor/fmt/test/fuzzing/fuzzer-common.h +include librapid/vendor/fmt/test/fuzzing/main.cc +include librapid/vendor/fmt/test/fuzzing/named-arg.cc +include librapid/vendor/fmt/test/fuzzing/one-arg.cc +include librapid/vendor/fmt/test/fuzzing/two-args.cc +include librapid/vendor/fmt/test/gtest-extra-test.cc +include librapid/vendor/fmt/test/gtest-extra.cc +include librapid/vendor/fmt/test/gtest-extra.h +include librapid/vendor/fmt/test/gtest/.clang-format +include librapid/vendor/fmt/test/gtest/CMakeLists.txt +include librapid/vendor/fmt/test/gtest/gmock-gtest-all.cc +include librapid/vendor/fmt/test/gtest/gmock/gmock.h +include librapid/vendor/fmt/test/gtest/gtest/gtest-spi.h +include librapid/vendor/fmt/test/gtest/gtest/gtest.h +include librapid/vendor/fmt/test/header-only-test.cc +include librapid/vendor/fmt/test/mock-allocator.h +include librapid/vendor/fmt/test/module-test.cc +include librapid/vendor/fmt/test/noexception-test.cc +include librapid/vendor/fmt/test/os-test.cc +include librapid/vendor/fmt/test/ostream-test.cc +include librapid/vendor/fmt/test/posix-mock-test.cc +include librapid/vendor/fmt/test/posix-mock.h +include librapid/vendor/fmt/test/printf-test.cc +include librapid/vendor/fmt/test/ranges-odr-test.cc +include librapid/vendor/fmt/test/ranges-test.cc +include librapid/vendor/fmt/test/scan-test.cc +include librapid/vendor/fmt/test/scan.h +include librapid/vendor/fmt/test/static-export-test/CMakeLists.txt +include librapid/vendor/fmt/test/static-export-test/library.cc +include librapid/vendor/fmt/test/static-export-test/main.cc +include librapid/vendor/fmt/test/std-test.cc +include librapid/vendor/fmt/test/test-assert.h +include librapid/vendor/fmt/test/test-main.cc +include librapid/vendor/fmt/test/unicode-test.cc +include librapid/vendor/fmt/test/util.cc +include librapid/vendor/fmt/test/util.h +include librapid/vendor/fmt/test/xchar-test.cc +include librapid/vendor/jitify/.clang-format +include librapid/vendor/jitify/.gitignore +include librapid/vendor/jitify/Doxyfile +include librapid/vendor/jitify/LICENSE +include librapid/vendor/jitify/Makefile +include librapid/vendor/jitify/README.md +include librapid/vendor/jitify/example_headers/class_arg_kernel.cuh +include librapid/vendor/jitify/example_headers/constant_header.cuh +include librapid/vendor/jitify/example_headers/my_header1.cuh +include librapid/vendor/jitify/example_headers/my_header2.cuh +include librapid/vendor/jitify/example_headers/my_header3.cuh +include librapid/vendor/jitify/jitify.hpp +include librapid/vendor/jitify/jitify_example.cpp +include librapid/vendor/jitify/jitify_test.cu +include librapid/vendor/jitify/nvrtc_cli.cpp +include librapid/vendor/jitify/nvrtc_cli_test.sh +include librapid/vendor/jitify/stringify.cpp +include librapid/vendor/pocketfft/LICENSE.md +include librapid/vendor/pocketfft/README.md +include librapid/vendor/pocketfft/pocketfft_demo.cc +include librapid/vendor/pocketfft/pocketfft_hdronly.h +include librapid/vendor/xsimd/.clang-format +include librapid/vendor/xsimd/.github/toolchains/clang-aarch64-linux-gnu.cmake +include librapid/vendor/xsimd/.github/toolchains/clang-arm-linux-gnueabihf.cmake +include librapid/vendor/xsimd/.github/toolchains/clang.cmake +include librapid/vendor/xsimd/.github/toolchains/gcc-aarch64-linux-gnu.cmake +include librapid/vendor/xsimd/.github/toolchains/gcc-arm-linux-gnueabihf.cmake +include librapid/vendor/xsimd/.github/toolchains/gcc.cmake +include librapid/vendor/xsimd/.github/workflows/android.yml +include librapid/vendor/xsimd/.github/workflows/benchmark.yml +include librapid/vendor/xsimd/.github/workflows/cross-sve.yml +include librapid/vendor/xsimd/.github/workflows/cross.yml +include librapid/vendor/xsimd/.github/workflows/cxx-no-exceptions.yml +include librapid/vendor/xsimd/.github/workflows/cxx-versions.yml +include librapid/vendor/xsimd/.github/workflows/doxygen.yml +include librapid/vendor/xsimd/.github/workflows/emscripten.yml +include librapid/vendor/xsimd/.github/workflows/linux.yml +include librapid/vendor/xsimd/.github/workflows/macos.yml +include librapid/vendor/xsimd/.github/workflows/style-check.yml +include librapid/vendor/xsimd/.github/workflows/windows.yml +include librapid/vendor/xsimd/.gitignore +include librapid/vendor/xsimd/CMakeLists.txt +include librapid/vendor/xsimd/CONTRIBUTING.md +include librapid/vendor/xsimd/Changelog.rst +include librapid/vendor/xsimd/LICENSE +include librapid/vendor/xsimd/README.md +include librapid/vendor/xsimd/benchmark/CMakeLists.txt +include librapid/vendor/xsimd/benchmark/main.cpp +include librapid/vendor/xsimd/benchmark/xsimd_benchmark.hpp +include librapid/vendor/xsimd/cmake/JoinPaths.cmake +include librapid/vendor/xsimd/docs/Doxyfile +include librapid/vendor/xsimd/docs/Makefile +include librapid/vendor/xsimd/docs/environment.yml +include librapid/vendor/xsimd/docs/make.bat +include librapid/vendor/xsimd/docs/source/_static/main_stylesheet.css +include librapid/vendor/xsimd/docs/source/api/aligned_allocator.rst +include librapid/vendor/xsimd/docs/source/api/arch.rst +include librapid/vendor/xsimd/docs/source/api/arithmetic_index.rst +include librapid/vendor/xsimd/docs/source/api/batch_index.rst +include librapid/vendor/xsimd/docs/source/api/batch_manip.rst +include librapid/vendor/xsimd/docs/source/api/bitwise_operators_index.rst +include librapid/vendor/xsimd/docs/source/api/cast_index.rst +include librapid/vendor/xsimd/docs/source/api/comparison_index.rst +include librapid/vendor/xsimd/docs/source/api/data_transfer.rst +include librapid/vendor/xsimd/docs/source/api/dispatching.rst +include librapid/vendor/xsimd/docs/source/api/instr_macros.rst +include librapid/vendor/xsimd/docs/source/api/math_index.rst +include librapid/vendor/xsimd/docs/source/api/misc_index.rst +include librapid/vendor/xsimd/docs/source/api/reducer_index.rst +include librapid/vendor/xsimd/docs/source/api/type_traits.rst +include librapid/vendor/xsimd/docs/source/api/xsimd_batch.rst +include librapid/vendor/xsimd/docs/source/api/xsimd_batch_bool.rst +include librapid/vendor/xsimd/docs/source/api/xsimd_batch_complex.rst +include librapid/vendor/xsimd/docs/source/api/xsimd_batch_constant.rst +include librapid/vendor/xsimd/docs/source/basic_usage.rst +include librapid/vendor/xsimd/docs/source/cmake.svg +include librapid/vendor/xsimd/docs/source/conda.svg +include librapid/vendor/xsimd/docs/source/conf.py +include librapid/vendor/xsimd/docs/source/index.rst +include librapid/vendor/xsimd/docs/source/installation.rst +include librapid/vendor/xsimd/docs/source/migration_guide.rst +include librapid/vendor/xsimd/docs/source/quantstack-white.svg +include librapid/vendor/xsimd/docs/source/spack.svg +include librapid/vendor/xsimd/docs/source/vectorized_code.rst +include librapid/vendor/xsimd/docs/source/xsimd.svg +include librapid/vendor/xsimd/environment.yml +include librapid/vendor/xsimd/examples/CMakeLists.txt +include librapid/vendor/xsimd/examples/mandelbrot.cpp +include librapid/vendor/xsimd/examples/pico_bench.hpp +include librapid/vendor/xsimd/include/xsimd/arch/generic/xsimd_generic_arithmetic.hpp +include librapid/vendor/xsimd/include/xsimd/arch/generic/xsimd_generic_complex.hpp +include librapid/vendor/xsimd/include/xsimd/arch/generic/xsimd_generic_details.hpp +include librapid/vendor/xsimd/include/xsimd/arch/generic/xsimd_generic_logical.hpp +include librapid/vendor/xsimd/include/xsimd/arch/generic/xsimd_generic_math.hpp +include librapid/vendor/xsimd/include/xsimd/arch/generic/xsimd_generic_memory.hpp +include librapid/vendor/xsimd/include/xsimd/arch/generic/xsimd_generic_rounding.hpp +include librapid/vendor/xsimd/include/xsimd/arch/generic/xsimd_generic_trigo.hpp +include librapid/vendor/xsimd/include/xsimd/arch/xsimd_avx.hpp +include librapid/vendor/xsimd/include/xsimd/arch/xsimd_avx2.hpp +include librapid/vendor/xsimd/include/xsimd/arch/xsimd_avx512bw.hpp +include librapid/vendor/xsimd/include/xsimd/arch/xsimd_avx512cd.hpp +include librapid/vendor/xsimd/include/xsimd/arch/xsimd_avx512dq.hpp +include librapid/vendor/xsimd/include/xsimd/arch/xsimd_avx512f.hpp +include librapid/vendor/xsimd/include/xsimd/arch/xsimd_constants.hpp +include librapid/vendor/xsimd/include/xsimd/arch/xsimd_fma3_avx.hpp +include librapid/vendor/xsimd/include/xsimd/arch/xsimd_fma3_avx2.hpp +include librapid/vendor/xsimd/include/xsimd/arch/xsimd_fma3_sse.hpp +include librapid/vendor/xsimd/include/xsimd/arch/xsimd_fma4.hpp +include librapid/vendor/xsimd/include/xsimd/arch/xsimd_generic.hpp +include librapid/vendor/xsimd/include/xsimd/arch/xsimd_generic_fwd.hpp +include librapid/vendor/xsimd/include/xsimd/arch/xsimd_isa.hpp +include librapid/vendor/xsimd/include/xsimd/arch/xsimd_neon.hpp +include librapid/vendor/xsimd/include/xsimd/arch/xsimd_neon64.hpp +include librapid/vendor/xsimd/include/xsimd/arch/xsimd_scalar.hpp +include librapid/vendor/xsimd/include/xsimd/arch/xsimd_sse2.hpp +include librapid/vendor/xsimd/include/xsimd/arch/xsimd_sse3.hpp +include librapid/vendor/xsimd/include/xsimd/arch/xsimd_sse4_1.hpp +include librapid/vendor/xsimd/include/xsimd/arch/xsimd_sse4_2.hpp +include librapid/vendor/xsimd/include/xsimd/arch/xsimd_ssse3.hpp +include librapid/vendor/xsimd/include/xsimd/arch/xsimd_sve.hpp +include librapid/vendor/xsimd/include/xsimd/config/xsimd_arch.hpp +include librapid/vendor/xsimd/include/xsimd/config/xsimd_config.hpp +include librapid/vendor/xsimd/include/xsimd/config/xsimd_cpuid.hpp +include librapid/vendor/xsimd/include/xsimd/math/xsimd_rem_pio2.hpp +include librapid/vendor/xsimd/include/xsimd/memory/xsimd_aligned_allocator.hpp +include librapid/vendor/xsimd/include/xsimd/memory/xsimd_alignment.hpp +include librapid/vendor/xsimd/include/xsimd/types/xsimd_all_registers.hpp +include librapid/vendor/xsimd/include/xsimd/types/xsimd_api.hpp +include librapid/vendor/xsimd/include/xsimd/types/xsimd_avx2_register.hpp +include librapid/vendor/xsimd/include/xsimd/types/xsimd_avx512bw_register.hpp +include librapid/vendor/xsimd/include/xsimd/types/xsimd_avx512cd_register.hpp +include librapid/vendor/xsimd/include/xsimd/types/xsimd_avx512dq_register.hpp +include librapid/vendor/xsimd/include/xsimd/types/xsimd_avx512f_register.hpp +include librapid/vendor/xsimd/include/xsimd/types/xsimd_avx_register.hpp +include librapid/vendor/xsimd/include/xsimd/types/xsimd_batch.hpp +include librapid/vendor/xsimd/include/xsimd/types/xsimd_batch_constant.hpp +include librapid/vendor/xsimd/include/xsimd/types/xsimd_element_reference.hpp +include librapid/vendor/xsimd/include/xsimd/types/xsimd_fma3_avx2_register.hpp +include librapid/vendor/xsimd/include/xsimd/types/xsimd_fma3_avx_register.hpp +include librapid/vendor/xsimd/include/xsimd/types/xsimd_fma3_sse_register.hpp +include librapid/vendor/xsimd/include/xsimd/types/xsimd_fma4_register.hpp +include librapid/vendor/xsimd/include/xsimd/types/xsimd_generic_arch.hpp +include librapid/vendor/xsimd/include/xsimd/types/xsimd_neon64_register.hpp +include librapid/vendor/xsimd/include/xsimd/types/xsimd_neon_register.hpp +include librapid/vendor/xsimd/include/xsimd/types/xsimd_register.hpp +include librapid/vendor/xsimd/include/xsimd/types/xsimd_sse2_register.hpp +include librapid/vendor/xsimd/include/xsimd/types/xsimd_sse3_register.hpp +include librapid/vendor/xsimd/include/xsimd/types/xsimd_sse4_1_register.hpp +include librapid/vendor/xsimd/include/xsimd/types/xsimd_sse4_2_register.hpp +include librapid/vendor/xsimd/include/xsimd/types/xsimd_ssse3_register.hpp +include librapid/vendor/xsimd/include/xsimd/types/xsimd_sve_register.hpp +include librapid/vendor/xsimd/include/xsimd/types/xsimd_traits.hpp +include librapid/vendor/xsimd/include/xsimd/types/xsimd_utils.hpp +include librapid/vendor/xsimd/include/xsimd/xsimd.hpp +include librapid/vendor/xsimd/install_sde.sh +include librapid/vendor/xsimd/readthedocs.yml +include librapid/vendor/xsimd/test/CMakeLists.txt +include librapid/vendor/xsimd/test/avx.sh +include librapid/vendor/xsimd/test/avx2.sh +include librapid/vendor/xsimd/test/check_inline_specifier.sh +include librapid/vendor/xsimd/test/doc/CMakeLists.txt +include librapid/vendor/xsimd/test/doc/explicit_use_of_an_instruction_set.cpp +include librapid/vendor/xsimd/test/doc/explicit_use_of_an_instruction_set_mean.cpp +include librapid/vendor/xsimd/test/doc/explicit_use_of_an_instruction_set_mean_aligned.cpp +include librapid/vendor/xsimd/test/doc/explicit_use_of_an_instruction_set_mean_arch_independent.cpp +include librapid/vendor/xsimd/test/doc/explicit_use_of_an_instruction_set_mean_tag_dispatch.cpp +include librapid/vendor/xsimd/test/doc/manipulating_abstract_batches.cpp +include librapid/vendor/xsimd/test/doc/manipulating_parametric_batches.cpp +include librapid/vendor/xsimd/test/doc/sum.hpp +include librapid/vendor/xsimd/test/doc/sum_avx2.cpp +include librapid/vendor/xsimd/test/doc/sum_sse2.cpp +include librapid/vendor/xsimd/test/doc/writing_vectorized_code.cpp +include librapid/vendor/xsimd/test/main.cpp +include librapid/vendor/xsimd/test/sse.sh +include librapid/vendor/xsimd/test/sse2.sh +include librapid/vendor/xsimd/test/sse3.sh +include librapid/vendor/xsimd/test/sse4_1.sh +include librapid/vendor/xsimd/test/sse4_2.sh +include librapid/vendor/xsimd/test/ssse3.sh +include librapid/vendor/xsimd/test/test_api.cpp +include librapid/vendor/xsimd/test/test_arch.cpp +include librapid/vendor/xsimd/test/test_basic_math.cpp +include librapid/vendor/xsimd/test/test_batch.cpp +include librapid/vendor/xsimd/test/test_batch_bool.cpp +include librapid/vendor/xsimd/test/test_batch_cast.cpp +include librapid/vendor/xsimd/test/test_batch_complex.cpp +include librapid/vendor/xsimd/test/test_batch_constant.cpp +include librapid/vendor/xsimd/test/test_batch_float.cpp +include librapid/vendor/xsimd/test/test_batch_int.cpp +include librapid/vendor/xsimd/test/test_batch_manip.cpp +include librapid/vendor/xsimd/test/test_bitwise_cast.cpp +include librapid/vendor/xsimd/test/test_complex_exponential.cpp +include librapid/vendor/xsimd/test/test_complex_hyperbolic.cpp +include librapid/vendor/xsimd/test/test_complex_power.cpp +include librapid/vendor/xsimd/test/test_complex_trigonometric.cpp +include librapid/vendor/xsimd/test/test_conversion.cpp +include librapid/vendor/xsimd/test/test_custom_default_arch.cpp +include librapid/vendor/xsimd/test/test_error_gamma.cpp +include librapid/vendor/xsimd/test/test_explicit_batch_instantiation.cpp +include librapid/vendor/xsimd/test/test_exponential.cpp +include librapid/vendor/xsimd/test/test_extract_pair.cpp +include librapid/vendor/xsimd/test/test_fp_manipulation.cpp +include librapid/vendor/xsimd/test/test_gnu_source.cpp +include librapid/vendor/xsimd/test/test_hyperbolic.cpp +include librapid/vendor/xsimd/test/test_load_store.cpp +include librapid/vendor/xsimd/test/test_memory.cpp +include librapid/vendor/xsimd/test/test_poly_evaluation.cpp +include librapid/vendor/xsimd/test/test_power.cpp +include librapid/vendor/xsimd/test/test_rounding.cpp +include librapid/vendor/xsimd/test/test_select.cpp +include librapid/vendor/xsimd/test/test_shuffle.cpp +include librapid/vendor/xsimd/test/test_sum.cpp +include librapid/vendor/xsimd/test/test_sum.hpp +include librapid/vendor/xsimd/test/test_traits.cpp +include librapid/vendor/xsimd/test/test_trigonometric.cpp +include librapid/vendor/xsimd/test/test_utils.hpp +include librapid/vendor/xsimd/test/test_wasm/browser_main.html +include librapid/vendor/xsimd/test/test_wasm/test_wasm.sh +include librapid/vendor/xsimd/test/test_wasm/test_wasm_playwright.py +include librapid/vendor/xsimd/test/test_xsimd_api.cpp +include librapid/vendor/xsimd/xsimd.pc.in +include librapid/vendor/xsimd/xsimdConfig.cmake.in +include pyproject.toml +include qodana.yaml +include requirements.txt +include scripts/cudaVectorGen.py +include scripts/setVersion.py +include scripts/tmp/citationTemplate.cff +include scripts/tmp/doxyTemplate +include scripts/vecSwizzle.py +include setup.py +include test/CMakeLists.txt +include test/test-arrayArithmetic.cpp +include test/test-arrayComparisons.cpp +include test/test-arrayConstructors.cpp +include test/test-arrayIndexing.cpp +include test/test-arrayOps.cpp +include test/test-arrayStringFormatting.cpp +include test/test-complex.cpp +include test/test-cudaStorage.cpp +include test/test-fixedStorage.cpp +include test/test-generalArrayView.cpp +include test/test-mathUtilities.cpp +include test/test-multiprecision.cpp +include test/test-openCLStorage.cpp +include test/test-pseudoConstructors.cpp +include test/test-set.cpp +include test/test-sigmoid.cpp +include test/test-sizetype.cpp +include test/test-storage.cpp +include test/test-vector.cpp +include version.txt +exclude MANIFEST.in \ No newline at end of file diff --git a/librapid/__init__.py b/librapid/__init__.py index ef0978eb..9527628c 100644 --- a/librapid/__init__.py +++ b/librapid/__init__.py @@ -1 +1,11 @@ -print("Hello from LibRapid") \ No newline at end of file +import _librapid + + +class Shape(_librapid.Shape): + """ + Stores the dimensions of an N-dimensional Array. + """ + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + \ No newline at end of file diff --git a/librapid/bindings/generators/argument.py b/librapid/bindings/generators/argument.py new file mode 100644 index 00000000..98bd4930 --- /dev/null +++ b/librapid/bindings/generators/argument.py @@ -0,0 +1,139 @@ +import re + + +def isPrimitive(type): + if type in ["bool", "int", "char", "float", "double"]: + return True + + # Match int, int32_t, int64_t, uint32_t etc. + if re.match(r"u?int\d+_t", type): + return True + + return False + + +class Argument: + def __init__(self, *args, **kwargs): + """ + Arguments may include (in order): + - name + - type + - default + - const + - ref + - pointer + - noConvert + - returnPolicy + + :param args: + :param kwargs (optional): + """ + + self.name = kwargs.get("name", None) + self.type = kwargs.get("type", None) + self.default = kwargs.get("default", None) + self.const = kwargs.get("const", True) + self.ref = kwargs.get("ref", True) + self.pointer = kwargs.get("pointer", False) + self.noConvert = kwargs.get("noConvert", False) + + for i in range(len(args)): + if i == 0 and self.name is None: + self.name = args[i] + elif i == 1 and self.type is None: + self.type = args[i] + elif i == 2 and self.default is None: + self.default = args[i] + elif i == 3 and self.const is None: + self.const = args[i] + elif i == 4 and self.ref is None: + self.ref = args[i] + elif i == 5 and self.pointer is None: + self.pointer = args[i] + elif i == 6 and self.noConvert is None: + self.noConvert = args[i] + else: + raise ValueError("Too many arguments") + + if self.name is None: + raise ValueError("Argument must have a name") + + if self.type is None: + raise ValueError("Argument must have a type") + + self.isArgs = self.name == "*args" + self.isKwargs = self.name == "**kwargs" + + def param(self): + if self.isArgs: + return f"py::args args" + elif self.isKwargs: + return f"py::kwargs kwargs" + else: + isPrimitiveType = isPrimitive(self.type) + return f"{'const ' if self.const and not isPrimitiveType else ''}{self.type} {'&' if self.ref and not isPrimitiveType else ''}{'*' if self.pointer else ''}{self.name}" + + def declaration(self): + if self.default is None: + return f"{self.type} {self.name}" + else: + return f"{self.type} {self.name} = {self.default}" + + def pyarg(self): + if self.default is not None: + return f"py::arg_v(\"{self.name}\", {self.default}, \"{self.name} = {self.default}\"){'.noconvert()' if self.noConvert else ''}" + else: + return f"py::arg(\"{self.name}\"){'.noconvert()' if self.noConvert else ''}" + + def __str__(self): + return self.name + + +if __name__ == "__main__": + # Run some tests + + normalArgNoDefault1 = Argument("arg1", "int") + normalArgNoDefault2 = Argument(name="arg1", type="int") + + normalArgDefault1 = Argument("arg1", "int", 0) + normalArgDefault2 = Argument(name="arg1", type="int", default=0) + + constArgNoDefault1 = Argument("arg1", "int", const=True) + constArgNoDefault2 = Argument(name="arg1", type="int", const=True) + + refArgNoDefault1 = Argument("arg1", "int", ref=True, noConvert=True) + refArgNoDefault2 = Argument(name="arg1", type="int", ref=True, noConvert=True) + + noConvertArgDefault = Argument(name="arg1", type="int", default=0, noConvert=True) + + print(f"Normal Argument ~ No Default ~ 1 ~ Param: {normalArgNoDefault1.param()}") + print(f"Normal Argument ~ No Default ~ 2 ~ Param: {normalArgNoDefault2.param()}") + print(f"Normal Argument ~ No Default ~ 1 ~ Declaration: {normalArgNoDefault1.declaration()}") + print(f"Normal Argument ~ No Default ~ 2 ~ Declaration: {normalArgNoDefault2.declaration()}") + print(f"Normal Argument ~ No Default ~ 1 ~ PyArg: {normalArgNoDefault1.pyarg()}") + print(f"Normal Argument ~ No Default ~ 2 ~ PyArg: {normalArgNoDefault2.pyarg()}") + + print(f"Normal Argument ~ Default ~ 1 ~ Param: {normalArgDefault1.param()}") + print(f"Normal Argument ~ Default ~ 2 ~ Param: {normalArgDefault2.param()}") + print(f"Normal Argument ~ Default ~ 1 ~ Declaration: {normalArgDefault1.declaration()}") + print(f"Normal Argument ~ Default ~ 2 ~ Declaration: {normalArgDefault2.declaration()}") + print(f"Normal Argument ~ Default ~ 1 ~ PyArg: {normalArgDefault1.pyarg()}") + print(f"Normal Argument ~ Default ~ 2 ~ PyArg: {normalArgDefault2.pyarg()}") + + print(f"Const Argument ~ No Default ~ 1 ~ Param: {constArgNoDefault1.param()}") + print(f"Const Argument ~ No Default ~ 2 ~ Param: {constArgNoDefault2.param()}") + print(f"Const Argument ~ No Default ~ 1 ~ Declaration: {constArgNoDefault1.declaration()}") + print(f"Const Argument ~ No Default ~ 2 ~ Declaration: {constArgNoDefault2.declaration()}") + print(f"Const Argument ~ No Default ~ 1 ~ PyArg: {constArgNoDefault1.pyarg()}") + print(f"Const Argument ~ No Default ~ 2 ~ PyArg: {constArgNoDefault2.pyarg()}") + + print(f"Ref Argument ~ No Default ~ 1 ~ Param: {refArgNoDefault1.param()}") + print(f"Ref Argument ~ No Default ~ 2 ~ Param: {refArgNoDefault2.param()}") + print(f"Ref Argument ~ No Default ~ 1 ~ Declaration: {refArgNoDefault1.declaration()}") + print(f"Ref Argument ~ No Default ~ 2 ~ Declaration: {refArgNoDefault2.declaration()}") + print(f"Ref Argument ~ No Default ~ 1 ~ PyArg: {refArgNoDefault1.pyarg()}") + print(f"Ref Argument ~ No Default ~ 2 ~ PyArg: {refArgNoDefault2.pyarg()}") + + print(f"No Convert Argument ~ Default ~ 1 ~ Param: {noConvertArgDefault.param()}") + print(f"No Convert Argument ~ Default ~ 1 ~ Declaration: {noConvertArgDefault.declaration()}") + print(f"No Convert Argument ~ Default ~ 1 ~ PyArg: {noConvertArgDefault.pyarg()}") diff --git a/librapid/bindings/generators/arrayGenerator.py b/librapid/bindings/generators/arrayGenerator.py new file mode 100644 index 00000000..1cc1e2dd --- /dev/null +++ b/librapid/bindings/generators/arrayGenerator.py @@ -0,0 +1,15 @@ +import argument +import function +import class_ +import module +import file + +constructors = [ + # Default constructor + function.Function( + name="__init__", + args=[] + ), + + +] diff --git a/librapid/bindings/generators/class_.py b/librapid/bindings/generators/class_.py new file mode 100644 index 00000000..48cc3b56 --- /dev/null +++ b/librapid/bindings/generators/class_.py @@ -0,0 +1,112 @@ +from argument import Argument +import function + + +class Class: + def __init__(self, name, type): + self.name = name + self.type = type + self.functions = [] + self.implicitConversions = [] + + def addFunction(self, func): + self.functions.append(func) + return self + + def addImplicitConversion(self, other): + self.implicitConversions.append(other) + return self + + def genImplicitConversions(self): + ret = "" + for other in self.implicitConversions: + ret += f"py::implicitly_convertible<{other.type}, {self.type}>();\n" + + return ret + + def genInterface(self, parent="module"): + ret = f"py::class_<{self.type}>({parent}, \"{self.name}\")\n" + for func in self.functions: + ret += func.gen(self, False) + + if func is not self.functions[-1]: + ret += "\n" + + ret += ";\n" + + if len(self.implicitConversions) > 0: + ret += "\n" + ret += self.genImplicitConversions() + + return ret + + def __str__(self): + return self.name + + +if __name__ == "__main__": + vector = Class("Vec2d", "lrc::Vec2d") + vector.addFunction(function.Function( + name="__init__", + args=[] + )) + vector.addFunction(function.Function( + name="__init__", + args=[ + Argument("x", "double"), + Argument("y", "double", default=0) + ] + )) + vector.addFunction(function.Function( + name="__init__", + args=[ + Argument( + name="other", + type="lrc::Vec2d", + const=True, + ref=True + ) + ] + )) + + vector.addFunction(function.Function( + name="__add__", + args=[ + Argument( + name="self", + type="lrc::Vec2d", + const=True, + ref=True + ), + Argument( + name="other", + type="lrc::Vec2d", + const=True, + ref=True + ) + ], + op=""" + return (self + other).eval(); + """, + isOperator=True + )) + + vector.addFunction(function.Function( + name="__str__", + args=[ + Argument( + name="self", + type="lrc::Vec2d", + const=True, + ref=True + ) + ], + op=""" + return fmt::format("{}", self); + """, + isOperator=True + )) + + vector.addImplicitConversion(vector) + + print(vector.genInterface()) diff --git a/librapid/bindings/generators/file.py b/librapid/bindings/generators/file.py new file mode 100644 index 00000000..e26983dc --- /dev/null +++ b/librapid/bindings/generators/file.py @@ -0,0 +1,32 @@ +import textwrap + + +class File: + def __init__(self, path=None, docstring=None): + self.path = path if path is not None else "./module.cpp" + self.modules = [] + + def addModule(self, module): + self.modules.append(module) + return self + + def genInterface(self): + interfaceFunctions = [] + ret = "" + for module in self.modules: + ret += module.genInterface() + ret += "\n" + + interfaceFunctions.append((module.genInterfaceDefinition, module.genInterfaceCall)) + + return ret, interfaceFunctions + + def write(self, path=None): + interfaceFunctions = [] + with open(path if path is not None else self.path, "w") as f: + f.write("#include \"librapidPython.hpp\"\n\n") + interface, interfaceFunctionsTmp = self.genInterface() + f.write(interface.strip()) + interfaceFunctions.extend(interfaceFunctionsTmp) + + return interfaceFunctions diff --git a/librapid/bindings/generators/function.py b/librapid/bindings/generators/function.py new file mode 100644 index 00000000..3d392d2a --- /dev/null +++ b/librapid/bindings/generators/function.py @@ -0,0 +1,133 @@ +from argument import Argument +import textwrap + +RETURN_TAKE_OWNERSHIP = "take_ownership" +RETURN_COPY = "copy" +RETURN_MOVE = "move" +RETURN_REFERENCE = "reference" +RETURN_REFERENCE_INTERNAL = "reference_internal" +RETURN_AUTO = "automatic" +RETURN_AUTO_REFERENCE = "automatic_reference" + + +class Function: + def __init__(self, *args, **kwargs): + """ + Arguments in order: + - name + - args + - op + - static + - property + - returnPolicy + - isOperator + + :param args: + :param kwargs: + """ + + self.name = kwargs.get("name", None) + self.args = kwargs.get("args", []) + self.op = kwargs.get("op", None) + self.static = kwargs.get("static", False) + self.property = kwargs.get("property", False) + self.returnPolicy = kwargs.get("returnPolicy", None) + self.isOperator = kwargs.get("isOperator", False) + + for i in range(len(args)): + if i == 0 and self.name is None: + self.name = args[i] + elif i == 1 and self.args is None: + self.args = args[i] + elif i == 2 and self.op is None: + self.op = args[i] + elif i == 3 and self.static is None: + self.static = args[i] + elif i == 4 and self.property is None: + self.property = args[i] + elif i == 5 and self.returnPolicy is None: + self.returnPolicy = args[i] + elif i == 6 and self.isOperator is None: + self.isOperator = args[i] + else: + raise ValueError("Too many arguments") + + if self.name is None: + raise ValueError("Function must have a name") + + self.isConstructor = self.name == "__init__" + + if self.op is None: + if not self.isConstructor: + raise ValueError("A non-constructor function must have an operation") + else: + self.op = textwrap.dedent(self.op).strip() + + if not isinstance(self.args, (list, tuple)): + self.args = [self.args] + + def arguments(self, ): + for arg in self.args: + if isinstance(arg, Argument): + yield arg + else: + yield Argument(arg) + + def genArgumentStr(self): + return ", ".join([arg.param() for arg in self.arguments()]) + + def pyargs(self): + args = [arg.pyarg() for arg in self.arguments() if arg.name not in ["self", "*args", "**kwargs"]] + if self.returnPolicy is not None: + args.append(f"py::return_value_policy::{self.returnPolicy}") + + if self.isOperator: + args.append("py::is_operator()") + + return ", ".join(args) + + def gen(self, parent, haveParent=True): + defType = "def" + if self.static: + defType = "def_static" + elif self.property: + defType = "def_property" + + pyArgStr = self.pyargs() + if pyArgStr != "": + pyArgStr = ", " + pyArgStr + + # Special case for constructors + if self.isConstructor and self.op is None: + return textwrap.dedent(f""" + {parent if haveParent else ""}.def(py::init([]({", ".join([arg.param() for arg in self.arguments()])}) {{ + return {parent.type}({", ".join([arg.name for arg in self.arguments()])}); + }}){pyArgStr}) + """).strip() + + return textwrap.dedent(f""" + {parent if haveParent else ""}.{defType}(\"{self.name}\", []({self.genArgumentStr()}) {{ + {self.op} + }}{pyArgStr}) + """).strip() + + def __str__(self): + return self.gen("module") + + +if __name__ == "__main__": + testFunction = Function( + name="test", + args=[ + Argument("a", "int"), + Argument("b", "int", default=0), + ], + op=""" + return a + b; + """ + ) + + print(testFunction.genArgumentStr()) + print(testFunction.pyargs()) + + print(testFunction.gen("module")) diff --git a/librapid/bindings/generators/main.py b/librapid/bindings/generators/main.py new file mode 100644 index 00000000..5773f879 --- /dev/null +++ b/librapid/bindings/generators/main.py @@ -0,0 +1,47 @@ +import os +import textwrap + +import shapeGenerator + +outputDir = "../python/generated" + +boilerplate = textwrap.dedent(f""" + #pragma once + + #define LIBRAPID_ASSERT + + #include + #include + #include + #include + + namespace py = pybind11; + namespace lrc = librapid; + """).strip() + +def main(): + # Ensure the output directory exists + if not os.path.exists(outputDir): + os.makedirs(outputDir) + + interfaceFunctions = [] + + interfaceFunctions += shapeGenerator.write(outputDir + "/shape.cpp") + + with open(f"{outputDir}/librapidPython.hpp", "w") as f: + f.write(boilerplate) + f.write("\n\n") + for interfaceDef, _ in interfaceFunctions: + f.write(f"{interfaceDef()};\n") + + with open(f"{outputDir}/librapidPython.cpp", "w") as f: + f.write("#include \"librapidPython.hpp\"\n\n") + f.write("PYBIND11_MODULE(_librapid, module) {\n") + f.write(" module.doc() = \"Python bindings for librapid\";\n") + for _, interfaceCall in interfaceFunctions: + f.write(f" {interfaceCall('module')};\n") + f.write("}\n") + + +if __name__ == "__main__": + main() diff --git a/librapid/bindings/generators/module.py b/librapid/bindings/generators/module.py new file mode 100644 index 00000000..c18b9d75 --- /dev/null +++ b/librapid/bindings/generators/module.py @@ -0,0 +1,52 @@ +from class_ import Class + + +class Module: + def __init__(self, name, parentModule=None, docstring=None): + self.name = name + self.parent = parentModule + self.docstring = docstring if docstring is not None else f"Bindings for {name}" + self.classes = [] + self.functions = [] + + def addClass(self, class_): + self.classes.append(class_) + return self + + def addFunction(self, func): + self.functions.append(func) + return self + + def genInterfaceDefinition(self): + tmpName = self.name.replace(".", "_") + return f"void genInterface_{tmpName}(py::module& module)" + + def genInterfaceCall(self, moduleName): + tmpName = self.name.replace(".", "_") + return f"genInterface_{tmpName}({moduleName})" + + def genInterface(self): + ret = f"{self.genInterfaceDefinition()} {{\n" + + if self.parent is None: + moduleName = "module" + else: + ret += f"module.def_submodule(\"{self.name}\", \"{self.parent.name}.{self.name}\") {{\n" + moduleName = self.name + + ret += f"{moduleName}.doc() = \"{self.docstring}\";\n\n" + + for class_ in self.classes: + ret += class_.genInterface(moduleName) + ret += "\n" + + for func in self.functions: + ret += func.gen(moduleName) + ret += "\n" + + ret += "}\n" + return ret + + +if __name__ == "__main__": + testModule = Module("test") diff --git a/librapid/bindings/generators/shapeGenerator.py b/librapid/bindings/generators/shapeGenerator.py new file mode 100644 index 00000000..72fb423b --- /dev/null +++ b/librapid/bindings/generators/shapeGenerator.py @@ -0,0 +1,294 @@ +import argument +import function +import class_ +import module +import file + +methods = [ + # Default constructor + function.Function( + name="__init__", + args=[] + ), + + # List of values + function.Function( + name="__init__", + args=[ + argument.Argument( + name="vals", + type="std::vector", + const=True, + ref=True + ) + ] + ), + + # Copy constructor + function.Function( + name="__init__", + args=[ + argument.Argument( + name="other", + type="lrc::Shape", + const=True, + ref=True + ) + ] + ), + + # zeros + function.Function( + name="zeros", + args=[ + argument.Argument( + name="dims", + type="int", + const=True, + ref=False + ) + ], + static=True, + op=""" + return lrc::Shape::zeros(dims); + """ + ), + + # ones + function.Function( + name="ones", + args=[ + argument.Argument( + name="dims", + type="int", + const=True, + ref=False + ) + ], + static=True, + op=""" + return lrc::Shape::ones(dims); + """ + ), + + # Indexing (get) + function.Function( + name="__getitem__", + args=[ + argument.Argument( + name="self", + type="lrc::Shape", + const=True, + ref=True + ), + argument.Argument( + name="index", + type="int", + const=True, + ref=False + ) + ], + op=""" + return self[index]; + """ + ), + + # Indexing (set) + function.Function( + name="__setitem__", + args=[ + argument.Argument( + name="self", + type="lrc::Shape", + const=False, + ref=True + ), + argument.Argument( + name="index", + type="int", + const=True, + ref=False + ), + argument.Argument( + name="value", + type="uint32_t", + const=True, + ref=False + ) + ], + op=""" + self[index] = value; + """, + isOperator=True + ), + + # Equality + function.Function( + name="__eq__", + args=[ + argument.Argument( + name="self", + type="lrc::Shape", + const=True, + ref=True + ), + argument.Argument( + name="other", + type="lrc::Shape", + const=True, + ref=True + ) + ], + op=""" + return self == other; + """, + isOperator=True + ), + + # Inequality + function.Function( + name="__ne__", + args=[ + argument.Argument( + name="self", + type="lrc::Shape", + const=True, + ref=True + ), + argument.Argument( + name="other", + type="lrc::Shape", + const=True, + ref=True + ) + ], + op=""" + return self != other; + """, + isOperator=True + ), + + # Number of dimensions + function.Function( + name="ndim", + args=[ + argument.Argument( + name="self", + type="lrc::Shape", + const=True, + ref=True + ) + ], + op=""" + return self.ndim(); + """ + ), + + # Subshape + function.Function( + name="subshape", + args=[ + argument.Argument( + name="self", + type="lrc::Shape", + const=True, + ref=True + ), + argument.Argument( + name="start", + type="int", + const=True, + ref=False + ), + argument.Argument( + name="end", + type="int", + const=True, + ref=False + ) + ], + op=""" + return self.subshape(start, end); + """ + ), + + # Size + function.Function( + name="size", + args=[ + argument.Argument( + name="self", + type="lrc::Shape", + const=True, + ref=True + ) + ], + op=""" + return self.size(); + """ + ), + + # To string (__str__) + function.Function( + name="__str__", + args=[ + argument.Argument( + name="self", + type="lrc::Shape", + const=True, + ref=True + ) + ], + op=""" + return fmt::format("{}", self); + """ + ), + + # To string (__repr__) + function.Function( + name="__repr__", + args=[ + argument.Argument( + name="self", + type="lrc::Shape", + const=True, + ref=True + ) + ], + op=""" + return fmt::format("_librapid.{}", self); + """ + ) +] + +classType = class_.Class( + name="Shape", + type="lrc::Shape", +) + +classType.functions = methods + +moduleType = module.Module( + name="librapid.shape" +) + +moduleType.classes.append(classType) + + +def write(path): + fileType = file.File( + path="../python/generated/shape.cpp" + ) + + fileType.modules.append(moduleType) + + interfaceFunctions = fileType.write() + # Run clang-format if possible + try: + import subprocess + + subprocess.run(["clang-format", "-i", fileType.path]) + except Exception as e: + print("Unable to run clang-format:", e) + + return interfaceFunctions diff --git a/librapid/bindings/python/test.cpp b/librapid/bindings/python/test.cpp deleted file mode 100644 index 2d53c34e..00000000 --- a/librapid/bindings/python/test.cpp +++ /dev/null @@ -1,24 +0,0 @@ -#define LIBRAPID_ASSERT - -#include -#include -#include -#include - -namespace py = pybind11; -namespace lrc = librapid; - -// Docstring for the module -std::string moduleDocstring = "A highly-optimised Python library for numeric calculations"; - -PYBIND11_MODULE(_librapid, module) { - module.doc() = moduleDocstring; - - module.def("test", [](uint64_t n) { - if (n & 1) { - return 3 * n + 1; - } else { - return n / 2; - } - }); -} diff --git a/pyproject.toml b/pyproject.toml index 6447573e..31498c5f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -7,15 +7,13 @@ requires = [ "scikit-build-core", "cmake", "ninja", - "icecream" + "icecream", + "build" ] build-backend = "scikit_build_core.build" [tool.scikit-build] -cmake.args = [ -] - cmake.build-type = "Release" ninja.make-fallback = true @@ -45,3 +43,57 @@ sdist.exclude = [ [project] name = "librapid" version = "0.7.3" +description = "A high-performance library for arrays and numeric calculations" +long_description = ["file: README.md"] +long_description_content_type = "text/markdown" +author = "Toby Davis" +author_email = "pencilcasman@gmail.com" +license = { file = "LICENSE" } +keywords = [ + "librapid", + "high-performance computing", + "c++", + "mathematics", + "array", + "matrix", + "vector", + "tensor", + "gpu", + "cuda", + "openmp", + "multithreading", + "multicore", + "parallel" +] +classifiers = [ + "Development Status :: 4 - Beta", + "Intended Audience :: Developers", + "Intended Audience :: Science/Research", + "License :: OSI Approved :: MIT License", + "Operating System :: MacOS", + "Operating System :: Microsoft :: Windows", + "Operating System :: POSIX :: Linux", + "Programming Language :: C++", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.6", + "Programming Language :: Python :: 3.7", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Topic :: Scientific/Engineering", + "Topic :: Scientific/Engineering :: Mathematics", + "Topic :: Software Development", + "Topic :: Software Development :: Libraries", + "Topic :: Software Development :: Libraries :: Python Modules", + "Topic :: Utilities", +] + +[project.urls] +homepage = "https://tobydavis.dev/librapid" +documentation = "https://librapid.readthedocs.io/en/latest/" +repository = "https://github.com/LibRapid/librapid" +download = "https://pypi.org/project/librapid/#files" +bug-tracker = "https://github.com/LibRapid/librapid/issues" + diff --git a/setup.py b/setup.py deleted file mode 100644 index 4ae014b0..00000000 --- a/setup.py +++ /dev/null @@ -1,151 +0,0 @@ -# -*- coding: utf-8 -*- - -import os -import platform -import shutil -import sys -import site -import pathlib -from setuptools import find_packages -from skbuild import setup -from skbuild.cmaker import get_cmake_version -from skbuild.exceptions import SKBuildError -import re -from icecream import ic - - -class Version: - def __init__(self, versionStr): - self.versionStr = versionStr - self.version = tuple(map(int, versionStr.split("."))) - - def major(self): - return self.version[0] - - def minor(self): - return self.version[1] - - def patch(self): - return self.version[2] - - def __str__(self): - return self.versionStr - - def __lt__(self, other): - for a, b in zip(self.version, other.version): - if a < b: - return True - elif a > b: - return False - - -# Python implementation (CPython, PyPy, Jython, IronPython) -PYTHON_IMPLEMENTATION = ic(platform.python_implementation()) - -# Root directory -ROOT_DIR = ic(os.path.dirname(os.path.abspath(__file__))) - -setup_requires = [] -install_requires = [] - -try: - if ic(Version(get_cmake_version())) < Version("3.10"): - setup_requires.append('cmake') - install_requires.append("cmake") -except SKBuildError: - setup_requires.append('cmake') - install_requires.append("cmake") - -if ic(platform.system()) == "Windows" and PYTHON_IMPLEMENTATION == "CPython": - setup_requires.append('pywin32') - install_requires.append("pywin32") - -# The full version, including alpha/beta/rc tags -currentMajorVersion = None -currentMinorVersion = None -currentPatchVersion = None - -try: - with open("./version.txt") as versionFile: - text = versionFile.read() - currentMajorVersion = ic(re.search("MAJOR [0-9]+", text).group().split()[1]) - currentMinorVersion = ic(re.search("MINOR [0-9]+", text).group().split()[1]) - currentPatchVersion = ic(re.search("PATCH [0-9]+", text).group().split()[1]) -except Exception as e: - print("[ ERROR ] Failed to read version.txt") - print(e) - sys.exit(1) - -release = ic(f"{currentMajorVersion}.{currentMinorVersion}.{currentPatchVersion}") - -# Locate and read the contents of README.md -with open(os.path.join(ROOT_DIR, 'README.md'), encoding='utf-8') as f: - long_description = f.read() - -cmakeArgs = ["-DLIBRAPID_USE_MULTIPREC=ON"] -if ic(os.environ.get("LIBRAPID_NATIVE_ARCH")): # Only defined on GitHub Actions - cmakeArgs.append(f"-DLIBRAPID_NATIVE_ARCH={os.environ.get('LIBRAPID_NATIVE_ARCH')}") - -if ic(os.environ.get("LIBRAPID_CUDA_WHEEL")): - moduleName = "librapid_cuda_" + os.environ["LIBRAPID_CUDA_WHEEL"] -else: - moduleName = "librapid" - -# Use multiple cores if possible -cmakeArgs.append("-DCMAKE_BUILD_PARALLEL_LEVEL=0") - -setup( - name=moduleName, - version=release, - author="Toby Davis", - author_email="pencilcaseman@gmail.com", - url="https://github.com/LibRapid/librapid", - description="A highly optimised C++ library for high-performance computing", - long_description=long_description, - long_description_content_type="text/markdown", - packages=ic(["librapid." + mod for mod in find_packages("librapid")]), - package_dir={"": "librapid"}, - cmake_args=cmakeArgs, - cmake_install_dir="librapid", - license="MIT License", - keywords=["librapid", - "high-performance computing", - "c++", - "mathematics", - "array", - "matrix", - "vector", - "tensor", - "gpu", - "cuda", - "openmp", - "multithreading", - "multicore" - "parallel"], - classifiers=[ - "Development Status :: 2 - Pre-Alpha", - "Intended Audience :: Developers", - "Intended Audience :: Education", - "License :: OSI Approved :: MIT License", - "Programming Language :: Python", - "Programming Language :: Python :: 3.6", - "Programming Language :: Python :: 3.7", - "Programming Language :: Python :: 3.8", - "Programming Language :: Python :: 3.9", - "Programming Language :: Python :: 3.10", - "Programming Language :: Python :: 3.11", - "Programming Language :: Python :: 3.12", - "Programming Language :: C++", - "Operating System :: Microsoft :: Windows", - "Operating System :: POSIX :: Linux", - "Operating System :: MacOS :: MacOS X", - "Topic :: Scientific/Engineering :: Mathematics", - "Topic :: Scientific/Engineering :: Artificial Intelligence", - "Topic :: Software Development :: Libraries :: Python Modules" - ], - extras_require={"test": "pytest"}, - install_requires=install_requires, - setup_requires=setup_requires, - include_package_data=False, - zip_safe=True -) From 8ac96a50eb68f7be4c905c4def4b21a7ea7cacf2 Mon Sep 17 00:00:00 2001 From: Toby Davis Date: Sat, 21 Oct 2023 00:19:05 +0100 Subject: [PATCH 07/26] ? --- .github/workflows/wheels.yaml | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/.github/workflows/wheels.yaml b/.github/workflows/wheels.yaml index da82e814..876c64b2 100644 --- a/.github/workflows/wheels.yaml +++ b/.github/workflows/wheels.yaml @@ -2,6 +2,12 @@ name: Wheels on: + push: + branches: + - master + pull_request: + branches: + - master workflow_dispatch: jobs: @@ -354,7 +360,7 @@ jobs: name: Upload to PyPi runs-on: ubuntu-latest # needs: [build_wheels, build_wheels_cuda, build_sdist] - needs: [build_wheels, build_sdist] + needs: [ build_wheels, build_sdist ] # The artifacts cannot be uploaded on PRs if: github.event_name != 'pull_request' From 01ade1770aef045739f06d5d1a0b1ccba086808e Mon Sep 17 00:00:00 2001 From: Toby Davis Date: Sat, 21 Oct 2023 00:19:39 +0100 Subject: [PATCH 08/26] Maybe this time it'll work --- .github/workflows/wheels.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/wheels.yaml b/.github/workflows/wheels.yaml index 876c64b2..e84043f2 100644 --- a/.github/workflows/wheels.yaml +++ b/.github/workflows/wheels.yaml @@ -4,10 +4,10 @@ name: Wheels on: push: branches: - - master + - * pull_request: branches: - - master + - * workflow_dispatch: jobs: From 99e2352004dc2a144d68dee4723565e012d64a42 Mon Sep 17 00:00:00 2001 From: Toby Davis Date: Sat, 21 Oct 2023 00:20:42 +0100 Subject: [PATCH 09/26] maybe? --- .github/workflows/wheels.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/wheels.yaml b/.github/workflows/wheels.yaml index e84043f2..9d6f350b 100644 --- a/.github/workflows/wheels.yaml +++ b/.github/workflows/wheels.yaml @@ -4,10 +4,10 @@ name: Wheels on: push: branches: - - * + - "**" pull_request: branches: - - * + - "**" workflow_dispatch: jobs: From 173ac5cb560f0308fea12ad0f3b62ba251aee2dd Mon Sep 17 00:00:00 2001 From: Toby Davis Date: Sat, 21 Oct 2023 00:28:53 +0100 Subject: [PATCH 10/26] Updates --- .github/workflows/wheels.yaml | 29 ++++++++++++++--------------- CMakeLists.txt | 4 ++-- requirements.txt | 3 ++- 3 files changed, 18 insertions(+), 18 deletions(-) diff --git a/.github/workflows/wheels.yaml b/.github/workflows/wheels.yaml index 9d6f350b..a48ece7e 100644 --- a/.github/workflows/wheels.yaml +++ b/.github/workflows/wheels.yaml @@ -184,87 +184,87 @@ jobs: - os: macos-latest pythonVersion: 37 bitness: 64 - platform_id: macosx_x86_64 + platformID: macosx_x86_64 pythonType: "cp" - os: macos-latest pythonVersion: 38 bitness: 64 - platform_id: macosx_x86_64 + platformID: macosx_x86_64 pythonType: "cp" - os: macos-latest pythonVersion: 39 bitness: 64 - platform_id: macosx_x86_64 + platformID: macosx_x86_64 pythonType: "cp" - os: macos-latest pythonVersion: 310 bitness: 64 - platform_id: macosx_x86_64 + platformID: macosx_x86_64 pythonType: "cp" - os: macos-latest pythonVersion: 311 bitness: 64 - platform_id: macosx_x86_64 + platformID: macosx_x86_64 pythonType: "cp" - os: macos-latest pythonVersion: 312 bitness: 64 - platform_id: macosx_x86_64 + platformID: macosx_x86_64 pythonType: "cp" # Apple-Silicon MacOS - os: macos-latest pythonVersion: 38 bitness: 64 - platform_id: macosx_arm64 + platformID: macosx_arm64 pythonType: "cp" - os: macos-latest pythonVersion: 39 bitness: 64 - platform_id: macosx_arm64 + platformID: macosx_arm64 pythonType: "cp" - os: macos-latest pythonVersion: 310 bitness: 64 - platform_id: macosx_arm64 + platformID: macosx_arm64 pythonType: "cp" - os: macos-latest pythonVersion: 311 bitness: 64 - platform_id: macosx_arm64 + platformID: macosx_arm64 pythonType: "cp" - os: macos-latest pythonVersion: 312 bitness: 64 - platform_id: macosx_arm64 + platformID: macosx_arm64 pythonType: "cp" # Apple-Silicon MacOS PyPy - os: macos-latest pythonVersion: 38 bitness: 64 - platform_id: macosx_arm64 + platformID: macosx_arm64 pythonType: "pp" - os: macos-latest pythonVersion: 39 bitness: 64 - platform_id: macosx_arm64 + platformID: macosx_arm64 pythonType: "pp" - os: macos-latest pythonVersion: 310 bitness: 64 - platform_id: macosx_arm64 + platformID: macosx_arm64 pythonType: "pp" steps: @@ -386,7 +386,6 @@ jobs: run: | ls dist twine upload --skip-existing dist/artifact/* -u ${{ secrets.PYPI_USER }} -p ${{ secrets.PYPI_PASSWORD }} - # To uncomment: remove hash -- no space after!!! # # Build the wheels for Linux and Windows with CUDA support diff --git a/CMakeLists.txt b/CMakeLists.txt index e7e90467..e3e730d1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -144,8 +144,8 @@ if (${SKBUILD}) set(LIBRAPID_USE_CUDA ON) set(LIBRAPID_USE_OPENCL ON) set(LIBRAPID_USE_OMP ON) - set(LIBRAPID_USE_MULTIPREC ON) - set(LIBRAPID_GET_MULTIPREC ON) + set(LIBRAPID_USE_MULTIPREC OFF) + set(LIBRAPID_GET_MULTIPREC OFF) file(GLOB_RECURSE PYTHON_SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/librapid/bindings/python/*.hpp" # Header files diff --git a/requirements.txt b/requirements.txt index 5b8082ab..f19d7297 100644 --- a/requirements.txt +++ b/requirements.txt @@ -7,4 +7,5 @@ pybind11 cmake scikit-build packaging -icecream \ No newline at end of file +icecream +build \ No newline at end of file From db6608ac723bcc61147d3c0b8f3d02dc5287a9ae Mon Sep 17 00:00:00 2001 From: Toby Davis Date: Sat, 21 Oct 2023 00:42:45 +0100 Subject: [PATCH 11/26] Refactor some things. Maybe this will help --- .github/workflows/wheels.yaml | 12 ++++++------ CMakeLists.txt | 37 ++++++++++++++++------------------- 2 files changed, 23 insertions(+), 26 deletions(-) diff --git a/.github/workflows/wheels.yaml b/.github/workflows/wheels.yaml index a48ece7e..7bc526d3 100644 --- a/.github/workflows/wheels.yaml +++ b/.github/workflows/wheels.yaml @@ -294,9 +294,9 @@ jobs: CC: gcc-11 CXX: g++-11 CMAKE_BUILD_PARALLEL_LEVEL: 1 - GITHUB_ACTIONS: true - LIBRAPID_GET_BLAS: false - LIBRAPID_GET_FFTW: false + GITHUB_ACTIONS: ON + LIBRAPID_GET_BLAS: OFF + LIBRAPID_GET_FFTW: OFF run: | python -m pip install cibuildwheel @@ -313,9 +313,9 @@ jobs: CIBW_MANYLINUX_PYPY_I686_IMAGE: ${{ matrix.manylinux_image }} CIBW_BUILD_VERBOSITY: 1 CMAKE_BUILD_PARALLEL_LEVEL: 1 - GITHUB_ACTIONS: true - LIBRAPID_GET_BLAS: true - LIBRAPID_GET_FFTW: false + GITHUB_ACTIONS: ON + LIBRAPID_GET_BLAS: ON + LIBRAPID_GET_FFTW: OFF run: | python -m pip install cibuildwheel diff --git a/CMakeLists.txt b/CMakeLists.txt index e3e730d1..f3b4ca04 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -114,39 +114,36 @@ if (${SKBUILD}) # Since it is not possible to set the CMake options in setup.py (we have to use pyproject.toml), we have to manually # read from the environment to set everything correctly: - # LIBRAPID_USE_BLAS = ${LIBRAPID_USE_BLAS} - # LIBRAPID_GET_BLAS = ${LIBRAPID_GET_BLAS} - # LIBRAPID_USE_CUDA = ON - # LIBRAPID_USE_OPENCL = ON - # LIBRAPID_USE_OMP = ON - # LIBRAPID_USE_MULTIPREC = ON - # LIBRAPID_NATIVE_ARCH = NOT ${GITHUB_ACTIONS} - # LIBRAPID_FAST_MATH = ${LIBRAPID_FAST_MATH} - # LIBRAPID_GET_FFTW = ${LIBRAPID_GET_FFTW} + # Enable BLAS + set(LIBRAPID_USE_BLAS ON) + + # Get BLAS if the environment variable is set if ($ENV{LIBRAPID_GET_BLAS}) set(LIBRAPID_GET_BLAS ON) - endif () - - if (NOT $ENV{GITHUB_ACTIONS}) - set(LIBRAPID_NATIVE_ARCH ON) - endif () + endif() + # Use fast math if the environment variable is set if ($ENV{LIBRAPID_FAST_MATH}) set(LIBRAPID_FAST_MATH ON) - endif () + endif() + # Get FFTW if the environment variable is set if ($ENV{LIBRAPID_GET_FFTW}) set(LIBRAPID_GET_FFTW ON) - endif () + endif() - set(LIBRAPID_USE_BLAS ON) - set(LIBRAPID_USE_CUDA ON) - set(LIBRAPID_USE_OPENCL ON) - set(LIBRAPID_USE_OMP ON) + # Use CUDA/OpenCL only when not inside GitHub Actions + if (NOT $ENV{GITHUB_ACTIONS}) + set(LIBRAPID_USE_CUDA ON) + set(LIBRAPID_USE_OPENCL ON) + endif() + + # Disable multiprec set(LIBRAPID_USE_MULTIPREC OFF) set(LIBRAPID_GET_MULTIPREC OFF) + file(GLOB_RECURSE PYTHON_SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/librapid/bindings/python/*.hpp" # Header files "${CMAKE_CURRENT_SOURCE_DIR}/librapid/bindings/python/*.cpp" # Source files From 6ff6d250538fa308b16bad773918d1c4d1d1ecd8 Mon Sep 17 00:00:00 2001 From: Toby Davis Date: Sat, 21 Oct 2023 00:50:27 +0100 Subject: [PATCH 12/26] Fewer wheel build configs --- .github/workflows/wheels.yaml | 116 +++++++++++++++++----------------- CMakeLists.txt | 5 +- 2 files changed, 60 insertions(+), 61 deletions(-) diff --git a/.github/workflows/wheels.yaml b/.github/workflows/wheels.yaml index 7bc526d3..dd41a004 100644 --- a/.github/workflows/wheels.yaml +++ b/.github/workflows/wheels.yaml @@ -59,48 +59,48 @@ jobs: pythonType: "cp" # Arm Windows - - os: windows-latest - pythonVersion: 39 - bitness: 32 - platformID: win_arm64 - pythonType: "cp" - - - os: windows-latest - pythonVersion: 310 - bitness: 32 - platformID: win_arm64 - pythonType: "cp" - - - os: windows-latest - pythonVersion: 311 - bitness: 32 - platformID: win_arm64 - pythonType: "cp" - - - os: windows-latest - pythonVersion: 312 - bitness: 32 - platformID: win_arm64 - pythonType: "cp" + # - os: windows-latest + # pythonVersion: 39 + # bitness: 32 + # platformID: win_arm64 + # pythonType: "cp" + + # - os: windows-latest + # pythonVersion: 310 + # bitness: 32 + # platformID: win_arm64 + # pythonType: "cp" + + # - os: windows-latest + # pythonVersion: 311 + # bitness: 32 + # platformID: win_arm64 + # pythonType: "cp" + + # - os: windows-latest + # pythonVersion: 312 + # bitness: 32 + # platformID: win_arm64 + # pythonType: "cp" # PyPy on Windows - - os: windows-latest - pythonVersion: 37 - bitness: 64 - platformID: win_amd64 - pythonType: "pp" - - - os: windows-latest - pythonVersion: 38 - bitness: 64 - platformID: win_amd64 - pythonType: "pp" - - - os: windows-latest - pythonVersion: 39 - bitness: 64 - platformID: win_amd64 - pythonType: "pp" + # - os: windows-latest + # pythonVersion: 37 + # bitness: 64 + # platformID: win_amd64 + # pythonType: "pp" + + # - os: windows-latest + # pythonVersion: 38 + # bitness: 64 + # platformID: win_amd64 + # pythonType: "pp" + + # - os: windows-latest + # pythonVersion: 39 + # bitness: 64 + # platformID: win_amd64 + # pythonType: "pp" - os: windows-latest pythonVersion: 310 @@ -249,23 +249,23 @@ jobs: pythonType: "cp" # Apple-Silicon MacOS PyPy - - os: macos-latest - pythonVersion: 38 - bitness: 64 - platformID: macosx_arm64 - pythonType: "pp" - - - os: macos-latest - pythonVersion: 39 - bitness: 64 - platformID: macosx_arm64 - pythonType: "pp" - - - os: macos-latest - pythonVersion: 310 - bitness: 64 - platformID: macosx_arm64 - pythonType: "pp" + # - os: macos-latest + # pythonVersion: 38 + # bitness: 64 + # platformID: macosx_arm64 + # pythonType: "pp" + + # - os: macos-latest + # pythonVersion: 39 + # bitness: 64 + # platformID: macosx_arm64 + # pythonType: "pp" + + # - os: macos-latest + # pythonVersion: 310 + # bitness: 64 + # platformID: macosx_arm64 + # pythonType: "pp" steps: - name: Checkout LibRapid @@ -291,8 +291,6 @@ jobs: CIBW_MANYLINUX_PYPY_X86_64_IMAGE: ${{ matrix.manylinux_image }} CIBW_MANYLINUX_PYPY_I686_IMAGE: ${{ matrix.manylinux_image }} CIBW_BUILD_VERBOSITY: 1 - CC: gcc-11 - CXX: g++-11 CMAKE_BUILD_PARALLEL_LEVEL: 1 GITHUB_ACTIONS: ON LIBRAPID_GET_BLAS: OFF diff --git a/CMakeLists.txt b/CMakeLists.txt index f3b4ca04..2430a564 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -111,12 +111,13 @@ if (${SKBUILD}) WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/librapid/bindings/generators" ) - # Since it is not possible to set the CMake options in setup.py (we have to use pyproject.toml), we have to manually # read from the environment to set everything correctly: # Enable BLAS - set(LIBRAPID_USE_BLAS ON) + if (NOT ${LIBRAPID_NO_BLAS}) + set(LIBRAPID_USE_BLAS ON) + endif() # Get BLAS if the environment variable is set if ($ENV{LIBRAPID_GET_BLAS}) From d4dfdcc1b184a455bc7502d2272723a87b69685d Mon Sep 17 00:00:00 2001 From: Toby Davis Date: Sat, 21 Oct 2023 01:21:10 +0100 Subject: [PATCH 13/26] XCode Update? --- .github/workflows/wheels.yaml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.github/workflows/wheels.yaml b/.github/workflows/wheels.yaml index dd41a004..b5bea945 100644 --- a/.github/workflows/wheels.yaml +++ b/.github/workflows/wheels.yaml @@ -281,6 +281,12 @@ jobs: - name: Install Requirements run: pip install -r requirements.txt + - name: Install XCode + if: matrix.os == 'macos-latest' + uses: maxim-lobanov/setup-xcode@v1.5.1 + with: + xcode-version: latest + - name: Build Wheels if: runner.os == 'macOS' env: From d6d64e9dd6a5ff547bf368dafe72bc84fe17d1cd Mon Sep 17 00:00:00 2001 From: Toby Davis Date: Sat, 21 Oct 2023 01:31:32 +0100 Subject: [PATCH 14/26] Use Clang not AppleClang --- .github/workflows/wheels.yaml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.github/workflows/wheels.yaml b/.github/workflows/wheels.yaml index b5bea945..e56ea8f3 100644 --- a/.github/workflows/wheels.yaml +++ b/.github/workflows/wheels.yaml @@ -287,6 +287,13 @@ jobs: with: xcode-version: latest + - name: Install Clang + uses: KyleMayes/install-llvm-action@v1 + with: + version: ${{ matrix.clangVer }} + directory: "./llvm" + env: on + - name: Build Wheels if: runner.os == 'macOS' env: @@ -301,6 +308,8 @@ jobs: GITHUB_ACTIONS: ON LIBRAPID_GET_BLAS: OFF LIBRAPID_GET_FFTW: OFF + CC: ../llvm/bin/clang + CXX: ../llvm/bin/clang++ run: | python -m pip install cibuildwheel From 61937065884d04ba3097b61036823dbcd916d218 Mon Sep 17 00:00:00 2001 From: Toby Davis Date: Sat, 21 Oct 2023 01:34:55 +0100 Subject: [PATCH 15/26] Specify clang version --- .github/workflows/wheels.yaml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/wheels.yaml b/.github/workflows/wheels.yaml index e56ea8f3..e8156f7e 100644 --- a/.github/workflows/wheels.yaml +++ b/.github/workflows/wheels.yaml @@ -288,9 +288,10 @@ jobs: xcode-version: latest - name: Install Clang + if: matrix.os == 'macos-latest' uses: KyleMayes/install-llvm-action@v1 with: - version: ${{ matrix.clangVer }} + version: "15.0" directory: "./llvm" env: on From 1c70147072c2427ada313260e7bb13ec09521208 Mon Sep 17 00:00:00 2001 From: Toby Davis Date: Sat, 21 Oct 2023 01:39:10 +0100 Subject: [PATCH 16/26] DIRECTORIES ARE SO HARD --- .github/workflows/wheels.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/wheels.yaml b/.github/workflows/wheels.yaml index e8156f7e..f9acb776 100644 --- a/.github/workflows/wheels.yaml +++ b/.github/workflows/wheels.yaml @@ -309,8 +309,8 @@ jobs: GITHUB_ACTIONS: ON LIBRAPID_GET_BLAS: OFF LIBRAPID_GET_FFTW: OFF - CC: ../llvm/bin/clang - CXX: ../llvm/bin/clang++ + CC: ./llvm/bin/clang + CXX: ./llvm/bin/clang++ run: | python -m pip install cibuildwheel From 88d9e43d850c65a3029f91d54c0ca3deeb96f7b8 Mon Sep 17 00:00:00 2001 From: Toby Davis Date: Sat, 21 Oct 2023 02:05:32 +0100 Subject: [PATCH 17/26] Different clang install? --- .github/workflows/wheels.yaml | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/.github/workflows/wheels.yaml b/.github/workflows/wheels.yaml index f9acb776..79f5c7ff 100644 --- a/.github/workflows/wheels.yaml +++ b/.github/workflows/wheels.yaml @@ -287,13 +287,18 @@ jobs: with: xcode-version: latest + # - name: Install Clang + # if: matrix.os == 'macos-latest' + # uses: KyleMayes/install-llvm-action@v1 + # with: + # version: "15.0" + # directory: "./llvm" + # env: on + - name: Install Clang if: matrix.os == 'macos-latest' - uses: KyleMayes/install-llvm-action@v1 - with: - version: "15.0" - directory: "./llvm" - env: on + run: | + brew install llvm libomp - name: Build Wheels if: runner.os == 'macOS' @@ -309,8 +314,8 @@ jobs: GITHUB_ACTIONS: ON LIBRAPID_GET_BLAS: OFF LIBRAPID_GET_FFTW: OFF - CC: ./llvm/bin/clang - CXX: ./llvm/bin/clang++ + CC: clang + CXX: clang++ run: | python -m pip install cibuildwheel From 9285458d97d553291a8f49480956905932432a57 Mon Sep 17 00:00:00 2001 From: Toby Davis Date: Sat, 21 Oct 2023 02:12:28 +0100 Subject: [PATCH 18/26] Change compiler path... --- .github/workflows/wheels.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/wheels.yaml b/.github/workflows/wheels.yaml index 79f5c7ff..8b4cb032 100644 --- a/.github/workflows/wheels.yaml +++ b/.github/workflows/wheels.yaml @@ -314,8 +314,8 @@ jobs: GITHUB_ACTIONS: ON LIBRAPID_GET_BLAS: OFF LIBRAPID_GET_FFTW: OFF - CC: clang - CXX: clang++ + CC: /usr/local/opt/llvm/bin/clang + CXX: /usr/local/opt/llvm/bin/clang++ run: | python -m pip install cibuildwheel From 822482fe76f473bc76e98c164e7ed1274905483f Mon Sep 17 00:00:00 2001 From: Toby Davis Date: Sat, 21 Oct 2023 15:57:11 +0100 Subject: [PATCH 19/26] Documentation fixes --- Doxyfile | 2 + docs/source/conf.py | 3 +- .../librapid/datastructures/bitset.hpp | 13 ++- pyproject.toml | 1 + scripts/setVersion.py | 30 +++--- scripts/tmp/doxyTemplate | 2 + scripts/tmp/pyproject.toml | 100 ++++++++++++++++++ 7 files changed, 131 insertions(+), 20 deletions(-) create mode 100644 scripts/tmp/pyproject.toml diff --git a/Doxyfile b/Doxyfile index 45407e63..9cfa87e7 100644 --- a/Doxyfile +++ b/Doxyfile @@ -986,6 +986,8 @@ EXCLUDE_PATTERNS += */librapid/fftw/* EXCLUDE_PATTERNS += */opencl/kernels/* EXCLUDE_PATTERNS += */cuda/kernels/* EXCLUDE_PATTERNS += */opencl/opencl.hpp +EXCLUDE_PATTERNS += */librapid/bindings/* +EXCLUDE_PATTERNS += *.py # The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names # (namespaces, classes, functions, etc.) that should be excluded from the diff --git a/docs/source/conf.py b/docs/source/conf.py index d5a5e24f..451ada45 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -154,7 +154,8 @@ exclude_patterns = [ "*jitify*", "*fmt*", - "*blas/*" + "*blas/*", + "*bindings*" ] # -- Options for HTML output ------------------------------------------------- diff --git a/librapid/include/librapid/datastructures/bitset.hpp b/librapid/include/librapid/datastructures/bitset.hpp index 2991eda5..e4a5fb40 100644 --- a/librapid/include/librapid/datastructures/bitset.hpp +++ b/librapid/include/librapid/datastructures/bitset.hpp @@ -6,10 +6,13 @@ namespace librapid { class BitSet { public: template + +#ifndef LIBRAPID_DOXYGEN using BitSetMerger = BitSet<(numBits_ > otherBits ? numBits_ : otherBits), stackAlloc_ && otherStackAlloc>; - - friend BitSet; +#else + using BitSetMerger = BitSet; +#endif using ElementType = uint64_t; static constexpr bool stackAlloc = stackAlloc_; @@ -414,11 +417,13 @@ struct fmt::formatter, Char> { } }; -LIBRAPID_SIMPLE_IO_NORANGE(uint64_t numBits COMMA bool stackAlloc, librapid::BitSet) +LIBRAPID_SIMPLE_IO_NORANGE(uint64_t numBits COMMA bool stackAlloc, + librapid::BitSet) // std ostream support template -std::ostream &operator<<(std::ostream &os, const librapid::BitSet &bitset) { +std::ostream &operator<<(std::ostream &os, + const librapid::BitSet &bitset) { return os << fmt::format("{}", bitset); } diff --git a/pyproject.toml b/pyproject.toml index 31498c5f..91e9229d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -44,6 +44,7 @@ sdist.exclude = [ name = "librapid" version = "0.7.3" description = "A high-performance library for arrays and numeric calculations" +readme = "README.md" long_description = ["file: README.md"] long_description_content_type = "text/markdown" author = "Toby Davis" diff --git a/scripts/setVersion.py b/scripts/setVersion.py index f7af85ef..fba8af36 100644 --- a/scripts/setVersion.py +++ b/scripts/setVersion.py @@ -7,7 +7,7 @@ """ import sys -import regex +import re import argparse from datetime import datetime @@ -19,9 +19,9 @@ try: with open("../version.txt", "r") as versionFile: text = versionFile.read() - currentMajorVersion = regex.search("MAJOR [0-9]+", text).group().split()[1] - currentMinorVersion = regex.search("MINOR [0-9]+", text).group().split()[1] - currentPatchVersion = regex.search("PATCH [0-9]+", text).group().split()[1] + currentMajorVersion = re.search("MAJOR [0-9]+", text).group().split()[1] + currentMinorVersion = re.search("MINOR [0-9]+", text).group().split()[1] + currentPatchVersion = re.search("PATCH [0-9]+", text).group().split()[1] print(f"Current Version: v{currentMajorVersion}.{currentMinorVersion}.{currentPatchVersion}") except Exception as e: print("[ ERROR ] Failed to read version.txt") @@ -42,7 +42,7 @@ if args.version: # Validate version number - if not regex.match("[0-9]+\.[0-9]+\.[0-9]+", args.version): + if not re.match("[0-9]+\.[0-9]+\.[0-9]+", args.version): print("[ ERROR ] Invalid version number") sys.exit(1) newMajorVersion = args.version.split(".")[0] @@ -87,13 +87,13 @@ citationFile.write(template) print("Written to CITATION.cff") -# # Write to .hdoc.toml -# with open("tmp/hdocTemplate.toml", "r") as templateFile: -# template = templateFile.read() -# print("Loaded .hdoc.toml template") -# -# with open("../.hdoc.toml", "w") as hdocFile: -# versionString = f"v{newMajorVersion}.{newMinorVersion}.{newPatchVersion}" -# template = template.replace("$${{ INSERT_VERSION_NUMBER_HERE }}$$", versionString) -# hdocFile.write(template) -# print("Written to .hdoc.toml") +# Write to pyproject.toml +with open("tmp/pyprojectTemplate.toml", "r") as templateFile: + template = templateFile.read() + print("Loaded pyproject.toml template") + +with open("../pyproject.toml", "w") as pyprojectFile: + versionString = f"\"{newMajorVersion}.{newMinorVersion}.{newPatchVersion}\"" + template = template.replace("$${{ INSERT_VERSION_NUMBER_HERE }}$$", versionString) + pyprojectFile.write(template) + print("Written to pyproject.toml") diff --git a/scripts/tmp/doxyTemplate b/scripts/tmp/doxyTemplate index a0a4cbd8..ef67f5a8 100644 --- a/scripts/tmp/doxyTemplate +++ b/scripts/tmp/doxyTemplate @@ -987,6 +987,8 @@ EXCLUDE_PATTERNS += */librapid/fftw/* EXCLUDE_PATTERNS += */opencl/kernels/* EXCLUDE_PATTERNS += */cuda/kernels/* EXCLUDE_PATTERNS += */opencl/opencl.hpp +EXCLUDE_PATTERNS += */librapid/bindings/* +EXCLUDE_PATTERNS += *.py # The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names # (namespaces, classes, functions, etc.) that should be excluded from the diff --git a/scripts/tmp/pyproject.toml b/scripts/tmp/pyproject.toml new file mode 100644 index 00000000..7639b046 --- /dev/null +++ b/scripts/tmp/pyproject.toml @@ -0,0 +1,100 @@ +[build-system] +requires = [ + "setuptools", + "wheel", + "pybind11", + "cibuildwheel", + "scikit-build-core", + "cmake", + "ninja", + "icecream", + "build" +] +build-backend = "scikit_build_core.build" + +[tool.scikit-build] + +cmake.build-type = "Release" + +ninja.make-fallback = true + +sdist.exclude = [ + "CMakeLists.txt", + "cmake", + "CMakeFiles", + "build", + "dist", + "*.h", + "*.c", + "*.hpp", + "*.cpp", + "*.tcc", + "*.cxx", + "*.cu", + "*.cuh", + "*.cl", + "*.so", + "*.dylib", + "*.dll", + "*.doc", + "*.tgz", +] + +[project] +name = "librapid" +version = "$${{ INSERT_VERSION_NUMBER_HERE }}$$" +description = "A high-performance library for arrays and numeric calculations" +readme = "README.md" +long_description = ["file: README.md"] +long_description_content_type = "text/markdown" +author = "Toby Davis" +author_email = "pencilcasman@gmail.com" +license = { file = "LICENSE" } +keywords = [ + "librapid", + "high-performance computing", + "c++", + "mathematics", + "array", + "matrix", + "vector", + "tensor", + "gpu", + "cuda", + "openmp", + "multithreading", + "multicore", + "parallel" +] +classifiers = [ + "Development Status :: 4 - Beta", + "Intended Audience :: Developers", + "Intended Audience :: Science/Research", + "License :: OSI Approved :: MIT License", + "Operating System :: MacOS", + "Operating System :: Microsoft :: Windows", + "Operating System :: POSIX :: Linux", + "Programming Language :: C++", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.6", + "Programming Language :: Python :: 3.7", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Topic :: Scientific/Engineering", + "Topic :: Scientific/Engineering :: Mathematics", + "Topic :: Software Development", + "Topic :: Software Development :: Libraries", + "Topic :: Software Development :: Libraries :: Python Modules", + "Topic :: Utilities", +] + +[project.urls] +homepage = "https://tobydavis.dev/librapid" +documentation = "https://librapid.readthedocs.io/en/latest/" +repository = "https://github.com/LibRapid/librapid" +download = "https://pypi.org/project/librapid/#files" +bug-tracker = "https://github.com/LibRapid/librapid/issues" + From 663ecd78afd13acbfbc47be823325e9a4e191404 Mon Sep 17 00:00:00 2001 From: Toby Davis Date: Sat, 21 Oct 2023 17:33:31 +0100 Subject: [PATCH 20/26] More python bindings --- .../bindings/generators/arrayGenerator.py | 221 +++++++++++++++++- librapid/bindings/generators/main.py | 5 +- librapid/bindings/generators/module.py | 21 +- .../bindings/generators/shapeGenerator.py | 27 ++- 4 files changed, 260 insertions(+), 14 deletions(-) diff --git a/librapid/bindings/generators/arrayGenerator.py b/librapid/bindings/generators/arrayGenerator.py index 1cc1e2dd..ff3627a4 100644 --- a/librapid/bindings/generators/arrayGenerator.py +++ b/librapid/bindings/generators/arrayGenerator.py @@ -4,12 +4,219 @@ import module import file -constructors = [ - # Default constructor - function.Function( - name="__init__", - args=[] - ), +import itertools +# The set of Array types we support in Python +arrayTypes = [] -] +for scalar in [("int16_t", "Int16"), + ("int32_t", "Int32"), + ("int64_t", "Int64"), + ("float", "Float"), + ("double", "Double"), + ("lrc::Complex", "ComplexFloat"), + ("lrc::Complex", "ComplexDouble")]: + for backend in ["CPU", "OpenCL", "CUDA"]: + arrayTypes.append({ + "scalar": scalar[0], + "backend": backend, + "name": f"Array{scalar[1]}{backend}" + }) + + +def generateCppArrayType(config): + return f"lrc::Array<{config['scalar']}, lrc::backend::{config['backend']}>" + + +def generateCppArrayViewType(config): + return f"lrc::array::GeneralArrayView<{generateCppArrayType(config)}>" + + +def generateFunctionsForArray(config): + methods = [ + # Default constructor + function.Function( + name="__init__", + args=[] + ) + ] + + # Static fromData (n dimensions) + for n in range(1, 9): + cppType = "" + for j in range(n): + cppType += "std::vector<" + cppType += config['scalar'] + ">" * n + + methods.append( + function.Function( + name="fromData", + args=[ + argument.Argument( + name=f"array{n}D", + type=cppType, + const=True, + ref=True, + ) + ], + static=True, + op=f""" + return {generateCppArrayType(config)}::fromData(array{n}D); + """ + ) + ) + + methods += [ + # Shape + function.Function( + name="__init__", + args=[ + argument.Argument( + name="shape", + type="lrc::Shape", + const=True, + ref=True + ) + ] + ), + + # Shape and fill + function.Function( + name="__init__", + args=[ + argument.Argument( + name="shape", + type="lrc::Shape", + const=True, + ref=True + ), + argument.Argument( + name="val", + type=config['scalar'], + const=True, + ref=True + ) + ] + ), + + # Copy constructor + function.Function( + name="__init__", + args=[ + argument.Argument( + name="other", + type=generateCppArrayType(config), + const=True, + ref=True + ) + ] + ), + + # String representation + function.Function( + name="__str__", + args=[ + argument.Argument( + name="self", + type=generateCppArrayType(config), + const=True, + ref=True + ) + ], + op=""" + return fmt::format("{}", self); + """ + ), + + # String representation + function.Function( + name="__repr__", + args=[ + argument.Argument( + name="self", + type=generateCppArrayType(config), + const=True, + ref=True + ) + ], + op=f""" + return fmt::format("", self.shape()); + """ + ), + + # Format (__format__) + function.Function( + name="__format__", + args=[ + argument.Argument( + name="self", + type=generateCppArrayType(config), + const=True, + ref=True + ), + argument.Argument( + name="formatSpec", + type="std::string", + const=True, + ref=True + ) + ], + op=""" + std::string format = fmt::format("{{:{}}}", formatSpec); + return fmt::format(fmt::runtime(format), self); + """ + ) + ] + + return methods, [] + + +def generateArrayModule(config): + arrayClass = class_.Class( + name=config["name"], + type=generateCppArrayType(config) + ) + + methods, functions = generateFunctionsForArray(config) + arrayClass.functions.extend(methods) + + includeGuard = None + if config["backend"] == "CUDA": + includeGuard = "defined(LIBRAPID_HAS_CUDA)" + elif config["backend"] == "OpenCL": + includeGuard = "defined(LIBRAPID_HAS_OPENCL)" + + arrayModule = module.Module( + name=f"librapid.{config['name']}", + includeGuard=includeGuard + ) + arrayModule.addClass(arrayClass) + arrayModule.functions.extend(functions) + + return arrayModule + + +def writeArray(root, config): + fileType = file.File( + path=f"{root}/{config['name']}.cpp" + ) + + fileType.modules.append(generateArrayModule(config)) + + interfaceFunctions = fileType.write() + # Run clang-format if possible + try: + import subprocess + + subprocess.run(["clang-format", "-i", fileType.path]) + except Exception as e: + print("Unable to run clang-format:", e) + + return interfaceFunctions + + +def write(root): + interfaces = [] + for config in arrayTypes: + interfaces.extend(writeArray(root, config)) + return interfaces diff --git a/librapid/bindings/generators/main.py b/librapid/bindings/generators/main.py index 5773f879..6c623b46 100644 --- a/librapid/bindings/generators/main.py +++ b/librapid/bindings/generators/main.py @@ -2,6 +2,7 @@ import textwrap import shapeGenerator +import arrayGenerator outputDir = "../python/generated" @@ -19,6 +20,7 @@ namespace lrc = librapid; """).strip() + def main(): # Ensure the output directory exists if not os.path.exists(outputDir): @@ -26,7 +28,8 @@ def main(): interfaceFunctions = [] - interfaceFunctions += shapeGenerator.write(outputDir + "/shape.cpp") + interfaceFunctions += shapeGenerator.write(outputDir) + interfaceFunctions += arrayGenerator.write(outputDir) with open(f"{outputDir}/librapidPython.hpp", "w") as f: f.write(boilerplate) diff --git a/librapid/bindings/generators/module.py b/librapid/bindings/generators/module.py index c18b9d75..cc5c47e8 100644 --- a/librapid/bindings/generators/module.py +++ b/librapid/bindings/generators/module.py @@ -1,11 +1,13 @@ from class_ import Class +import textwrap class Module: - def __init__(self, name, parentModule=None, docstring=None): + def __init__(self, name, parentModule=None, docstring=None, includeGuard=None): self.name = name self.parent = parentModule - self.docstring = docstring if docstring is not None else f"Bindings for {name}" + self.docstring = docstring + self.includeGuard = includeGuard self.classes = [] self.functions = [] @@ -34,7 +36,8 @@ def genInterface(self): ret += f"module.def_submodule(\"{self.name}\", \"{self.parent.name}.{self.name}\") {{\n" moduleName = self.name - ret += f"{moduleName}.doc() = \"{self.docstring}\";\n\n" + if self.docstring is not None: + ret += f"{moduleName}.doc() = \"{self.docstring}\";\n\n" for class_ in self.classes: ret += class_.genInterface(moduleName) @@ -45,7 +48,17 @@ def genInterface(self): ret += "\n" ret += "}\n" - return ret + + if self.includeGuard is None: + return ret + else: + return textwrap.dedent(f""" + #if {self.includeGuard} + {ret} + #else + {self.genInterfaceDefinition()} {{}} + #endif + """) if __name__ == "__main__": diff --git a/librapid/bindings/generators/shapeGenerator.py b/librapid/bindings/generators/shapeGenerator.py index 72fb423b..703f8ccf 100644 --- a/librapid/bindings/generators/shapeGenerator.py +++ b/librapid/bindings/generators/shapeGenerator.py @@ -258,6 +258,29 @@ op=""" return fmt::format("_librapid.{}", self); """ + ), + + # Format (__format__) + function.Function( + name="__format__", + args=[ + argument.Argument( + name="self", + type="lrc::Shape", + const=True, + ref=True + ), + argument.Argument( + name="formatSpec", + type="std::string", + const=True, + ref=True + ) + ], + op=""" + std::string format = fmt::format("{{:{}}}", formatSpec); + return fmt::format(fmt::runtime(format), self); + """ ) ] @@ -275,9 +298,9 @@ moduleType.classes.append(classType) -def write(path): +def write(root): fileType = file.File( - path="../python/generated/shape.cpp" + path=f"{root}/shape.cpp" ) fileType.modules.append(moduleType) From a6f137370d1dc8cd3dfd9ae75cdb1e47448ef640 Mon Sep 17 00:00:00 2001 From: Toby Davis Date: Sat, 21 Oct 2023 21:08:37 +0100 Subject: [PATCH 21/26] Use macos-13 to see if that fixes anything --- .github/workflows/wheels.yaml | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/.github/workflows/wheels.yaml b/.github/workflows/wheels.yaml index 8b4cb032..d573a04f 100644 --- a/.github/workflows/wheels.yaml +++ b/.github/workflows/wheels.yaml @@ -181,87 +181,87 @@ jobs: pythonType: "pp" # MacOS x86_64 - - os: macos-latest + - os: macos-13 pythonVersion: 37 bitness: 64 platformID: macosx_x86_64 pythonType: "cp" - - os: macos-latest + - os: macos-13 pythonVersion: 38 bitness: 64 platformID: macosx_x86_64 pythonType: "cp" - - os: macos-latest + - os: macos-13 pythonVersion: 39 bitness: 64 platformID: macosx_x86_64 pythonType: "cp" - - os: macos-latest + - os: macos-13 pythonVersion: 310 bitness: 64 platformID: macosx_x86_64 pythonType: "cp" - - os: macos-latest + - os: macos-13 pythonVersion: 311 bitness: 64 platformID: macosx_x86_64 pythonType: "cp" - - os: macos-latest + - os: macos-13 pythonVersion: 312 bitness: 64 platformID: macosx_x86_64 pythonType: "cp" # Apple-Silicon MacOS - - os: macos-latest + - os: macos-13 pythonVersion: 38 bitness: 64 platformID: macosx_arm64 pythonType: "cp" - - os: macos-latest + - os: macos-13 pythonVersion: 39 bitness: 64 platformID: macosx_arm64 pythonType: "cp" - - os: macos-latest + - os: macos-13 pythonVersion: 310 bitness: 64 platformID: macosx_arm64 pythonType: "cp" - - os: macos-latest + - os: macos-13 pythonVersion: 311 bitness: 64 platformID: macosx_arm64 pythonType: "cp" - - os: macos-latest + - os: macos-13 pythonVersion: 312 bitness: 64 platformID: macosx_arm64 pythonType: "cp" # Apple-Silicon MacOS PyPy - # - os: macos-latest + # - os: macos-13 # pythonVersion: 38 # bitness: 64 # platformID: macosx_arm64 # pythonType: "pp" - # - os: macos-latest + # - os: macos-13 # pythonVersion: 39 # bitness: 64 # platformID: macosx_arm64 # pythonType: "pp" - # - os: macos-latest + # - os: macos-13 # pythonVersion: 310 # bitness: 64 # platformID: macosx_arm64 @@ -282,13 +282,13 @@ jobs: run: pip install -r requirements.txt - name: Install XCode - if: matrix.os == 'macos-latest' + if: matrix.os == 'macos-13' uses: maxim-lobanov/setup-xcode@v1.5.1 with: xcode-version: latest # - name: Install Clang - # if: matrix.os == 'macos-latest' + # if: matrix.os == 'macos-13' # uses: KyleMayes/install-llvm-action@v1 # with: # version: "15.0" @@ -296,7 +296,7 @@ jobs: # env: on - name: Install Clang - if: matrix.os == 'macos-latest' + if: matrix.os == 'macos-13' run: | brew install llvm libomp From 9607bae7809f3d9e2d540a32450eaaeff91a24e7 Mon Sep 17 00:00:00 2001 From: Toby Davis Date: Sat, 21 Oct 2023 22:17:49 +0100 Subject: [PATCH 22/26] Does this change anything? --- .github/workflows/wheels.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/wheels.yaml b/.github/workflows/wheels.yaml index d573a04f..1155bf1b 100644 --- a/.github/workflows/wheels.yaml +++ b/.github/workflows/wheels.yaml @@ -180,6 +180,7 @@ jobs: manylinux_image: manylinux2014 pythonType: "pp" + # MacOS x86_64 - os: macos-13 pythonVersion: 37 @@ -310,6 +311,7 @@ jobs: CIBW_MANYLINUX_PYPY_X86_64_IMAGE: ${{ matrix.manylinux_image }} CIBW_MANYLINUX_PYPY_I686_IMAGE: ${{ matrix.manylinux_image }} CIBW_BUILD_VERBOSITY: 1 + MACOSX_DEPLOYMENT_TARGET: 10.15 CMAKE_BUILD_PARALLEL_LEVEL: 1 GITHUB_ACTIONS: ON LIBRAPID_GET_BLAS: OFF From 06463c2afc86f5492a60dd230d5b25f10b0b054a Mon Sep 17 00:00:00 2001 From: Toby Davis Date: Sat, 21 Oct 2023 22:31:32 +0100 Subject: [PATCH 23/26] Integration hell --- .github/workflows/wheels.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/wheels.yaml b/.github/workflows/wheels.yaml index 1155bf1b..249a806b 100644 --- a/.github/workflows/wheels.yaml +++ b/.github/workflows/wheels.yaml @@ -299,6 +299,7 @@ jobs: - name: Install Clang if: matrix.os == 'macos-13' run: | + rm -f '/usr/local/bin/2to3' brew install llvm libomp - name: Build Wheels From 6bdfe694404e4affaf9f74d504adc1c21ecb0c7f Mon Sep 17 00:00:00 2001 From: Toby Davis Date: Sat, 21 Oct 2023 22:49:25 +0100 Subject: [PATCH 24/26] This should not be this hard --- .github/workflows/wheels.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/wheels.yaml b/.github/workflows/wheels.yaml index 249a806b..e63174fb 100644 --- a/.github/workflows/wheels.yaml +++ b/.github/workflows/wheels.yaml @@ -300,6 +300,7 @@ jobs: if: matrix.os == 'macos-13' run: | rm -f '/usr/local/bin/2to3' + rm -f '/usr/local/bin/2to3-*' brew install llvm libomp - name: Build Wheels From 96308978ecbd1aa02d8e47f41896ff2e54189946 Mon Sep 17 00:00:00 2001 From: Toby Davis Date: Sat, 21 Oct 2023 22:58:18 +0100 Subject: [PATCH 25/26] Maybe it'll do something different this time --- .github/workflows/wheels.yaml | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/.github/workflows/wheels.yaml b/.github/workflows/wheels.yaml index e63174fb..c199138e 100644 --- a/.github/workflows/wheels.yaml +++ b/.github/workflows/wheels.yaml @@ -288,6 +288,7 @@ jobs: with: xcode-version: latest + # This doesn't work for some reason # - name: Install Clang # if: matrix.os == 'macos-13' # uses: KyleMayes/install-llvm-action@v1 @@ -296,12 +297,12 @@ jobs: # directory: "./llvm" # env: on - - name: Install Clang - if: matrix.os == 'macos-13' - run: | - rm -f '/usr/local/bin/2to3' - rm -f '/usr/local/bin/2to3-*' - brew install llvm libomp + # This also doesn't work :( + # - name: Install Clang + # if: matrix.os == 'macos-13' + # run: | + # rm -f '/usr/local/bin/2to3*' + # brew install llvm libomp - name: Build Wheels if: runner.os == 'macOS' @@ -318,8 +319,8 @@ jobs: GITHUB_ACTIONS: ON LIBRAPID_GET_BLAS: OFF LIBRAPID_GET_FFTW: OFF - CC: /usr/local/opt/llvm/bin/clang - CXX: /usr/local/opt/llvm/bin/clang++ + CC: $(brew --prefix llvm)/bin/clang + CXX: $(brew --prefix llvm)/bin/clang++ run: | python -m pip install cibuildwheel From e76a26f285359809494f1a346eae50f7ef66d3a9 Mon Sep 17 00:00:00 2001 From: Toby Davis Date: Sat, 21 Oct 2023 23:29:49 +0100 Subject: [PATCH 26/26] Try a different permutation --- .github/workflows/wheels.yaml | 49 ++++++++++++++++++----------------- 1 file changed, 25 insertions(+), 24 deletions(-) diff --git a/.github/workflows/wheels.yaml b/.github/workflows/wheels.yaml index c199138e..ce0f4e81 100644 --- a/.github/workflows/wheels.yaml +++ b/.github/workflows/wheels.yaml @@ -182,87 +182,87 @@ jobs: # MacOS x86_64 - - os: macos-13 + - os: macos-latest pythonVersion: 37 bitness: 64 platformID: macosx_x86_64 pythonType: "cp" - - os: macos-13 + - os: macos-latest pythonVersion: 38 bitness: 64 platformID: macosx_x86_64 pythonType: "cp" - - os: macos-13 + - os: macos-latest pythonVersion: 39 bitness: 64 platformID: macosx_x86_64 pythonType: "cp" - - os: macos-13 + - os: macos-latest pythonVersion: 310 bitness: 64 platformID: macosx_x86_64 pythonType: "cp" - - os: macos-13 + - os: macos-latest pythonVersion: 311 bitness: 64 platformID: macosx_x86_64 pythonType: "cp" - - os: macos-13 + - os: macos-latest pythonVersion: 312 bitness: 64 platformID: macosx_x86_64 pythonType: "cp" # Apple-Silicon MacOS - - os: macos-13 + - os: macos-latest pythonVersion: 38 bitness: 64 platformID: macosx_arm64 pythonType: "cp" - - os: macos-13 + - os: macos-latest pythonVersion: 39 bitness: 64 platformID: macosx_arm64 pythonType: "cp" - - os: macos-13 + - os: macos-latest pythonVersion: 310 bitness: 64 platformID: macosx_arm64 pythonType: "cp" - - os: macos-13 + - os: macos-latest pythonVersion: 311 bitness: 64 platformID: macosx_arm64 pythonType: "cp" - - os: macos-13 + - os: macos-latest pythonVersion: 312 bitness: 64 platformID: macosx_arm64 pythonType: "cp" # Apple-Silicon MacOS PyPy - # - os: macos-13 + # - os: macos-latest # pythonVersion: 38 # bitness: 64 # platformID: macosx_arm64 # pythonType: "pp" - # - os: macos-13 + # - os: macos-latest # pythonVersion: 39 # bitness: 64 # platformID: macosx_arm64 # pythonType: "pp" - # - os: macos-13 + # - os: macos-latest # pythonVersion: 310 # bitness: 64 # platformID: macosx_arm64 @@ -283,26 +283,25 @@ jobs: run: pip install -r requirements.txt - name: Install XCode - if: matrix.os == 'macos-13' + if: matrix.os == 'macos-latest' uses: maxim-lobanov/setup-xcode@v1.5.1 with: xcode-version: latest # This doesn't work for some reason # - name: Install Clang - # if: matrix.os == 'macos-13' + # if: matrix.os == 'macos-latest' # uses: KyleMayes/install-llvm-action@v1 # with: # version: "15.0" # directory: "./llvm" # env: on - # This also doesn't work :( - # - name: Install Clang - # if: matrix.os == 'macos-13' - # run: | - # rm -f '/usr/local/bin/2to3*' - # brew install llvm libomp + - name: Install Clang + if: matrix.os == 'macos-latest' + run: | + rm -f '/usr/local/bin/2to3*' + brew install llvm libomp - name: Build Wheels if: runner.os == 'macOS' @@ -319,8 +318,10 @@ jobs: GITHUB_ACTIONS: ON LIBRAPID_GET_BLAS: OFF LIBRAPID_GET_FFTW: OFF - CC: $(brew --prefix llvm)/bin/clang - CXX: $(brew --prefix llvm)/bin/clang++ + CC: /usr/local/opt/llvm/bin/clang + CXX: /usr/local/opt/llvm/bin/clang++ + # CC: $(brew --prefix llvm)/bin/clang + # CXX: $(brew --prefix llvm)/bin/clang++ run: | python -m pip install cibuildwheel