From 2cc3de1ef6e42af23d0470e09265a35157ba6bc8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Est=C3=A8ve?= Date: Thu, 1 Oct 2026 07:35:46 +0200 Subject: [PATCH 01/84] Debug Windows access violation --- .github/workflows/test.yml | 26 +++++ .../capture_windows_blas_crash.py | 100 ++++++++++++++++++ 2 files changed, 126 insertions(+) create mode 100644 continuous_integration/capture_windows_blas_crash.py diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 104e18a5..7c2698a1 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -300,10 +300,36 @@ jobs: run: | ./continuous_integration/install.sh + - name: Install ProcDump for Windows OpenBLAS diagnostic + if: matrix.os == 'windows-latest' && matrix.name == 'pylatest_conda_forge_openblas' + shell: pwsh + run: | + $toolDir = Join-Path $env:RUNNER_TEMP 'procdump' + $archive = Join-Path $env:RUNNER_TEMP 'procdump.zip' + Invoke-WebRequest https://download.sysinternals.com/files/Procdump.zip -OutFile $archive + Expand-Archive -LiteralPath $archive -DestinationPath $toolDir + "PROCDUMP_PATH=$(Join-Path $toolDir 'procdump64.exe')" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append + + - name: Capture Windows OpenBLAS diagnostic crashes + if: matrix.os == 'windows-latest' && matrix.name == 'pylatest_conda_forge_openblas' + run: | + source "$CONDA/etc/profile.d/conda.sh" + conda activate testenv + PYTHONPATH=. python -X faulthandler continuous_integration/capture_windows_blas_crash.py + - name: Test library run: | ./continuous_integration/run_tests.sh + - name: Upload Windows OpenBLAS crash diagnostics + if: always() && matrix.os == 'windows-latest' && matrix.name == 'pylatest_conda_forge_openblas' + uses: actions/upload-artifact@v4 + with: + name: windows-openblas-crash-${{ github.run_id }}-${{ github.run_attempt }} + path: crash_diagnostics/ + if-no-files-found: ignore + retention-days: 14 + - name: Upload test results uses: actions/upload-artifact@v4 with: diff --git a/continuous_integration/capture_windows_blas_crash.py b/continuous_integration/capture_windows_blas_crash.py new file mode 100644 index 00000000..451f91b8 --- /dev/null +++ b/continuous_integration/capture_windows_blas_crash.py @@ -0,0 +1,100 @@ +"""Run the empirical BLAS diagnostic under ProcDump on Windows CI.""" + +import json +import os +from pathlib import Path +import shutil +import subprocess +import sys + +import numpy as np + +from threadpoolctl import threadpool_info + + +def main(): + output_dir = Path("crash_diagnostics").resolve() + output_dir.mkdir(exist_ok=True) + completed = output_dir / "completed.txt" + completed.unlink(missing_ok=True) + + # Record exact builds and runtime library paths for local dump analysis. + libraries = threadpool_info() + packages = [ + json.loads(path.read_text(encoding="utf-8")) + for path in sorted((Path(sys.prefix) / "conda-meta").glob("*.json")) + ] + (output_dir / "environment.json").write_text( + json.dumps( + { + "python": sys.version, + "executable": sys.executable, + "numpy": np.__version__, + "libraries": libraries, + "conda_packages": packages, + }, + indent=2, + ), + encoding="utf-8", + ) + (output_dir / "conda-explicit.txt").write_text( + "@EXPLICIT\n" + "".join(f"{package['url']}\n" for package in packages), + encoding="utf-8", + ) + + # ProcDump's exit status is not the Python child's status. Write a marker + # only after the diagnostic returns normally, so a crash still fails CI. + child_code = ( + "import runpy; " + "runpy.run_path('tests/empirical_scope_observation.py', " + "run_name='__main__'); " + f"open({str(completed)!r}, 'w').write('completed')" + ) + command = [ + os.environ["PROCDUMP_PATH"], + "-accepteula", + "-ma", + "-e", + "1", + "-f", + "C0000005", + "-n", + "1", + "-x", + str(output_dir), + sys.executable, + "-u", + "-X", + "faulthandler", + "-c", + child_code, + "blas", + ] + # Capture first-chance access violations before faulthandler can terminate + # the process. Stream debugger and Python output to CI and the artifact. + with (output_dir / "procdump.log").open("w", encoding="utf-8") as log: + with subprocess.Popen( + command, + stdout=subprocess.PIPE, + stderr=subprocess.STDOUT, + text=True, + errors="replace", + ) as process: + for line in process.stdout: + print(line, end="", flush=True) + log.write(line) + log.flush() + returncode = process.wait() + + dumps = list(output_dir.glob("*.dmp")) + if dumps: + # Keep the exact BLAS DLL, rather than relying on a later conda solve. + for library in libraries: + if library["internal_api"] == "openblas": + shutil.copy2(library["filepath"], output_dir) + if returncode != 0 or not completed.exists() or dumps: + raise SystemExit("BLAS diagnostic failed; see crash_diagnostics artifact") + + +if __name__ == "__main__": + main() From bc8ba7246a191eb6a983e1b45d58d5552702d5f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Est=C3=A8ve?= Date: Thu, 1 Oct 2026 07:52:30 +0200 Subject: [PATCH 02/84] Trigger CI 1 From baf959b12a5a24f43133626c25ed29dcb737a642 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Est=C3=A8ve?= Date: Thu, 1 Oct 2026 07:52:32 +0200 Subject: [PATCH 03/84] Trigger CI 2 From a9b03007d4760dc40f85c8f0d9be2b7e93a211db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Est=C3=A8ve?= Date: Thu, 1 Oct 2026 07:52:34 +0200 Subject: [PATCH 04/84] Trigger CI 3 From bd556d38b57f4d9f70c0d9b24aafc06712817b98 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Est=C3=A8ve?= Date: Thu, 1 Oct 2026 07:52:47 +0200 Subject: [PATCH 05/84] Trigger CI 1 From d361c81f0f546d6655dfce86841186fffaecbe22 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Est=C3=A8ve?= Date: Thu, 1 Oct 2026 07:57:49 +0200 Subject: [PATCH 06/84] Trigger CI 2 From 1a563de4bb714dd45aafafcafe4bc864f6654767 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Est=C3=A8ve?= Date: Thu, 1 Oct 2026 08:02:51 +0200 Subject: [PATCH 07/84] Trigger CI 3 From 0f6b706a871929ec7bf54c672a460adfd3432b94 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Est=C3=A8ve?= Date: Thu, 1 Oct 2026 08:07:53 +0200 Subject: [PATCH 08/84] Trigger CI 4 From fd64cf43a2ac7a6dfba8818795d0d2a81d081c65 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Est=C3=A8ve?= Date: Thu, 1 Oct 2026 08:12:55 +0200 Subject: [PATCH 09/84] Trigger CI 5 From b168dcfc05d8e933007c09af8605a773cd0e6034 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Est=C3=A8ve?= Date: Thu, 1 Oct 2026 08:17:57 +0200 Subject: [PATCH 10/84] Trigger CI 6 From 91a8d64f0deccd42ac83b65550ff06cb61ff7f33 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Est=C3=A8ve?= Date: Thu, 1 Oct 2026 08:22:59 +0200 Subject: [PATCH 11/84] Trigger CI 7 From bd68c79279f652ea0ba652699a95cd3bb07a9396 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Est=C3=A8ve?= Date: Thu, 1 Oct 2026 08:28:01 +0200 Subject: [PATCH 12/84] Trigger CI 8 From 3ea36a434dc28e2c5bce3de9cb1cfdf839132051 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Est=C3=A8ve?= Date: Thu, 1 Oct 2026 08:33:02 +0200 Subject: [PATCH 13/84] Trigger CI 9 From 93c4eddcc73df2af79d508a6083c3eeac8650379 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Est=C3=A8ve?= Date: Thu, 1 Oct 2026 08:38:04 +0200 Subject: [PATCH 14/84] Trigger CI 10 From c68030ef2361573edd1d85dbcace6b78b74859d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Est=C3=A8ve?= Date: Thu, 1 Oct 2026 16:49:41 +0200 Subject: [PATCH 15/84] Add more debug info --- .github/workflows/test.yml | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 7c2698a1..e5012e75 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -300,6 +300,24 @@ jobs: run: | ./continuous_integration/install.sh + - name: Record Windows CPU information + if: runner.os == 'Windows' + shell: pwsh + run: | + New-Item -ItemType Directory -Force crash_diagnostics | Out-Null + + Get-CimInstance Win32_Processor | + Select-Object Name, Manufacturer, NumberOfCores, + NumberOfLogicalProcessors, ProcessorId | + ConvertTo-Json -Depth 3 | + Tee-Object -FilePath crash_diagnostics/cpu.json + + Get-CimInstance Win32_ComputerSystem | + Select-Object Manufacturer, Model, TotalPhysicalMemory, + NumberOfLogicalProcessors | + ConvertTo-Json -Depth 3 | + Tee-Object -FilePath crash_diagnostics/system.json + - name: Install ProcDump for Windows OpenBLAS diagnostic if: matrix.os == 'windows-latest' && matrix.name == 'pylatest_conda_forge_openblas' shell: pwsh @@ -312,6 +330,8 @@ jobs: - name: Capture Windows OpenBLAS diagnostic crashes if: matrix.os == 'windows-latest' && matrix.name == 'pylatest_conda_forge_openblas' + env: + OPENBLAS_VERBOSE: "2" run: | source "$CONDA/etc/profile.d/conda.sh" conda activate testenv From 374b66236227afbd02432d10a3985b8be2e578cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Est=C3=A8ve?= Date: Thu, 1 Oct 2026 16:49:45 +0200 Subject: [PATCH 16/84] Trigger CI 1 From cc75d2f63668f5caadafd894d81610be06284773 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Est=C3=A8ve?= Date: Thu, 1 Oct 2026 16:53:50 +0200 Subject: [PATCH 17/84] Only keep problematic Windows workflow --- .github/workflows/test.yml | 265 +------------------------------------ 1 file changed, 1 insertion(+), 264 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index e5012e75..f1502240 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -21,249 +21,19 @@ concurrency: jobs: - linting: - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v3 - - name: Set up Python - uses: actions/setup-python@v4 - with: - python-version: "3.14" - - name: Install black - run: | - pip install black==26.5.1 - - name: Run black - run: | - black --check --diff . - testing: - needs: linting timeout-minutes: 30 strategy: fail-fast: false matrix: include: - - # Windows env with numpy, scipy,MKL installed through conda-forge - - name: pylatest_conda_forge_mkl - os: windows-latest - PYTHON_VERSION: "*" - PACKAGER: "conda-forge" - BLAS: "mkl" - INSTALL_OPENCV: "true" - # Windows env with numpy, scipy, OpenBLAS installed through conda-forge + # Reproduce the intermittent Windows OpenBLAS access violation. - name: pylatest_conda_forge_openblas os: windows-latest PYTHON_VERSION: "*" PACKAGER: "conda-forge" BLAS: "openblas" INSTALL_OPENCV: "true" - # Windows env with numpy, scipy installed through conda default channel - - name: py311_conda - os: windows-latest - PYTHON_VERSION: "3.11" - PACKAGER: "conda" - INSTALL_OPENCV: "true" - # Windows env with numpy, scipy installed through pip - - name: py310_pip - os: windows-latest - PYTHON_VERSION: "3.10" - PACKAGER: "pip" - INSTALL_OPENCV: "true" - - # MacOS env with OpenMP installed through homebrew - - name: py310_conda_homebrew_libomp - os: macos-latest - PYTHON_VERSION: "3.10" - PACKAGER: "conda" - BLAS: "openblas" - CC_OUTER_LOOP: "clang" - CC_INNER_LOOP: "clang" - INSTALL_LIBOMP: "homebrew" - INSTALL_OPENCV: "true" - - # MacOS env with OpenBLAS and OpenMP installed through conda-forge compilers - - name: pylatest_conda_forge_clang_openblas - os: macos-latest - PYTHON_VERSION: "*" - PACKAGER: "conda-forge" - BLAS: "openblas" - INSTALL_LIBOMP: "conda-forge" - INSTALL_OPENCV: "true" - - # MacOS env with FlexiBLAS - - name: pylatest_flexiblas - os: macos-latest - PYTHON_VERSION: "*" - INSTALL_BLAS: "flexiblas" - PLATFORM_SPECIFIC_PACKAGES: "llvm-openmp" - - # Linux environments to test that packages that comes with Ubuntu 22.04 - # are correctly handled. - - name: py310_ubuntu_atlas_gcc_gcc - os: ubuntu-22.04 - PYTHON_VERSION: "3.10" - PACKAGER: "ubuntu" - APT_BLAS: "libatlas3-base libatlas-base-dev" - CC_OUTER_LOOP: "gcc" - CC_INNER_LOOP: "gcc" - - name: py310_ubuntu_openblas_gcc_gcc - os: ubuntu-22.04 - PYTHON_VERSION: "3.10" - PACKAGER: "ubuntu" - APT_BLAS: "libopenblas-base libopenblas-dev" - CC_OUTER_LOOP: "gcc" - CC_INNER_LOOP: "gcc" - - # Linux environment with development versions of numpy and scipy - - name: pylatest_pip_dev - os : ubuntu-latest - PACKAGER: "pip-dev" - PYTHON_VERSION: "*" - CC_OUTER_LOOP: "gcc" - CC_INNER_LOOP: "gcc" - INSTALL_OPENCV: "true" - - # Linux + Python 3.10 and homogeneous runtime nesting. - - name: py310_conda_openblas_clang_clang - os: ubuntu-latest - PACKAGER: "conda" - PYTHON_VERSION: "3.10" - BLAS: "openblas" - CC_OUTER_LOOP: "clang-18" - CC_INNER_LOOP: "clang-18" - INSTALL_OPENCV: "true" - - # Linux environment with MKL and Clang (known to be unsafe for - # threadpoolctl) to only test the warning from multiple OpenMP. - - name: pylatest_conda_mkl_clang_gcc - os: ubuntu-latest - PYTHON_VERSION: "*" - PACKAGER: "conda" - BLAS: "mkl" - CC_OUTER_LOOP: "clang-18" - CC_INNER_LOOP: "gcc" - TESTS: "libomp_libiomp_warning" - # Linux environment with MKL, safe for threadpoolctl. - - name: pylatest_conda_mkl_gcc_gcc - os: ubuntu-latest - PYTHON_VERSION: "*" - PACKAGER: "conda" - BLAS: "mkl" - CC_OUTER_LOOP: "gcc" - CC_INNER_LOOP: "gcc" - MKL_THREADING_LAYER: "INTEL" - INSTALL_OPENCV: "true" - - # Linux + Python 3.11 with numpy / scipy installed with pip from PyPI - # and heterogeneous OpenMP runtimes. - - name: py311_pip_openblas_gcc_clang - os: ubuntu-latest - PACKAGER: "pip" - PYTHON_VERSION: "3.11" - CC_OUTER_LOOP: "gcc" - CC_INNER_LOOP: "clang-18" - # Linux + conda-forge Python RC, extra deps from PyPI. - # OpenCV is omitted: no wheels for the current RC ABI yet. - - name: pyrc_pip - os: ubuntu-latest - PACKAGER: "pip" - # Using the "*" marker does not select the latest RC release - # from the conda-forge `python_rc` channel hence the need to pin - # a specific Python version when testing against an RC release. - PYTHON_VERSION: "3.15" - PYTHON_RC: "true" - CC_OUTER_LOOP: "gcc" - CC_INNER_LOOP: "gcc" - # Linux + conda-forge free-threaded Python RC, extra deps from PyPI. - - name: pyrc_ft_pip - os: ubuntu-latest - PACKAGER: "pip" - # Using the "*" marker does not select the latest RC release - # from the conda-forge `python_rc` channel hence the need to pin - # a specific Python version when testing against an RC release. - PYTHON_VERSION: "3.15" - PYTHON_RC: "true" - FREETHREADING: "1" - CC_OUTER_LOOP: "gcc" - CC_INNER_LOOP: "gcc" - # Linux environment with numpy from conda-forge channel and openblas-openmp - - name: pylatest_conda_forge - os: ubuntu-latest - PACKAGER: "conda-forge" - PYTHON_VERSION: "*" - BLAS: "openblas" - OPENBLAS_THREADING_LAYER: "openmp" - INSTALL_OPENCV: "true" - CC_OUTER_LOOP: "gcc" - CC_INNER_LOOP: "gcc" - # Linux environment with no numpy and heterogeneous OpenMP runtimes. - - name: pylatest_conda_nonumpy_gcc_clang - os: ubuntu-latest - PACKAGER: "conda" - PYTHON_VERSION: "*" - NO_NUMPY: "true" - CC_OUTER_LOOP: "gcc" - CC_INNER_LOOP: "clang-18" - - # Linux environments with numpy linked to BLIS - - name: pylatest_blis_gcc_clang_openmp - os: ubuntu-latest - PYTHON_VERSION: "*" - INSTALL_BLAS: "blis" - BLIS_NUM_THREAEDS: "4" - CC_OUTER_LOOP: "gcc" - CC_INNER_LOOP: "gcc" - BLIS_CC: "clang-18" - BLIS_ENABLE_THREADING: "openmp" - - name: pylatest_blis_clang_gcc_pthreads - os: ubuntu-latest - PYTHON_VERSION: "*" - INSTALL_BLAS: "blis" - BLIS_NUM_THREADS: "4" - CC_OUTER_LOOP: "clang-18" - CC_INNER_LOOP: "clang-18" - BLIS_CC: "gcc-12" - BLIS_ENABLE_THREADING: "pthreads" - - name: pylatest_blis_no_threading - os: ubuntu-latest - PYTHON_VERSION: "*" - INSTALL_BLAS: "blis" - BLIS_NUM_THREADS: "1" - CC_OUTER_LOOP: "gcc" - CC_INNER_LOOP: "gcc" - BLIS_CC: "gcc-12" - BLIS_ENABLE_THREADING: "no" - - # Linux env with FlexiBLAS - - name: pylatest_flexiblas - os: ubuntu-latest - PYTHON_VERSION: "*" - INSTALL_BLAS: "flexiblas" - PLATFORM_SPECIFIC_PACKAGES: "mkl" - CC_OUTER_LOOP: "gcc" - CC_INNER_LOOP: "gcc" - - # Python 3.14, free-threaded - - name: py314_freethreaded_pip_openblas - os: ubuntu-latest - PACKAGER: "conda-forge" - BLAS: "openblas" - PYTHON_VERSION: "3.14" - FREETHREADING: "1" - CC_OUTER_LOOP: "gcc" - CC_INNER_LOOP: "gcc" - - # Ubuntu 24.04, which has glibc with different dl_iterate_phdr than - # latest Ubuntus. - - name: ubuntu24_04 - os: ubuntu-24.04 - PACKAGER: "conda-forge" - BLAS: "openblas" - PYTHON_VERSION: "3.14" - CC_OUTER_LOOP: "gcc" - CC_INNER_LOOP: "gcc" env: ${{ matrix }} @@ -280,15 +50,6 @@ jobs: - name: Checkout code uses: actions/checkout@v3 - - name: Restore ccache - if: matrix.INSTALL_BLAS == 'flexiblas' - uses: actions/cache@v4 - with: - path: ~/.cache/ccache - key: ccache-flexiblas-${{ matrix.os }}-${{ hashFiles('continuous_integration/install_flexiblas.sh') }} - restore-keys: | - ccache-flexiblas-${{ matrix.os }}- - - name: Setup conda uses: conda-incubator/setup-miniconda@v3 with: @@ -362,27 +123,3 @@ jobs: uses: codecov/codecov-action@v5 with: files: coverage.xml - - # Meta-test to ensure that at least one of the above CI configurations had - # the necessary platform settings to execute each test without raising - # skipping. - meta_test: - needs: testing - runs-on: ubuntu-latest - steps: - - name: Set up Python - uses: actions/setup-python@v4 - with: - python-version: "3.12" - - - name: Checkout code - uses: actions/checkout@v3 - - - name: Download tests results - uses: actions/download-artifact@v4 - with: - path: test_results - - - name: Check no test always skipped - run: | - python continuous_integration/check_no_test_skipped.py test_results From 6db091c6e3536207e64d4255e71e7ccf09f9e1b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Est=C3=A8ve?= Date: Thu, 1 Oct 2026 16:54:03 +0200 Subject: [PATCH 18/84] Trigger simplified CI 1 From c055a2c9f78d593bb636235bfd3b0ee6c8b47324 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Est=C3=A8ve?= Date: Thu, 1 Oct 2026 16:59:05 +0200 Subject: [PATCH 19/84] Trigger simplified CI 2 From ceec17d84861a9450657d56694357a853bd5fc85 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Est=C3=A8ve?= Date: Thu, 1 Oct 2026 17:04:08 +0200 Subject: [PATCH 20/84] Trigger simplified CI 3 From a23958e1d3f505a62fead4727be29dce0290a508 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Est=C3=A8ve?= Date: Thu, 1 Oct 2026 17:06:13 +0200 Subject: [PATCH 21/84] Trigger really simplified CI 1 --- .github/workflows/test.yml | 17 ----------------- 1 file changed, 17 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index f1502240..a244d427 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -98,10 +98,6 @@ jobs: conda activate testenv PYTHONPATH=. python -X faulthandler continuous_integration/capture_windows_blas_crash.py - - name: Test library - run: | - ./continuous_integration/run_tests.sh - - name: Upload Windows OpenBLAS crash diagnostics if: always() && matrix.os == 'windows-latest' && matrix.name == 'pylatest_conda_forge_openblas' uses: actions/upload-artifact@v4 @@ -110,16 +106,3 @@ jobs: path: crash_diagnostics/ if-no-files-found: ignore retention-days: 14 - - - name: Upload test results - uses: actions/upload-artifact@v4 - with: - # Requires a unique name for each job in the matrix of this run - name: test_result_${{github.run_id}}_${{ matrix.os }}_${{ matrix.name }} - path: test_result.xml - retention-days: 1 - - - name: Upload to Codecov - uses: codecov/codecov-action@v5 - with: - files: coverage.xml From 1f17e1e70464420303c67dcffd594a5f43c8c429 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Est=C3=A8ve?= Date: Thu, 1 Oct 2026 17:06:57 +0200 Subject: [PATCH 22/84] Trigger slimmed down CI 1 From 89b6ea7c3bbd718d70f1394794dfaa3ef4a3448d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Est=C3=A8ve?= Date: Thu, 1 Oct 2026 17:14:51 +0200 Subject: [PATCH 23/84] Trigger slimmed down CI 2 From 54a76b7abcadbbc13ee9e1ff06eb1ccc89215b6b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Est=C3=A8ve?= Date: Thu, 1 Oct 2026 17:19:52 +0200 Subject: [PATCH 24/84] Trigger slimmed down CI 3 From 4152df6d55c3dbe840248c0930c0576e636e4023 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Est=C3=A8ve?= Date: Thu, 1 Oct 2026 17:29:58 +0200 Subject: [PATCH 25/84] Trigger slimmed down CI 4 From ff737391640fd067d0c1d9d848c26ba065406760 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Est=C3=A8ve?= Date: Thu, 1 Oct 2026 17:53:31 +0200 Subject: [PATCH 26/84] Trigger slimmed down CI 4 From a88e9e27cb026e2a3aa3b90ddd94f2786c6a91ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Est=C3=A8ve?= Date: Thu, 1 Oct 2026 18:03:33 +0200 Subject: [PATCH 27/84] Trigger slimmed down CI 5 From 5d620cbe77c6be32cbb76f2e674b689e11eafb03 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Est=C3=A8ve?= Date: Thu, 1 Oct 2026 18:13:36 +0200 Subject: [PATCH 28/84] Trigger slimmed down CI 6 From d75d3da92502272ceaa93e2b4cbfa733398c3027 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Est=C3=A8ve?= Date: Thu, 1 Oct 2026 18:23:38 +0200 Subject: [PATCH 29/84] Trigger slimmed down CI 7 From 0c31c67ed75fa76d72a77bde5c2b7accafa3011a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Est=C3=A8ve?= Date: Thu, 1 Oct 2026 18:33:40 +0200 Subject: [PATCH 30/84] Trigger slimmed down CI 8 From c72f5980aba03e8d313361026eb0ccb5246094e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Est=C3=A8ve?= Date: Thu, 1 Oct 2026 18:43:43 +0200 Subject: [PATCH 31/84] Trigger slimmed down CI 9 From 2d61abf51084aeb97799036d5b37a6b8d0f58b14 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Est=C3=A8ve?= Date: Thu, 1 Oct 2026 18:53:44 +0200 Subject: [PATCH 32/84] Trigger slimmed down CI 10 From 618367c76bc8e13a2f60e9306f841db6fd1a3e88 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Est=C3=A8ve?= Date: Thu, 1 Oct 2026 19:34:11 +0200 Subject: [PATCH 33/84] Try with and without ProcDump --- .github/workflows/test.yml | 31 +++++++++++++++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index a244d427..36e49a7a 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -89,8 +89,20 @@ jobs: Expand-Archive -LiteralPath $archive -DestinationPath $toolDir "PROCDUMP_PATH=$(Join-Path $toolDir 'procdump64.exe')" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append + - name: Run Windows OpenBLAS diagnostic without ProcDump + id: direct + continue-on-error: true + env: + OPENBLAS_VERBOSE: "2" + run: | + source "$CONDA/etc/profile.d/conda.sh" + conda activate testenv + PYTHONPATH=. python -u -X faulthandler tests/empirical_scope_observation.py blas + - name: Capture Windows OpenBLAS diagnostic crashes - if: matrix.os == 'windows-latest' && matrix.name == 'pylatest_conda_forge_openblas' + id: procdump + if: ${{ !cancelled() && (steps.direct.outcome == 'success' || steps.direct.outcome == 'failure') }} + continue-on-error: true env: OPENBLAS_VERBOSE: "2" run: | @@ -98,11 +110,26 @@ jobs: conda activate testenv PYTHONPATH=. python -X faulthandler continuous_integration/capture_windows_blas_crash.py + - name: Check for crash dumps + id: dumps + if: always() + shell: pwsh + run: | + $found = Test-Path -Path 'crash_diagnostics/*.dmp' + "found=$($found.ToString().ToLowerInvariant())" >> $env:GITHUB_OUTPUT + - name: Upload Windows OpenBLAS crash diagnostics - if: always() && matrix.os == 'windows-latest' && matrix.name == 'pylatest_conda_forge_openblas' + if: always() && steps.dumps.outputs.found == 'true' uses: actions/upload-artifact@v4 with: name: windows-openblas-crash-${{ github.run_id }}-${{ github.run_attempt }} path: crash_diagnostics/ if-no-files-found: ignore retention-days: 14 + + - name: Fail if either diagnostic failed or a dump was captured + if: always() && (steps.direct.outcome == 'failure' || steps.procdump.outcome == 'failure' || steps.dumps.outputs.found == 'true') + shell: pwsh + run: | + Write-Output '::error::OpenBLAS diagnostic failed. Check both diagnostic logs and any uploaded crash dump.' + exit 1 From cb2c9fc880039d05865eb10e36ccbe08616966c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Est=C3=A8ve?= Date: Thu, 1 Oct 2026 19:34:56 +0200 Subject: [PATCH 34/84] Trigger slimmed down CI 1 From df18643a812c07c8d4608d58b49f361db31ddca6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Est=C3=A8ve?= Date: Thu, 1 Oct 2026 19:35:20 +0200 Subject: [PATCH 35/84] both with and without ProcDump 1 From 0b5313e75025598bff7e2c7a4fccacc063c1c525 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Est=C3=A8ve?= Date: Thu, 1 Oct 2026 19:45:23 +0200 Subject: [PATCH 36/84] both with and without ProcDump 2 From be695f053eca20a139d018f39cb8769bb5d3d907 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Est=C3=A8ve?= Date: Thu, 1 Oct 2026 19:55:25 +0200 Subject: [PATCH 37/84] both with and without ProcDump 3 From 770d1092b57c32398a65df0da5452bbcd7a77374 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Est=C3=A8ve?= Date: Thu, 1 Oct 2026 20:05:27 +0200 Subject: [PATCH 38/84] both with and without ProcDump 4 From 55bb5373292c437b253de6667c811d5eb7d79b8f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Est=C3=A8ve?= Date: Thu, 1 Oct 2026 20:15:29 +0200 Subject: [PATCH 39/84] both with and without ProcDump 5 From 9510f83e95645170893bc9bd831000d8dfd3f9bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Est=C3=A8ve?= Date: Thu, 1 Oct 2026 20:25:31 +0200 Subject: [PATCH 40/84] both with and without ProcDump 6 From 3e3d72f4331fc80076711743aaf9a7efa1db5488 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Est=C3=A8ve?= Date: Thu, 1 Oct 2026 20:35:33 +0200 Subject: [PATCH 41/84] both with and without ProcDump 7 From f135db9a339b8f0fef8c75c7e9fa5a9d991b7008 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Est=C3=A8ve?= Date: Thu, 1 Oct 2026 20:42:11 +0200 Subject: [PATCH 42/84] both with and without ProcDump 8 From ae6dbb2bbef6d206f2d84e8666a8f5536cda023a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Est=C3=A8ve?= Date: Thu, 1 Oct 2026 20:52:13 +0200 Subject: [PATCH 43/84] both with and without ProcDump 9 From 74215ba9d39d00006adbb3b885a3d6dd170b8339 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Est=C3=A8ve?= Date: Thu, 1 Oct 2026 21:02:15 +0200 Subject: [PATCH 44/84] both with and without ProcDump 10 From 43e6b499f965702cae6b421559c08c3ed5cfa051 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Est=C3=A8ve?= Date: Thu, 1 Oct 2026 21:12:17 +0200 Subject: [PATCH 45/84] both with and without ProcDump 11 From 085e96f561495ed8e5cb04a5943220ed06ba47ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Est=C3=A8ve?= Date: Thu, 1 Oct 2026 21:22:19 +0200 Subject: [PATCH 46/84] both with and without ProcDump 12 From f405d0ad6d3520356750258c9df3ee21c2f57eb4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Est=C3=A8ve?= Date: Thu, 1 Oct 2026 21:32:22 +0200 Subject: [PATCH 47/84] both with and without ProcDump 13 From 2f8251f0f0c0dcaf620dd3fc56780fd68c5c3d51 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Est=C3=A8ve?= Date: Thu, 1 Oct 2026 21:42:24 +0200 Subject: [PATCH 48/84] both with and without ProcDump 14 From 3af69282dcc6ff1b2aba6560533ac10a2b5aa7af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Est=C3=A8ve?= Date: Thu, 1 Oct 2026 21:52:26 +0200 Subject: [PATCH 49/84] both with and without ProcDump 15 From 75f52e1f5e2e643bca98a53acbd7497366199e2f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Est=C3=A8ve?= Date: Thu, 1 Oct 2026 22:02:28 +0200 Subject: [PATCH 50/84] both with and without ProcDump 16 From 870f1bd6e6cdf7cac8ee5a0acd18f7d57bbe60ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Est=C3=A8ve?= Date: Thu, 1 Oct 2026 22:12:30 +0200 Subject: [PATCH 51/84] both with and without ProcDump 17 From 16ff7fc94813ef9958b7e9f96d2ec9cfa8bc973c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Est=C3=A8ve?= Date: Thu, 1 Oct 2026 22:22:32 +0200 Subject: [PATCH 52/84] both with and without ProcDump 18 From a2f6f9436b823d0a9ec42c87bb7d01833e2204e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Est=C3=A8ve?= Date: Thu, 1 Oct 2026 22:32:34 +0200 Subject: [PATCH 53/84] both with and without ProcDump 19 From b5bd651ebddf932e45bd9f66ef60f898c1b217bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Est=C3=A8ve?= Date: Thu, 1 Oct 2026 22:42:36 +0200 Subject: [PATCH 54/84] both with and without ProcDump 20 From a0a559fdf10ce005cc9bceae0a56d09dd37ac953 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Est=C3=A8ve?= Date: Thu, 1 Oct 2026 22:52:39 +0200 Subject: [PATCH 55/84] both with and without ProcDump 21 From 53b66a3ea7d5c084d7af8ac1be524b3f77948d3d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Est=C3=A8ve?= Date: Thu, 1 Oct 2026 23:02:40 +0200 Subject: [PATCH 56/84] both with and without ProcDump 22 From 685d039f6caf2d05a06c564dd319def193619a40 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Est=C3=A8ve?= Date: Thu, 1 Oct 2026 23:12:42 +0200 Subject: [PATCH 57/84] both with and without ProcDump 23 From c4e17099dbc5e59d3f5213cd747694af3ad9391b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Est=C3=A8ve?= Date: Thu, 1 Oct 2026 23:22:44 +0200 Subject: [PATCH 58/84] both with and without ProcDump 24 From 63ae638f3fcb90d45207ce58b1577bb3a707c865 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Est=C3=A8ve?= Date: Thu, 1 Oct 2026 23:32:46 +0200 Subject: [PATCH 59/84] both with and without ProcDump 25 From e056e8501c65704d45c13b6b87e5fe8056f0f752 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Est=C3=A8ve?= Date: Thu, 1 Oct 2026 23:42:49 +0200 Subject: [PATCH 60/84] both with and without ProcDump 26 From 17decbd2cb014b4de539f70efc26238b4b682264 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Est=C3=A8ve?= Date: Thu, 1 Oct 2026 23:52:51 +0200 Subject: [PATCH 61/84] both with and without ProcDump 27 From 5925d40c9b82617b1d2ba966b91ee1d8ecc764fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Est=C3=A8ve?= Date: Fri, 2 Oct 2026 00:02:52 +0200 Subject: [PATCH 62/84] both with and without ProcDump 28 From 719b51aa7763ba711b7f0d1c69dd6e66673a1b12 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Est=C3=A8ve?= Date: Fri, 2 Oct 2026 00:12:54 +0200 Subject: [PATCH 63/84] both with and without ProcDump 29 From 770bf02d1ac716d9b7073c1edd9f96d53d9ba11d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Est=C3=A8ve?= Date: Fri, 2 Oct 2026 00:22:57 +0200 Subject: [PATCH 64/84] both with and without ProcDump 30 From 52035b26dbd7a013f9d8f64571868a92b46f6544 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Est=C3=A8ve?= Date: Fri, 2 Oct 2026 00:32:59 +0200 Subject: [PATCH 65/84] both with and without ProcDump 31 From 70432da7b7b736f1198188303ff2d9ebfc597feb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Est=C3=A8ve?= Date: Fri, 2 Oct 2026 00:43:01 +0200 Subject: [PATCH 66/84] both with and without ProcDump 32 From 33098e89add4ec6489c2727bf5d61ab30846b87d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Est=C3=A8ve?= Date: Fri, 2 Oct 2026 00:53:03 +0200 Subject: [PATCH 67/84] both with and without ProcDump 33 From c8aec0c5965f7fc35db5a25a42ca455472888bd5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Est=C3=A8ve?= Date: Fri, 2 Oct 2026 01:03:04 +0200 Subject: [PATCH 68/84] both with and without ProcDump 34 From 3583e097f00bf70304a727584118e7c9c65a31b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Est=C3=A8ve?= Date: Fri, 2 Oct 2026 01:13:06 +0200 Subject: [PATCH 69/84] both with and without ProcDump 35 From eb5c8e626944b7c60ff5c661fabaf93bfe47e61f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Est=C3=A8ve?= Date: Fri, 2 Oct 2026 01:23:08 +0200 Subject: [PATCH 70/84] both with and without ProcDump 36 From 4e646b7e242a5e17781457f9eccc5e67c1406256 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Est=C3=A8ve?= Date: Fri, 2 Oct 2026 01:33:10 +0200 Subject: [PATCH 71/84] both with and without ProcDump 37 From 9e985c7b1fa9b5493e6e4355618aaf9417c043b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Est=C3=A8ve?= Date: Fri, 2 Oct 2026 01:43:12 +0200 Subject: [PATCH 72/84] both with and without ProcDump 38 From 0a61f246e7a971ccc16eb4f804bfe9f296f912f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Est=C3=A8ve?= Date: Fri, 2 Oct 2026 01:53:13 +0200 Subject: [PATCH 73/84] both with and without ProcDump 39 From 90423c03c3097827cba9b3fde961b2343963f677 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Est=C3=A8ve?= Date: Fri, 2 Oct 2026 02:03:15 +0200 Subject: [PATCH 74/84] both with and without ProcDump 40 From 55cf1c93a8af61f02642baa669b076ac358a7f16 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Est=C3=A8ve?= Date: Fri, 2 Oct 2026 02:13:17 +0200 Subject: [PATCH 75/84] both with and without ProcDump 41 From 43222fcc9126049fab9a0e3e4ac571d97bed140c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Est=C3=A8ve?= Date: Fri, 2 Oct 2026 02:23:18 +0200 Subject: [PATCH 76/84] both with and without ProcDump 42 From 6046630ae42384f446f4148650b62272e8d43cbb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Est=C3=A8ve?= Date: Fri, 2 Oct 2026 02:33:20 +0200 Subject: [PATCH 77/84] both with and without ProcDump 43 From e39f45cf3af32e0fd7d71161caf72b04a21d3901 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Est=C3=A8ve?= Date: Fri, 2 Oct 2026 02:43:22 +0200 Subject: [PATCH 78/84] both with and without ProcDump 44 From 707702f8ceaa9b2a0c5d2d0af88597a5b2aa9758 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Est=C3=A8ve?= Date: Fri, 2 Oct 2026 02:53:24 +0200 Subject: [PATCH 79/84] both with and without ProcDump 45 From b49a19c67633ffb5b219ffef5d46937c3bac34da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Est=C3=A8ve?= Date: Fri, 2 Oct 2026 03:03:26 +0200 Subject: [PATCH 80/84] both with and without ProcDump 46 From c6d7f07eef49c59400baee2e31b258bf1f3ad8fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Est=C3=A8ve?= Date: Fri, 2 Oct 2026 03:13:28 +0200 Subject: [PATCH 81/84] both with and without ProcDump 47 From b1843758a935ab959bdd802ac7fb19590c817db6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Est=C3=A8ve?= Date: Fri, 2 Oct 2026 03:23:30 +0200 Subject: [PATCH 82/84] both with and without ProcDump 48 From c8584f75d6d073fcb018d52a26c9c2d1ad721329 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Est=C3=A8ve?= Date: Fri, 2 Oct 2026 03:33:31 +0200 Subject: [PATCH 83/84] both with and without ProcDump 49 From e28e0509b69359f612dfdf4e9051e5dd9d522572 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Est=C3=A8ve?= Date: Fri, 2 Oct 2026 03:43:33 +0200 Subject: [PATCH 84/84] both with and without ProcDump 50