Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
8f9de4d
move mkl_umath build system to meson
ndgrigorian Mar 1, 2026
e1ce0ee
add tests to module
ndgrigorian Mar 4, 2026
c1b5c43
exclude process_src_template from linting
ndgrigorian Mar 4, 2026
01af689
add python-build to meta.yamls
ndgrigorian Mar 4, 2026
c90f88f
fix syntax in build shell scripts
ndgrigorian Mar 4, 2026
e734712
update build_pip workflow
ndgrigorian Mar 4, 2026
075b296
update clang workflow
ndgrigorian Mar 5, 2026
2ec1201
fix import error in builds
ndgrigorian Mar 5, 2026
0ae4685
update Windows build scripts
ndgrigorian Mar 5, 2026
c4a4038
fix linting
ndgrigorian Mar 5, 2026
ab07fd1
fix flags on windows builds
ndgrigorian Mar 5, 2026
903cf97
add wheel to conda-forge meta.yaml
ndgrigorian Mar 5, 2026
8b58419
fix typo in bld.bat
ndgrigorian Mar 5, 2026
d745054
add pip to meta.yamls
ndgrigorian Mar 5, 2026
64c1881
ignore git blame of previous commit fixing linting
ndgrigorian Mar 5, 2026
d10f0d0
fix race condition in meson build
ndgrigorian Mar 6, 2026
2bd6b7a
require MKL in meson build
ndgrigorian Apr 7, 2026
f4d0b02
drop 'cpp' from meson.build
ndgrigorian Apr 7, 2026
cb7f656
add cmake to build system dependencies
ndgrigorian Apr 8, 2026
8e3cd1d
remove jq from pip build
ndgrigorian Apr 9, 2026
9a03cfe
add meson option for setting MKL_THREADING
ndgrigorian Apr 26, 2026
6dc291f
simplify mkl_umath conda-forge build scripts
ndgrigorian May 29, 2026
f7e5989
Merge branch 'main' into build-with-meson
ndgrigorian Jul 8, 2026
ff65831
add CLI sources to meson.build
ndgrigorian Jul 9, 2026
1166ac3
Use link_args for RPATH and improve portability
vlad-perevezentsev Jul 22, 2026
c66efbb
Remove redundant meson dependency
vlad-perevezentsev Jul 22, 2026
2c06350
Apply remarks from mkl-service PR
vlad-perevezentsev Jul 22, 2026
7e4cbb6
Update AGENT.md and copilot files
vlad-perevezentsev Jul 22, 2026
c8f87b4
Update README
vlad-perevezentsev Jul 22, 2026
d56a482
fix RPATH and remove duplicate vectorization flags
vlad-perevezentsev Jul 22, 2026
97273ce
Merge remote-tracking branch 'origin/main' into build-with-meson
vlad-perevezentsev Jul 22, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion .flake8
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,9 @@ per-file-ignores =
mkl_umath/ufunc_docstrings_numpy1.py: E501
mkl_umath/ufunc_docstrings_numpy2.py: E501

exclude = _vendored/conv_template.py
exclude =
_vendored/conv_template.py
_vendored/process_src_template.py

filename = *.py, *.pyx, *.pxi, *.pxd
max_line_length = 80
Expand Down
3 changes: 3 additions & 0 deletions .git-blame-ignore-revs
Original file line number Diff line number Diff line change
Expand Up @@ -8,3 +8,6 @@

# Move to clang-format-22
85e977ffa438851fda6f9d2314810bca278998b1

# fix linting in conda-package-cf
2d492495f37b5c3a7f7f1c9fe12bf9025aeb22e7
33 changes: 12 additions & 21 deletions .github/AGENTS.md
Original file line number Diff line number Diff line change
@@ -1,25 +1,16 @@
# AGENTS.md — .github/

CI/CD workflows, automation, security scanning, and package distribution.
CI/CD workflows and repo automation.

## Workflows
- **conda-package.yml** — main build/test pipeline (Linux/Windows, Python 3.10-3.14)
- **build_pip.yaml** — PyPI wheel builds for Intel channel
- **build-with-clang.yml** — Clang compatibility validation
- **openssf-scorecard.yml** — security posture scanning
## Workflows (source of truth)
- `conda-package.yml` — Intel channel conda build/test pipeline
- `conda-package-cf.yml` — conda-forge-oriented build/test pipeline
- `build-with-clang.yml` — Intel clang compatibility checks
- `build-with-standard-clang.yml` — standard clang compatibility checks
- `build_pip.yml` — pip build pipeline with pre-release NumPy
- `pre-commit.yml` — lint/format checks
- `openssf-scorecard.yml` — security scanning

## CI/CD policy
- Keep build matrix (Python versions, platforms) in workflow files only
- Required checks: conda build + test on all supported Python versions
- Artifact naming: `$PACKAGE_NAME $OS Python $VERSION`
- Conda channel: `https://software.repos.intel.com/python/conda`

## Security
- OpenSSF Scorecard runs automatically
- CODEOWNERS enforces review policy
- Dependabot monitors dependencies (`.github/dependabot.yml`)

## Notes
- Workflow/job renames are breaking for downstream tooling
- Cache key includes `meta.yaml` hash for conda packages
- Artifacts uploaded per-Python-version for parallel testing
## Policy
- Treat workflow YAML as canonical for platform/Python matrices.
- Avoid doc claims about CI coverage unless present in workflow config.
6 changes: 3 additions & 3 deletions .github/copilot-instructions.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,10 +32,10 @@ Higher-precedence rules override lower-precedence context.
- Never include secrets or credentials in code/docs.

## Source-of-truth files
- Build: `CMakeLists.txt`, `pyproject.toml`, `setup.py`
- Dependencies/packaging: `conda-recipe*/meta.yaml`
- Build/config: `pyproject.toml`, `meson.build`
- Dependencies/packaging: `pyproject.toml`, `conda-recipe*/meta.yaml`
- CI: `.github/workflows/*.{yml,yaml}`
- API: `mkl_umath/__init__.py`, `mkl_umath/src/_patch.pyx`
- API: `mkl_umath/__init__.py`, `mkl_umath/src/_patch_numpy.pyx`
- Core implementation: `mkl_umath/src/*.{c,c.src,pyx}`
- Tests: `mkl_umath/tests/`

Expand Down
7 changes: 3 additions & 4 deletions .github/workflows/build-with-clang.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,13 @@ on:
permissions: read-all

jobs:
build-with-clang:
build-with-intel-clang:
runs-on: ubuntu-latest

strategy:
matrix:
python: ["3.10", "3.11", "3.12", "3.13", "3.14"]
numpy_version: ["numpy'>=2'"]
numpy_version: ["'numpy>=2'"]

env:
ONEAPI_ROOT: /opt/intel/oneapi
Expand Down Expand Up @@ -55,7 +55,7 @@ jobs:

- name: Install mkl_umath dependencies
run: |
pip install scikit-build cmake ninja cython setuptools">=77"
pip install meson-python ninja cython cmake
pip install ${{ matrix.numpy_version }}

- name: List oneAPI folder content
Expand All @@ -66,7 +66,6 @@ jobs:
source ${{ env.ONEAPI_ROOT }}/setvars.sh
echo "$CMPLR_ROOT"
export CC="$CMPLR_ROOT/bin/icx"
export CFLAGS="${CFLAGS} -fno-fast-math -O2"
pip install . --no-build-isolation --no-deps --verbose

- name: Run mkl_umath tests
Expand Down
63 changes: 63 additions & 0 deletions .github/workflows/build-with-standard-clang.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
name: Build project with standard clang compiler

on:
pull_request:
push:
branches: [master]

permissions: read-all

jobs:
build-with-standard-clang:
runs-on: ubuntu-latest

strategy:
matrix:
python: ["3.10", "3.11", "3.12", "3.13", "3.14"]
numpy_version: ["'numpy>=2'"]

env:
COMPILER_ROOT: /usr/bin

defaults:
run:
shell: bash -el {0}

steps:
- name: Cancel Previous Runs
uses: styfle/cancel-workflow-action@3155a141048f8f89c06b4cdae32e7853e97536bc # 0.13.0
with:
access_token: ${{ github.token }}

- name: Install Dependencies
run: |
sudo apt-get update && sudo apt-get install -y clang

- name: Setup Python
uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
with:
python-version: ${{ matrix.python }}
architecture: x64

- name: Checkout repo
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
fetch-depth: 0

- name: Install mkl_umath dependencies
run: |
pip install meson-python ninja cmake cython mkl-devel
pip install ${{ matrix.numpy_version }}

- name: Build mkl_umath
run: |
export CC=${{ env.COMPILER_ROOT }}/clang
pip install . --no-build-isolation --no-deps --verbose

- name: Run mkl_umath tests
run: |
pip install pytest
# mkl_umath cannot be installed in editable mode, we need
# to change directory before importing it and running tests
cd ..
python -m pytest -sv --pyargs mkl_umath
13 changes: 3 additions & 10 deletions .github/workflows/build_pip.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -21,11 +21,6 @@ jobs:
use_pre: ["", "--pre"]

steps:
- name: Install jq
shell: bash -l {0}
run: |
sudo apt-get install jq

- name: Checkout repo
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
Expand All @@ -46,16 +41,14 @@ jobs:
python -c "import sys; print(sys.executable)"
which python

- name: Build conda package
- name: Build with pip
run: |
pip install --no-cache-dir scikit-build cmake ninja cython
pip install --no-cache-dir meson-python ninja cmake cython
pip install --no-cache-dir numpy ${{ matrix.use_pre }}
echo "CONDA_PREFFIX is '${CONDA_PREFIX}'"
export MKLROOT=${CONDA_PREFIX}
CC=icx pip install . --no-build-isolation --no-deps --verbose
pip install --no-cache-dir pytest
pip list
# mkl_umath cannot be installed in editable mode, we need
# to change directory before importing it and running tests
cd ..
python -m pytest -v --pyargs mkl_umath
python -m pytest -sv --pyargs mkl_umath
2 changes: 1 addition & 1 deletion .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,7 @@ repos:
"-rn", # Only display messages
"-sn", # Don't display the score
"--errors-only",
"--disable=import-error",
"--disable=import-error,no-name-in-module",
]

- repo: https://github.com/jumanjihouse/pre-commit-hooks
Expand Down
38 changes: 23 additions & 15 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,30 +15,39 @@ It provides:
- **Core C implementation:** `mkl_umath/src/` (ufuncsmodule.c, mkl_umath_loops.c.src)
- **Cython patch layer:** `mkl_umath/src/_patch_numpy.pyx`
- **Code generation:** `generate_umath.py`, `generate_umath_doc.py`
- **Build system:** CMake (CMakeLists.txt) + scikit-build
- **Build system:** meson-python + Cython

## Build dependencies
**Required:**
- Compiler toolchain: Intel `icx` or `clang` (with Intel-only flags gated when using clang)
- Intel® OneMKL (mkl-devel)
- NumPy, Cython, scikit-build, cmake, ninja
- Intel® oneMKL (`mkl-devel`)
- meson-python, CMake, Ninja, Cython, NumPy

**Conda environment:**
**Build against an existing `mkl` installation:**

Install the build dependencies via Conda:
```bash
conda install -c https://software.repos.intel.com/python/conda \
mkl-devel dpcpp_linux-64 numpy-base \
cmake ninja cython scikit-build
export MKLROOT=$CONDA_PREFIX
CC=${CC:-icx} pip install --no-build-isolation --no-deps . # clang is also supported in CI
mkl-devel dpcpp_linux-64 cython meson-python cmake ninja numpy
```
or via pip:
```bash
pip install mkl-devel cython meson-python cmake ninja numpy
```
then build:
```bash
CC=icx pip install --no-deps --no-build-isolation . # clang is also supported in CI
```

## CI/CD
- **Platforms:** Linux, Windows
- **Python versions:** 3.10, 3.11, 3.12, 3.13, 3.14
- **Workflows:** `.github/workflows/`
- `conda-package.yml` — main build/test pipeline
- `build_pip.yaml` — PyPI wheel builds
- `build-with-clang.yml` — Clang compatibility check
- `conda-package.yml` — main conda build/test pipeline
- `conda-package-cf.yml` — conda-forge-oriented build/test pipeline
- `build_pip.yml` — validates pip build with pre-release NumPy
- `build-with-clang.yml` — Intel clang compatibility check
- `build-with-standard-clang.yml` — standard clang compatibility check
- `openssf-scorecard.yml` — security scorecard

## Distribution
Expand All @@ -58,7 +67,7 @@ mkl_umath.restore_numpy_umath() # Restore original NumPy loops
- **Performance:** Changes should maintain or improve MKL VM utilization
- **Compatibility:** Must work with upstream NumPy APIs (NEP-36 compliance)
- **Testing:** Add tests to `mkl_umath/tests/test_basic.py`
- **Build hygiene:** CMake changes → verify Linux + Windows
- **Build hygiene:** `meson.build` is the source of truth for build config — verify Linux + Windows
- **Docs:** Update docstrings via `ufunc_docstrings_numpy{1,2}.py`

## Code structure
Expand All @@ -74,12 +83,11 @@ mkl_umath.restore_numpy_umath() # Restore original NumPy loops
- **Compiler/toolchain:** `icx` and `clang` are both supported; when using clang, keep Intel-only flags behind compiler guards.
- **Build validation:**
- After setup: `which ${CC:-icx}` → should resolve to the intended compiler toolchain
- Verify: `echo $MKLROOT` → should be set
- Check: `python -c "import numpy; print(numpy.__version__)"` → confirm Intel NumPy
- Check: `python -c "import numpy; print(numpy.__version__)"` → confirm NumPy is available

## Notes
- `_vendored/` contains vendored NumPy code generation utilities
- Version in `mkl_umath/_version.py` (dynamic via setuptools)
- Version in `mkl_umath/_version.py` (read dynamically by `meson.build`)
- Patching is runtime-only; no NumPy source modification

## Directory map
Expand Down
Loading
Loading