Skip to content

Commit f043f8d

Browse files
authored
Merge pull request #116 from SwayamInSync/dot
Feat: Adding Linear Algebra Dot operation support
2 parents 5914811 + 07a16c0 commit f043f8d

25 files changed

+2831
-913
lines changed

.github/workflows/build_wheels.yml

Lines changed: 63 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,11 @@ on:
88
- "quaddtype-v*"
99
paths:
1010
- "quaddtype/**"
11+
- ".github/workflows/**"
1112
pull_request:
1213
paths:
1314
- "quaddtype/**"
15+
- ".github/workflows/**"
1416
workflow_dispatch:
1517

1618
jobs:
@@ -19,12 +21,19 @@ jobs:
1921
runs-on: ubuntu-latest
2022
steps:
2123
- uses: actions/checkout@v3
24+
with:
25+
submodules: recursive
2226

2327
- name: Set up Python
2428
uses: actions/setup-python@v4
2529
with:
2630
python-version: ">=3.10.0"
2731

32+
- name: Verify QuadBLAS submodule
33+
run: |
34+
ls -la quaddtype/numpy_quaddtype/QBLAS/
35+
ls -la quaddtype/numpy_quaddtype/QBLAS/include/quadblas/
36+
2837
- name: Install cibuildwheel
2938
run: pip install cibuildwheel==2.20.0
3039

@@ -34,16 +43,23 @@ jobs:
3443
CIBW_MANYLINUX_X86_64_IMAGE: manylinux_2_28
3544
CIBW_BUILD_VERBOSITY: "3"
3645
CIBW_BEFORE_ALL: |
46+
yum update -y
47+
yum install -y cmake gcc gcc-c++ make git pkgconfig
48+
# Install SLEEF in container
3749
git clone --branch 3.8 https://github.com/shibatch/sleef.git
3850
cd sleef
39-
cmake -S . -B build -DSLEEF_BUILD_QUAD:BOOL=ON -DSLEEF_BUILD_SHARED_LIBS:BOOL=ON -DCMAKE_POSITION_INDEPENDENT_CODE=ON
51+
cmake -S . -B build \
52+
-DSLEEF_BUILD_QUAD:BOOL=ON \
53+
-DSLEEF_BUILD_SHARED_LIBS:BOOL=ON \
54+
-DCMAKE_POSITION_INDEPENDENT_CODE=ON
4055
cmake --build build/ --clean-first -j
4156
cmake --install build --prefix /usr/local
4257
CIBW_ENVIRONMENT: >
43-
CFLAGS="-I/usr/local/include $CFLAGS"
44-
CXXFLAGS="-I/usr/local/include $CXXFLAGS"
45-
LDFLAGS="-L/usr/local/lib64 $LDFLAGS"
46-
LD_LIBRARY_PATH="/usr/local/lib64:$LD_LIBRARY_PATH"
58+
CFLAGS="-I/usr/local/include -I{project}/numpy_quaddtype/QBLAS/include $CFLAGS"
59+
CXXFLAGS="-I/usr/local/include -I{project}/numpy_quaddtype/QBLAS/include -fext-numeric-literals $CXXFLAGS"
60+
LDFLAGS="-L/usr/local/lib64 -L/usr/local/lib -Wl,-rpath,/usr/local/lib64 -Wl,-rpath,/usr/local/lib -fopenmp $LDFLAGS"
61+
LD_LIBRARY_PATH="/usr/local/lib64:/usr/local/lib:$LD_LIBRARY_PATH"
62+
PKG_CONFIG_PATH="/usr/local/lib64/pkgconfig:/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH"
4763
CIBW_REPAIR_WHEEL_COMMAND: |
4864
auditwheel repair -w {dest_dir} --plat manylinux_2_28_x86_64 {wheel}
4965
CIBW_TEST_COMMAND: |
@@ -68,46 +84,59 @@ jobs:
6884

6985
steps:
7086
- uses: actions/checkout@v3
87+
with:
88+
submodules: recursive
7189

7290
- name: Set up Python
7391
uses: actions/setup-python@v4
7492
with:
7593
python-version: "3.10"
7694

95+
- name: Install dependencies
96+
run: |
97+
brew install cmake libomp git
98+
7799
- name: Install SLEEF
78100
env:
79-
MACOSX_DEPLOYMENT_TARGET: "11.0"
101+
MACOSX_DEPLOYMENT_TARGET: ${{ matrix.os == 'macos-13' && '13.0' || '14.0' }}
80102
run: |
81103
git clone --branch 3.8 https://github.com/shibatch/sleef.git
82104
cd sleef
83105
cmake -S . -B build \
84106
-DSLEEF_BUILD_QUAD:BOOL=ON \
85107
-DSLEEF_BUILD_SHARED_LIBS:BOOL=ON \
86108
-DCMAKE_POSITION_INDEPENDENT_CODE=ON \
87-
-DCMAKE_OSX_DEPLOYMENT_TARGET=11.0 \
109+
-DCMAKE_OSX_DEPLOYMENT_TARGET=${{ matrix.os == 'macos-13' && '13.0' || '14.0' }} \
88110
-DCMAKE_INSTALL_RPATH="@loader_path/../lib" \
89111
-DCMAKE_BUILD_WITH_INSTALL_RPATH=ON
90112
cmake --build build/ --clean-first -j
91113
sudo cmake --install build --prefix /usr/local
114+
115+
- name: Verify QuadBLAS submodule
116+
run: |
117+
ls -la quaddtype/numpy_quaddtype/QBLAS/
118+
ls -la quaddtype/numpy_quaddtype/QBLAS/include/quadblas/
119+
92120
- name: Install cibuildwheel
93121
run: pip install cibuildwheel==2.20.0
94122

95123
- name: Build wheels
96124
env:
97125
CIBW_BUILD: "cp310-* cp311-* cp312-*"
98126
CIBW_ARCHS_MACOS: ${{ matrix.os == 'macos-13' && 'x86_64' || 'arm64' }}
99-
CIBW_BUILD_VERBOSITY: "1"
127+
CIBW_BUILD_VERBOSITY: "3"
100128
CIBW_ENVIRONMENT: >
101-
MACOSX_DEPLOYMENT_TARGET="11.0"
129+
MACOSX_DEPLOYMENT_TARGET="${{ matrix.os == 'macos-13' && '13.0' || '14.0' }}"
102130
DYLD_LIBRARY_PATH="/usr/local/lib:$DYLD_LIBRARY_PATH"
103-
CFLAGS="-I/usr/local/include $CFLAGS"
104-
CXXFLAGS="-I/usr/local/include $CXXFLAGS"
131+
CFLAGS="-I/usr/local/include -I{project}/numpy_quaddtype/QBLAS/include $CFLAGS"
132+
CXXFLAGS="-I/usr/local/include -I{project}/numpy_quaddtype/QBLAS/include $CXXFLAGS"
105133
LDFLAGS="-L/usr/local/lib $LDFLAGS"
134+
PKG_CONFIG_PATH="/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH"
106135
CIBW_REPAIR_WHEEL_COMMAND: >
107136
delocate-wheel --require-archs {delocate_archs} -w {dest_dir} -v {wheel}
108137
CIBW_TEST_COMMAND: |
109138
pip install {package}[test]
110-
pytest {project}/tests
139+
pytest -s {project}/tests
111140
CIBW_TEST_EXTRAS: "test"
112141
run: |
113142
python -m cibuildwheel --output-dir wheelhouse
@@ -118,6 +147,7 @@ jobs:
118147
path: ./quaddtype/wheelhouse/*.whl
119148
name: wheels-${{ matrix.os }}
120149

150+
# disabling QBLAS optimization for windows due to incompatibility with MSVC
121151
build_wheels_windows:
122152
name: Build wheels on Windows
123153
runs-on: windows-latest
@@ -127,6 +157,8 @@ jobs:
127157

128158
steps:
129159
- uses: actions/checkout@v3
160+
with:
161+
submodules: recursive
130162

131163
- name: Setup MSVC
132164
uses: ilammy/msvc-dev-cmd@v1
@@ -142,6 +174,12 @@ jobs:
142174
- name: Install CMake
143175
uses: lukka/get-cmake@latest
144176

177+
- name: Verify QuadBLAS submodule
178+
shell: pwsh
179+
run: |
180+
Get-ChildItem quaddtype/numpy_quaddtype/QBLAS/
181+
Get-ChildItem quaddtype/numpy_quaddtype/QBLAS/include/quadblas/
182+
145183
- name: Clone and Build SLEEF
146184
shell: pwsh
147185
run: |
@@ -151,16 +189,6 @@ jobs:
151189
cmake --build build --config Release
152190
cmake --install build --prefix "C:/sleef" --config Release
153191
154-
- name: Setup build environment
155-
shell: pwsh
156-
run: |
157-
$env:INCLUDE += ";C:\sleef\include"
158-
$env:LIB += ";C:\sleef\lib"
159-
$env:PATH = "C:\sleef\bin;$env:PATH"
160-
echo "INCLUDE=$env:INCLUDE" >> $env:GITHUB_ENV
161-
echo "LIB=$env:LIB" >> $env:GITHUB_ENV
162-
echo "PATH=$env:PATH" >> $env:GITHUB_ENV
163-
164192
- name: Install build dependencies
165193
shell: bash -l {0}
166194
run: |
@@ -177,10 +205,17 @@ jobs:
177205
MSSdk: "1"
178206
CIBW_BEFORE_BUILD: |
179207
pip install meson meson-python ninja numpy
208+
CIBW_ENVIRONMENT: >
209+
INCLUDE="C:/sleef/include;{project}/numpy_quaddtype/QBLAS/include;$INCLUDE"
210+
LIB="C:/sleef/lib;$LIB"
211+
PATH="C:/sleef/bin;$PATH"
212+
CFLAGS="/IC:/sleef/include /I{project}/numpy_quaddtype/QBLAS/include /DDISABLE_QUADBLAS $CFLAGS"
213+
CXXFLAGS="/IC:/sleef/include /I{project}/numpy_quaddtype/QBLAS/include /DDISABLE_QUADBLAS $CXXFLAGS"
214+
LDFLAGS="C:/sleef/lib/sleef.lib C:/sleef/lib/sleefquad.lib $LDFLAGS"
180215
CIBW_REPAIR_WHEEL_COMMAND: 'delvewheel repair -w {dest_dir} {wheel} --add-path C:\sleef\bin'
181216
CIBW_TEST_COMMAND: |
182217
pip install {package}[test]
183-
python -m pytest -v {project}/test
218+
pytest -s {project}/tests
184219
CIBW_TEST_EXTRAS: test
185220
CIBW_TEST_FAIL_FAST: 1
186221
shell: pwsh
@@ -199,56 +234,21 @@ jobs:
199234
needs: [build_wheels_linux, build_wheels_macos, build_wheels_windows]
200235
runs-on: ubuntu-latest
201236
if: startsWith(github.ref, 'refs/tags/quaddtype-v')
202-
237+
203238
environment:
204239
name: quadtype_release
205240
url: https://pypi.org/p/numpy-quaddtype
206-
241+
207242
permissions:
208-
id-token: write # IMPORTANT: mandatory for trusted publishing
209-
243+
id-token: write # IMPORTANT: mandatory for trusted publishing
244+
210245
steps:
211246
- name: Download all workflow run artifacts
212247
uses: actions/download-artifact@v4
213248
with:
214249
path: dist
215-
250+
216251
- name: Publish to PyPI
217252
uses: pypa/gh-action-pypi-publish@release/v1
218253
with:
219254
packages-dir: dist/*
220-
221-
# With the current setup, we are not creating a release on GitHub.
222-
# create_release:
223-
# name: Create Release
224-
# needs: [build_wheels_linux, build_wheels_macos, build_wheels_windows]
225-
# runs-on: ubuntu-latest
226-
# if: startsWith(github.ref, 'refs/tags/quaddtype-v')
227-
228-
# steps:
229-
# - name: Checkout code
230-
# uses: actions/checkout@v2
231-
232-
# - name: Download all workflow run artifacts
233-
# uses: actions/download-artifact@v4
234-
# with:
235-
# path: artifacts
236-
237-
# - name: Create Release
238-
# id: create_release
239-
# uses: actions/create-release@v1
240-
# env:
241-
# GITHUB_TOKEN: ${{ secrets.QUADDTYPE_GITHUB_TOKEN }}
242-
# with:
243-
# tag_name: ${{ github.ref }}
244-
# release_name: Release ${{ github.ref }}
245-
# draft: false
246-
# prerelease: false
247-
248-
# - name: Upload Release Assets
249-
# uses: softprops/action-gh-release@v1
250-
# if: startsWith(github.ref, 'refs/tags/')
251-
# with:
252-
# files: ./artifacts/**/*.whl
253-
# env:
254-
# GITHUB_TOKEN: ${{ secrets.QUADDTYPE_GITHUB_TOKEN }}

.github/workflows/ci.yml

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,17 +59,37 @@ jobs:
5959
run: |
6060
sudo apt-get update
6161
sudo apt-get install -y libmpfr-dev libssl-dev libfftw3-dev
62+
6263
- name: Install SLEEF
6364
run: |
65+
sudo apt-get update -y
66+
sudo apt-get install -y cmake gcc g++ make git pkg-config
6467
git clone --branch 3.8 https://github.com/shibatch/sleef.git
6568
cd sleef
6669
cmake -S . -B build -DSLEEF_BUILD_QUAD:BOOL=ON -DSLEEF_BUILD_SHARED_LIBS:BOOL=ON -DCMAKE_POSITION_INDEPENDENT_CODE=ON
6770
cmake --build build/ --clean-first -j
68-
sudo cmake --install build --prefix /usr
71+
sudo cmake --install build --prefix /usr/local
72+
6973
- name: Install quaddtype
7074
working-directory: quaddtype
7175
run: |
72-
LDFLAGS="-Wl,-rpath,/usr/lib" python -m pip install . -v --no-build-isolation -Cbuilddir=build -C'compile-args=-v' -Csetup-args="-Dbuildtype=debug"
76+
# Initialize submodules first
77+
git submodule update --init --recursive
78+
ls -la numpy_quaddtype/QBLAS/
79+
80+
# Set environment variables with proper export and correct paths
81+
export CFLAGS="-I/usr/local/include -I$(pwd)/numpy_quaddtype/QBLAS/include"
82+
export CXXFLAGS="-I/usr/local/include -I$(pwd)/numpy_quaddtype/QBLAS/include -fext-numeric-literals"
83+
export LDFLAGS="-L/usr/local/lib64 -L/usr/local/lib -Wl,-rpath,/usr/local/lib64 -Wl,-rpath,/usr/local/lib -fopenmp"
84+
export LD_LIBRARY_PATH="/usr/local/lib64:/usr/local/lib:$LD_LIBRARY_PATH"
85+
86+
# Install with meson args to ensure the C++ flags are passed through
87+
python -m pip install . -v --no-build-isolation \
88+
-Cbuilddir=build \
89+
-C'compile-args=-v' \
90+
-Csetup-args="-Dbuildtype=debug" \
91+
-Csetup-args="-Dcpp_args=-fext-numeric-literals"
92+
7393
- name: Run quaddtype tests
7494
working-directory: quaddtype
7595
run: |

.gitmodules

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
[submodule "quaddtype/numpy_quaddtype/QBLAS"]
2+
path = quaddtype/numpy_quaddtype/QBLAS
3+
url = https://github.com/SwayamInSync/QBLAS

0 commit comments

Comments
 (0)