1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157
|
name: macOS tests
on:
pull_request:
branches:
- main
- maintenance/**
paths-ignore:
- '**.pyi'
- '**.md'
- '**.rst'
permissions:
contents: read # to fetch code (actions/checkout)
env:
CCACHE_DIR: "${{ github.workspace }}/.ccache"
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
cancel-in-progress: true
jobs:
x86_conda:
name: macOS x86-64 conda
# To enable this workflow on a fork, comment out:
if: github.repository == 'numpy/numpy'
runs-on: macos-15-intel
strategy:
fail-fast: false
matrix:
python-version: ["3.12"]
steps:
- uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0
with:
submodules: recursive
fetch-tags: true
persist-credentials: false
- name: Prepare cache dirs and timestamps
id: prep-ccache
shell: bash -l {0}
run: |
mkdir -p "${CCACHE_DIR}"
echo "dir=$CCACHE_DIR" >> $GITHUB_OUTPUT
NOW=$(date -u +"%F-%T")
echo "timestamp=${NOW}" >> $GITHUB_OUTPUT
echo "today=$(/bin/date -u '+%Y%m%d')" >> $GITHUB_OUTPUT
- name: Setup compiler cache
uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0
id: cache-ccache
with:
path: ${{ steps.prep-ccache.outputs.dir }}
key: ${{ github.workflow }}-${{ matrix.python-version }}-ccache-macos-${{ steps.prep-ccache.outputs.timestamp }}
restore-keys: |
${{ github.workflow }}-${{ matrix.python-version }}-ccache-macos-
- name: Setup Miniforge
uses: conda-incubator/setup-miniconda@835234971496cad1653abb28a638a281cf32541f # v3.2.0
with:
python-version: ${{ matrix.python-version }}
channels: conda-forge
channel-priority: true
activate-environment: numpy-dev
use-only-tar-bz2: false
miniforge-variant: Miniforge3
miniforge-version: latest
use-mamba: true
# Updates if `environment.yml` or the date changes. The latter is needed to
# ensure we re-solve once a day (since we don't lock versions). Could be
# replaced by a conda-lock based approach in the future.
- name: Cache conda environment
uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0
env:
# Increase this value to reset cache if environment.yml has not changed
CACHE_NUMBER: 1
with:
path: ${{ env.CONDA }}/envs/numpy-dev
key:
${{ runner.os }}--${{ steps.prep-ccache.outputs.today }}-conda-${{ env.CACHE_NUMBER }}-${{ hashFiles('environment.yml') }}
id: envcache
- name: Update Conda Environment
run: mamba env update -n numpy-dev -f environment.yml
if: steps.envcache.outputs.cache-hit != 'true'
- name: Build and Install NumPy
shell: bash -l {0}
run: |
conda activate numpy-dev
CC="ccache $CC" spin build -j2 -- -Dallow-noblas=false
- name: Run test suite (full)
shell: bash -l {0}
run: |
conda activate numpy-dev
export OMP_NUM_THREADS=2
spin test -j2 -m full
- name: Ccache statistics
shell: bash -l {0}
run: |
conda activate numpy-dev
ccache -s
accelerate:
name: Accelerate - ${{ matrix.build_runner[1] }} - ${{ matrix.version }}
# To enable this workflow on a fork, comment out:
if: github.repository == 'numpy/numpy'
runs-on: ${{ matrix.build_runner[0] }}
strategy:
fail-fast: false
matrix:
build_runner:
- [ macos-15-intel, "macos_x86_64" ]
- [ macos-14, "macos_arm64" ]
version: ["3.11", "3.14t"]
steps:
- uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0
with:
submodules: recursive
fetch-tags: true
persist-credentials: false
- uses: actions/setup-python@83679a892e2d95755f2dac6acb0bfd1e9ac5d548 # v6.1.0
with:
python-version: ${{ matrix.version }}
- name: Install dependencies
run: |
pip install -r requirements/build_requirements.txt -r requirements/test_requirements.txt
- name: Build against Accelerate (LP64)
run: spin build -- -Ddisable-optimization=true -Dallow-noblas=false
- name: Test (linalg only)
run: spin test -j2 -- numpy/linalg --timeout=600 --durations=10
- name: Build NumPy against Accelerate (ILP64)
run: |
rm -r build build-install
spin build -- -Duse-ilp64=true -Ddisable-optimization=true -Dallow-noblas=false
- name: Test (fast tests)
if: ${{ matrix.version != '3.14t' || matrix.build_runner[0] != 'macos-14' }}
run: spin test -j2 -- --timeout=600 --durations=10
- name: Test in multiple threads
if: ${{ matrix.version == '3.14t' && matrix.build_runner[0] == 'macos-14' }}
run: |
pip install pytest-run-parallel==0.7.0
spin test -p 4 -- --timeout=600 --durations=10
|