From 15166184d49f99bf10f11d447e896448d196130b Mon Sep 17 00:00:00 2001 From: flexatone Date: Mon, 23 Jun 2025 14:47:58 -0700 Subject: [PATCH 1/9] cibuildwheel at 3.0.0 --- .github/workflows/ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index de35339b..bba999cc 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -64,7 +64,7 @@ jobs: - run: echo '::add-matcher::.github/problem-matchers/msvc.json' if: startsWith(matrix.os, 'windows-') - - uses: pypa/cibuildwheel@v2.23.3 + - uses: pypa/cibuildwheel@v3.0.0 if: matrix.os != 'macos-13-xlarge' with: output-dir: dist @@ -78,7 +78,7 @@ jobs: - run: pip install pipx if: matrix.os == 'macos-13-xlarge' - - uses: pypa/cibuildwheel@v2.23.3 + - uses: pypa/cibuildwheel@v3.0.0 if: matrix.os == 'macos-13-xlarge' with: output-dir: dist From c409b135ee997004ed1adc644e25ef2493b14f4f Mon Sep 17 00:00:00 2001 From: flexatone Date: Mon, 23 Jun 2025 15:17:06 -0700 Subject: [PATCH 2/9] updated numpy version, removed some usage of PyList_GET_ITEM --- requirements-build-3_13.txt | 2 +- requirements-dev-3_13.txt | 2 +- src/_arraykit.c | 5 ++++- src/auto_map.c | 12 ++++++------ 4 files changed, 12 insertions(+), 9 deletions(-) diff --git a/requirements-build-3_13.txt b/requirements-build-3_13.txt index dd8af061..467a95b6 100644 --- a/requirements-build-3_13.txt +++ b/requirements-build-3_13.txt @@ -1,2 +1,2 @@ -numpy==2.2.5 +numpy==2.3.1 setuptools==80.* diff --git a/requirements-dev-3_13.txt b/requirements-dev-3_13.txt index c0f0285b..e029979c 100644 --- a/requirements-dev-3_13.txt +++ b/requirements-dev-3_13.txt @@ -1,4 +1,4 @@ -numpy==2.2.5 +numpy==2.3.1 pytest==8.3.3 invoke==2.2.0 hypothesis==6.131.16 diff --git a/src/_arraykit.c b/src/_arraykit.c index 1646a0ca..7ce767ad 100644 --- a/src/_arraykit.c +++ b/src/_arraykit.c @@ -72,7 +72,7 @@ static struct PyModuleDef arraykit_module = { .m_methods = arraykit_methods, }; -PyObject * +PyObject* PyInit__arraykit(void) { import_array(); @@ -134,6 +134,9 @@ PyInit__arraykit(void) Py_XDECREF(m); return NULL; } +#ifdef Py_GIL_DISABLED + PyUnstable_Module_SetGIL(m, Py_MOD_GIL_NOT_USED); +#endif return m; } diff --git a/src/auto_map.c b/src/auto_map.c index 64b65fb5..feb50677 100644 --- a/src/auto_map.c +++ b/src/auto_map.c @@ -426,8 +426,8 @@ fami_iternext(FAMIObject *self) else { PyObject* t = PyTuple_New(2); if (!t) { return NULL; } - PyObject* k = PyList_GET_ITEM(self->fam->keys, index); - Py_INCREF(k); + PyObject* k = PyList_GetItemRef(self->fam->keys, index); + if (!t) { return NULL; } PyTuple_SET_ITEM(t, 0, k); PyTuple_SET_ITEM(t, 1, PyLong_FromSsize_t(index)); return t; @@ -438,8 +438,8 @@ fami_iternext(FAMIObject *self) return PyArray_ToScalar(PyArray_GETPTR1(self->keys_array, index), self->keys_array); } else { - PyObject* yield = PyList_GET_ITEM(self->fam->keys, index); - Py_INCREF(yield); + PyObject* yield = PyList_GetItemRef(self->fam->keys, index); + if (!yield) { return NULL; } return yield; } } @@ -1302,11 +1302,11 @@ lookup(FAMObject *self, PyObject *key) { return self->table[table_pos].keys_pos; } -// Insert a key_pos, hash pair into the table. Assumes table already has appropriate size. When inserting a new itme, `hash` is -1, forcing a fresh hash to be computed here. Return 0 on success, -1 on error. +// Insert a key_pos, hash pair into the table. Assumes table already has appropriate size. When inserting a new item, `hash` is -1, forcing a fresh hash to be computed here. Return 0 on success, -1 on error. static int insert_obj( FAMObject *self, - PyObject *key, + PyObject *key, // NOTE: a borrowed reference Py_ssize_t keys_pos, Py_hash_t hash) { From 8624af4b73ff972e4b0a57b0f0f4655708cf504e Mon Sep 17 00:00:00 2001 From: flexatone Date: Mon, 23 Jun 2025 15:27:36 -0700 Subject: [PATCH 3/9] revert to cibuildwheel 2.23.3 --- .github/workflows/ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index bba999cc..de35339b 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -64,7 +64,7 @@ jobs: - run: echo '::add-matcher::.github/problem-matchers/msvc.json' if: startsWith(matrix.os, 'windows-') - - uses: pypa/cibuildwheel@v3.0.0 + - uses: pypa/cibuildwheel@v2.23.3 if: matrix.os != 'macos-13-xlarge' with: output-dir: dist @@ -78,7 +78,7 @@ jobs: - run: pip install pipx if: matrix.os == 'macos-13-xlarge' - - uses: pypa/cibuildwheel@v3.0.0 + - uses: pypa/cibuildwheel@v2.23.3 if: matrix.os == 'macos-13-xlarge' with: output-dir: dist From c61b9d58d3088e006f13a3464616d327a2b111b0 Mon Sep 17 00:00:00 2001 From: flexatone Date: Mon, 23 Jun 2025 15:38:37 -0700 Subject: [PATCH 4/9] conditionally ues PyList_GetItemRef --- src/auto_map.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/auto_map.c b/src/auto_map.c index feb50677..cc05795a 100644 --- a/src/auto_map.c +++ b/src/auto_map.c @@ -426,8 +426,13 @@ fami_iternext(FAMIObject *self) else { PyObject* t = PyTuple_New(2); if (!t) { return NULL; } +#if PY_VERSION_HEX >= 0x030D0000 // Python 3.13+ PyObject* k = PyList_GetItemRef(self->fam->keys, index); - if (!t) { return NULL; } +#else + PyObject* k = PyList_GET_ITEM(self->fam->keys, index); + Py_XINCREF(k); +#endif + if (!k) { return NULL; } PyTuple_SET_ITEM(t, 0, k); PyTuple_SET_ITEM(t, 1, PyLong_FromSsize_t(index)); return t; @@ -438,7 +443,12 @@ fami_iternext(FAMIObject *self) return PyArray_ToScalar(PyArray_GETPTR1(self->keys_array, index), self->keys_array); } else { +#if PY_VERSION_HEX >= 0x030D0000 // Python 3.13+ PyObject* yield = PyList_GetItemRef(self->fam->keys, index); +#else + PyObject* yield = PyList_GET_ITEM(self->fam->keys, index); + Py_XINCREF(yield); +#endif if (!yield) { return NULL; } return yield; } From a20a54666c57a37a25c49ab1e7b6018919e68382 Mon Sep 17 00:00:00 2001 From: flexatone Date: Mon, 23 Jun 2025 16:06:19 -0700 Subject: [PATCH 5/9] added free threading to matrix --- .github/workflows/ci.yml | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index de35339b..56f930c6 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -48,10 +48,11 @@ jobs: matrix: os: ${{ fromJson(needs.matrix_config.outputs.matrix_os) }} python: - - {minor: 10, req_build: 'requirements-build-3_11.txt', req_test: 'requirements-dev-3_11.txt'} - - {minor: 11, req_build: 'requirements-build-3_11.txt', req_test: 'requirements-dev-3_11.txt'} - - {minor: 12, req_build: 'requirements-build-3_12.txt', req_test: 'requirements-dev-3_12.txt'} - - {minor: 13, req_build: 'requirements-build-3_13.txt', req_test: 'requirements-dev-3_13.txt'} + - {minor: 10, req_build: 'requirements-build-3_11.txt', req_test: 'requirements-dev-3_11.txt', free_threading: '0'} + - {minor: 11, req_build: 'requirements-build-3_11.txt', req_test: 'requirements-dev-3_11.txt', free_threading: '0'} + - {minor: 12, req_build: 'requirements-build-3_12.txt', req_test: 'requirements-dev-3_12.txt', free_threading: '0'} + - {minor: 13, req_build: 'requirements-build-3_13.txt', req_test: 'requirements-dev-3_13.txt', free_threading: '0'} + - {minor: 13, req_build: 'requirements-build-3_13.txt', req_test: 'requirements-dev-3_13.txt', free_threading: '1'} runs-on: ${{ matrix.os }} outputs: @@ -75,6 +76,7 @@ jobs: CIBW_BEFORE_BUILD: pip install -r {project}/${{ matrix.python.req_build }} CIBW_BEFORE_TEST: pip install -r {project}/${{ matrix.python.req_test }} CIBW_TEST_COMMAND: pytest {project}/test + PYTHON_FREE_THREADING: ${{ matrix.python.free_threading }} - run: pip install pipx if: matrix.os == 'macos-13-xlarge' @@ -87,6 +89,7 @@ jobs: CIBW_BEFORE_BUILD: pip install -r {project}/${{ matrix.python.req_build }} CIBW_BEFORE_TEST: pip install -r {project}/${{ matrix.python.req_test }} CIBW_TEST_COMMAND: pytest {project}/test + PYTHON_FREE_THREADING: ${{ matrix.python.free_threading }} - uses: actions/upload-artifact@v4 with: From 49742ea6b5e997de1d56d392a64c76ea047bb96d Mon Sep 17 00:00:00 2001 From: flexatone Date: Mon, 23 Jun 2025 16:14:05 -0700 Subject: [PATCH 6/9] try to include free-threaded build --- .github/workflows/ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 56f930c6..e46ccf85 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -76,7 +76,7 @@ jobs: CIBW_BEFORE_BUILD: pip install -r {project}/${{ matrix.python.req_build }} CIBW_BEFORE_TEST: pip install -r {project}/${{ matrix.python.req_test }} CIBW_TEST_COMMAND: pytest {project}/test - PYTHON_FREE_THREADING: ${{ matrix.python.free_threading }} + CIBW_ENABLE: ${{ matrix.python.free_threading == '1' && 'cpython-freethreading' || '' }} - run: pip install pipx if: matrix.os == 'macos-13-xlarge' @@ -89,7 +89,7 @@ jobs: CIBW_BEFORE_BUILD: pip install -r {project}/${{ matrix.python.req_build }} CIBW_BEFORE_TEST: pip install -r {project}/${{ matrix.python.req_test }} CIBW_TEST_COMMAND: pytest {project}/test - PYTHON_FREE_THREADING: ${{ matrix.python.free_threading }} + CIBW_ENABLE: ${{ matrix.python.free_threading == '1' && 'cpython-freethreading' || '' }} - uses: actions/upload-artifact@v4 with: From 1eb57b8b66bee330a06a63128aea93e816978d6b Mon Sep 17 00:00:00 2001 From: Christopher Ariza Date: Mon, 23 Jun 2025 16:56:32 -0700 Subject: [PATCH 7/9] Update ci.yml --- .github/workflows/ci.yml | 23 +++++++++-------------- 1 file changed, 9 insertions(+), 14 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e46ccf85..46666e7f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -41,18 +41,18 @@ jobs: fi wheels: - name: Build / ${{ matrix.os }} / Python 3.${{ matrix.python.minor }} + name: Build / ${{ matrix.os }} / Python 3.${{ matrix.python.minor }} / FT ${{ matrix.python.ft }} needs: matrix_config strategy: fail-fast: false matrix: os: ${{ fromJson(needs.matrix_config.outputs.matrix_os) }} python: - - {minor: 10, req_build: 'requirements-build-3_11.txt', req_test: 'requirements-dev-3_11.txt', free_threading: '0'} - - {minor: 11, req_build: 'requirements-build-3_11.txt', req_test: 'requirements-dev-3_11.txt', free_threading: '0'} - - {minor: 12, req_build: 'requirements-build-3_12.txt', req_test: 'requirements-dev-3_12.txt', free_threading: '0'} - - {minor: 13, req_build: 'requirements-build-3_13.txt', req_test: 'requirements-dev-3_13.txt', free_threading: '0'} - - {minor: 13, req_build: 'requirements-build-3_13.txt', req_test: 'requirements-dev-3_13.txt', free_threading: '1'} + - {minor: 10, req_build: 'requirements-build-3_11.txt', req_test: 'requirements-dev-3_11.txt', ft: '0'} + - {minor: 11, req_build: 'requirements-build-3_11.txt', req_test: 'requirements-dev-3_11.txt', ft: '0'} + - {minor: 12, req_build: 'requirements-build-3_12.txt', req_test: 'requirements-dev-3_12.txt', ft: '0'} + - {minor: 13, req_build: 'requirements-build-3_13.txt', req_test: 'requirements-dev-3_13.txt', ft: '0'} + - {minor: 13, req_build: 'requirements-build-3_13.txt', req_test: 'requirements-dev-3_13.txt', ft: '1'} runs-on: ${{ matrix.os }} outputs: @@ -76,7 +76,7 @@ jobs: CIBW_BEFORE_BUILD: pip install -r {project}/${{ matrix.python.req_build }} CIBW_BEFORE_TEST: pip install -r {project}/${{ matrix.python.req_test }} CIBW_TEST_COMMAND: pytest {project}/test - CIBW_ENABLE: ${{ matrix.python.free_threading == '1' && 'cpython-freethreading' || '' }} + CIBW_ENABLE: ${{ matrix.python.ft == '1' && 'cpython-freethreading' || '' }} - run: pip install pipx if: matrix.os == 'macos-13-xlarge' @@ -89,11 +89,11 @@ jobs: CIBW_BEFORE_BUILD: pip install -r {project}/${{ matrix.python.req_build }} CIBW_BEFORE_TEST: pip install -r {project}/${{ matrix.python.req_test }} CIBW_TEST_COMMAND: pytest {project}/test - CIBW_ENABLE: ${{ matrix.python.free_threading == '1' && 'cpython-freethreading' || '' }} + CIBW_ENABLE: ${{ matrix.python.ft == '1' && 'cpython-freethreading' || '' }} - uses: actions/upload-artifact@v4 with: - name: dist-wheels-${{ matrix.os }}-py3${{ matrix.python.minor }} # Unique artifact name + name: dist-wheels-${{ matrix.os }}-py3${{ matrix.python.minor }}-t{{ matrix.python.ft }} # Unique artifact name path: dist/* upload: @@ -108,11 +108,6 @@ jobs: path: dist merge-multiple: true - # - name: Flatten dist directory - # run: | - # find dist -mindepth 2 -type f \( -name '*.whl' -o -name '*.tar.gz' \) \ - # -exec mv {} dist/ \; - - uses: pypa/gh-action-pypi-publish@release/v1 with: password: ${{ secrets.PYPI_TOKEN }} From 08dea27d500135efe00cbb7a22ae614141cd12d2 Mon Sep 17 00:00:00 2001 From: Christopher Ariza Date: Mon, 23 Jun 2025 17:08:12 -0700 Subject: [PATCH 8/9] Update ci.yml --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 46666e7f..7aeec129 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -93,7 +93,7 @@ jobs: - uses: actions/upload-artifact@v4 with: - name: dist-wheels-${{ matrix.os }}-py3${{ matrix.python.minor }}-t{{ matrix.python.ft }} # Unique artifact name + name: dist-wheels-${{ matrix.os }}-py3${{ matrix.python.minor }}-t${{ matrix.python.ft }} # Unique artifact name path: dist/* upload: From fa6874ada13eff0d2a92e8d5afbcc209eff36876 Mon Sep 17 00:00:00 2001 From: Christopher Ariza Date: Mon, 23 Jun 2025 17:27:11 -0700 Subject: [PATCH 9/9] Update ci.yml --- .github/workflows/ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 7aeec129..bb2be7d2 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -41,7 +41,7 @@ jobs: fi wheels: - name: Build / ${{ matrix.os }} / Python 3.${{ matrix.python.minor }} / FT ${{ matrix.python.ft }} + name: Build / ${{ matrix.os }} / Python 3.${{ matrix.python.minor }} / FT${{ matrix.python.ft }} needs: matrix_config strategy: fail-fast: false @@ -52,7 +52,7 @@ jobs: - {minor: 11, req_build: 'requirements-build-3_11.txt', req_test: 'requirements-dev-3_11.txt', ft: '0'} - {minor: 12, req_build: 'requirements-build-3_12.txt', req_test: 'requirements-dev-3_12.txt', ft: '0'} - {minor: 13, req_build: 'requirements-build-3_13.txt', req_test: 'requirements-dev-3_13.txt', ft: '0'} - - {minor: 13, req_build: 'requirements-build-3_13.txt', req_test: 'requirements-dev-3_13.txt', ft: '1'} + - {minor: 13t, req_build: 'requirements-build-3_13.txt', req_test: 'requirements-dev-3_13.txt', ft: '1'} runs-on: ${{ matrix.os }} outputs: