simonsobs / pixell

A rectangular pixel map manipulation and harmonic analysis library derived from Sigurd Naess' enlib.
Other
42 stars 32 forks source link

Added meson build system files #260

Closed JBorrow closed 4 months ago

JBorrow commented 4 months ago

Initial version of the meson build system.

A few outstanding items:

  1. Can we migrate any of the makefile business to meson? Probably.
  2. There is a little difference here between extension modules compared to before; can do from pixell import cmisc but not import pixel; pixel.cmisc. Not exactly sure why.
  3. How can we select appropriate flags? Not ecxactly sure how to do this in meson.
JBorrow commented 4 months ago

Now building on my macbook and on ubuntu vm, but not in CI... Lovely.

JBorrow commented 4 months ago

Seems to build fine apart from on py3.8 on linux cauisng the rest to get canclled.

JBorrow commented 4 months ago

At this time we should also reconsider the version pinning for the various dependencies.

codecov[bot] commented 4 months ago

Codecov Report

Attention: Patch coverage is 64.70588% with 6 lines in your changes missing coverage. Please review.

Project coverage is 37.72%. Comparing base (14b1dba) to head (43e5b1d).

Files Patch % Lines
pixell/__init__.py 60.00% 2 Missing :warning:
pixell/_version.py 0.00% 2 Missing :warning:
pixell/enplot.py 50.00% 2 Missing :warning:
Additional details and impacted files ```diff @@ Coverage Diff @@ ## master #260 +/- ## ========================================== - Coverage 43.56% 37.72% -5.85% ========================================== Files 34 29 -5 Lines 11036 10079 -957 ========================================== - Hits 4808 3802 -1006 - Misses 6228 6277 +49 ```

:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Have feedback on the report? Share it here.

JBorrow commented 4 months ago

TBD:

  1. Decide on build modes and flags.
  2. Replace makefiles with meson (not sensible as it stands)
  3. Removed unused source files (complete)
  4. Deal with versioning (complete)
  5. Re-visit pins for dependencies.
JBorrow commented 4 months ago

Note: the reason that code coverage has decreased is that I have removed the self-coverage of the tests which some may argue is cheating :).

JBorrow commented 4 months ago

@msyriac are the scripts in scripts/generate_tests.py actually used?

JBorrow commented 4 months ago

Our broken builds on ubuntu actually seem to be from a broken scipy dependency build.

JBorrow commented 4 months ago

I have asked Ted and Giannis to test this branch builds successfully on their machines (NERSC and Princeton respectively) with python 3.12 before we merge.

Potentially unrelated: the tests make over 10'000 warnings. We should look into those.

JBorrow commented 4 months ago

Builds are good to go. Only reason for test failures is codecov saying no.

msyriac commented 4 months ago

@msyriac are the scripts in scripts/generate_tests.py actually used?

Yes, they are used (very rarely) to generate data for comparisons in tests

msyriac commented 4 months ago

Do we want to support editable installations? If I install using "pip install -e ." after cloning, I get

$ python
Python 3.12.3 (main, Apr 10 2024, 05:33:47) [GCC 13.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from pixell import curvedsky
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<frozen importlib._bootstrap>", line 1360, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1322, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 1262, in _find_spec
  File "/home/msyriac/.venv/lib/python3.12/site-packages/_pixell_editable_loader.py", line 310, in find_spec
    tree = self._rebuild()
           ^^^^^^^^^^^^^^^
  File "/home/msyriac/.venv/lib/python3.12/site-packages/_pixell_editable_loader.py", line 343, in _rebuild
    subprocess.run(self._build_cmd, cwd=self._build_path, env=env, stdout=subprocess.DEVNULL)
  File "/usr/lib/python3.12/subprocess.py", line 548, in run
    with Popen(*popenargs, **kwargs) as process:
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/subprocess.py", line 1026, in __init__
    self._execute_child(args, executable, preexec_fn, close_fds,
  File "/usr/lib/python3.12/subprocess.py", line 1955, in _execute_child
    raise child_exception_type(errno_num, err_msg, err_filename)
FileNotFoundError: [Errno 2] No such file or directory: '/tmp/pip-build-env-_3jl0kzr/normal/bin/ninja'

Works fine with a regular install.

JBorrow commented 4 months ago

We do, you just need to do pip install --editable --no-build-isolation . I've added this to the README.

msyriac commented 4 months ago

I get

$ pip install --editable --no-build-isolation .
ERROR: --no-build-isolation is not a valid editable requirement. It should either be a path to a local project or a VCS URL (beginning with bzr+http, bzr+https, bzr+ssh, bzr+sftp, bzr+ftp, bzr+lp, bzr+file, git+http, git+https, git+ssh, git+git, git+file, hg+file, hg+http, hg+https, hg+ssh, hg+static-http, svn+ssh, svn+http, svn+https, svn+svn, svn+file).

pip 24.1.1 on python 3.12

JBorrow commented 4 months ago

Oh, sorry, you need to swap those two flags, oops!

msyriac commented 4 months ago

Ok, I now get

ModuleNotFoundError: No module named 'mesonpy'

full traceback

$ pip install --no-build-isolation --editable .
DEPRECATION: Loading egg at /home/msyriac/.venv/lib/python3.12/site-packages/classy-3.2.3-py3.12-linux-x86_64.egg is deprecated. pip 24.3 will enforce this behaviour change. A possible replacement is to use pip for package installation. Discussion can be found at https://github.com/pypa/pip/issues/12330
Obtaining file:///home/msyriac/repos/pixell
  Checking if build backend supports build_editable ... done
ERROR: Exception:
Traceback (most recent call last):
  File "/home/msyriac/.venv/lib/python3.12/site-packages/pip/_internal/cli/base_command.py", line 179, in exc_logging_wrapper
    status = run_func(*args)
             ^^^^^^^^^^^^^^^
  File "/home/msyriac/.venv/lib/python3.12/site-packages/pip/_internal/cli/req_command.py", line 67, in wrapper
    return func(self, options, args)
           ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/msyriac/.venv/lib/python3.12/site-packages/pip/_internal/commands/install.py", line 377, in run
    requirement_set = resolver.resolve(
                      ^^^^^^^^^^^^^^^^^
  File "/home/msyriac/.venv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/resolver.py", line 76, in resolve
    collected = self.factory.collect_root_requirements(root_reqs)
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/msyriac/.venv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/factory.py", line 538, in collect_root_requirements
    reqs = list(
           ^^^^^
  File "/home/msyriac/.venv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/factory.py", line 494, in _make_requirements_from_install_req
    cand = self._make_base_candidate_from_link(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/msyriac/.venv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/factory.py", line 210, in _make_base_candidate_from_link
    self._editable_candidate_cache[link] = EditableCandidate(
                                           ^^^^^^^^^^^^^^^^^^
  File "/home/msyriac/.venv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/candidates.py", line 328, in __init__
    super().__init__(
  File "/home/msyriac/.venv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/candidates.py", line 158, in __init__
    self.dist = self._prepare()
                ^^^^^^^^^^^^^^^
  File "/home/msyriac/.venv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/candidates.py", line 235, in _prepare
    dist = self._prepare_distribution()
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/msyriac/.venv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/candidates.py", line 338, in _prepare_distribution
    return self._factory.preparer.prepare_editable_requirement(self._ireq)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/msyriac/.venv/lib/python3.12/site-packages/pip/_internal/operations/prepare.py", line 698, in prepare_editable_requirement
    dist = _get_prepared_distribution(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/msyriac/.venv/lib/python3.12/site-packages/pip/_internal/operations/prepare.py", line 72, in _get_prepared_distribution
    abstract_dist.prepare_distribution_metadata(
  File "/home/msyriac/.venv/lib/python3.12/site-packages/pip/_internal/distributions/sdist.py", line 69, in prepare_distribution_metadata
    self.req.prepare_metadata()
  File "/home/msyriac/.venv/lib/python3.12/site-packages/pip/_internal/req/req_install.py", line 566, in prepare_metadata
    and self.supports_pyproject_editable
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/functools.py", line 995, in __get__
    val = self.func(instance)
          ^^^^^^^^^^^^^^^^^^^
  File "/home/msyriac/.venv/lib/python3.12/site-packages/pip/_internal/req/req_install.py", line 257, in supports_pyproject_editable
    return "build_editable" in self.pep517_backend._supported_features()
                               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/msyriac/.venv/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/_impl.py", line 153, in _supported_features
    return self._call_hook('_supported_features', {})
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/msyriac/.venv/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/_impl.py", line 321, in _call_hook
    raise BackendUnavailable(data.get('traceback', ''))
pip._vendor.pyproject_hooks._impl.BackendUnavailable: Traceback (most recent call last):
  File "/home/msyriac/.venv/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 77, in _build_backend
    obj = import_module(mod_path)
          ^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/importlib/__init__.py", line 90, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "<frozen importlib._bootstrap>", line 1387, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1360, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1324, in _find_and_load_unlocked
ModuleNotFoundError: No module named 'mesonpy'

but mesonpy is not pip installable

$ pip install mesonpy
ERROR: Could not find a version that satisfies the requirement mesonpy (from versions: none)
ERROR: No matching distribution found for mesonpy
JBorrow commented 4 months ago

Sorry, I forgot that you need to install the build dependencies separately in that case. I have remedied that in the docs:

pip install --upgrade pip meson ninja meson-python cython numpy

I don't know why pip doesn't do this automatically.

msyriac commented 4 months ago

Ok, that works. This looks good to go to me.

msyriac commented 4 months ago

Very impressed with this new build system! Maybe this was possible before, but I noticed in Github Actions that you can actually download the wheels that would be uploaded to PyPI and test them out on various systems before merging the PR. (e.g. the manylinux py3.12 wheel works on my laptop). We could (optionally) send the mac arm64 wheel to someone with a recent Mac to test it out, before merging this.

How does versioning work with these changes? In the past, PyPI uploads were triggered with new versions.

JBorrow commented 4 months ago

The wheels are tested during build time; they are installed and the test suite is ran using them. That's true for all systems: manylinux, macos-arm, macos-x86.

Versioning works as with the prior system where you must create a git tag and this then leads to a bump in the version. I note that the currently 'bumped' version of 0.25.0 by bumpversion was not used as far as I know; we are still on 0.23.4 as that is the latest git tag.

iparask commented 4 months ago

Hello @JBorrow, this compiles and installs on Della. On Tiger it fails with:

(/scratch/gpfs/ip8725/pixell_test) [ip8725@tigercpu pixell]$ pip install --no-build-isolation --editable .
Obtaining file:///scratch/gpfs/ip8725/git/pixell
  Checking if build backend supports build_editable ... done
  Preparing editable metadata (pyproject.toml) ... error
  error: subprocess-exited-with-error

  × Preparing editable metadata (pyproject.toml) did not run successfully.
  │ exit code: 1
  ╰─> [850 lines of output]
      + meson setup --reconfigure /scratch/gpfs/ip8725/git/pixell /scratch/gpfs/ip8725/git/pixell/build/cp312 -Dbuildtype=release -Db_ndebug=if-release -Db_vscrt=md --native-file=/scratch/gpfs/ip8725/git/pixell/build/cp312/meson-python-native-file.ini
      Cleaning... 0 files.
      The Meson build system
      Version: 1.4.1
      Source dir: /scratch/gpfs/ip8725/git/pixell
      Build dir: /scratch/gpfs/ip8725/git/pixell/build/cp312
      Build type: native build
      Project name: pixell
      Project version: 0.23.14+70.g43e5b1d
      Fortran compiler for the host machine: gfortran (gcc 4.8.5 "GNU Fortran (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44)")
      Fortran linker for the host machine: gfortran ld.bfd 2.27-44
      C compiler for the host machine: cc (gcc 4.8.5 "cc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44)")
      C linker for the host machine: cc ld.bfd 2.27-44
      Cython compiler for the host machine: cython (cython 3.0.10)
      Host machine cpu family: x86_64
      Host machine cpu: x86_64
      Program python found: YES (/scratch/gpfs/ip8725/pixell_test/bin/python3.12)
      Dependency openmp found: YES 3.1 (cached)
      Library m found: YES
      Library m found: YES
      Build targets in project: 16

      pixell 0.23.14+70.g43e5b1d

        User defined options
          Native files: /scratch/gpfs/ip8725/git/pixell/build/cp312/meson-python-native-file.ini
          buildtype   : release
          b_ndebug    : if-release
          b_vscrt     : md

      Found ninja-1.11.1.git.kitware.jobserver-1 at /scratch/gpfs/ip8725/pixell_test/bin/ninja
      + /scratch/gpfs/ip8725/pixell_test/bin/ninja
      [1/35] Compiling C object lib_cmisc_shared.so.p/cython_cmisc_core.c.o
      FAILED: lib_cmisc_shared.so.p/cython_cmisc_core.c.o
      cc -Ilib_cmisc_shared.so.p -I. -I../.. -I../../../../pixell_test/lib/python3.12/site-packages/numpy/_core/include -DNDEBUG -D_FILE_OFFSET_BITS=64 -Wall -Winvalid-pch -O3 -fPIC -fopenmp -MD -MQ lib_cmisc_shared.so.p/cython_cmisc_core.c.o -MF lib_cmisc_shared.so.p/cython_cmisc_core.c.o.d -o lib_cmisc_shared.so.p/cython_cmisc_core.c.o -c ../../cython/cmisc_core.c
      ../../cython/cmisc_core.c: In function ‘alm2cl_sp’:
      ../../cython/cmisc_core.c:23:4: error: ‘for’ loop initial declarations are only allowed in C99 mode
          for(int l = 0; l <= lmax; l++) {
          ^
      ../../cython/cmisc_core.c:23:4: note: use option -std=c99 or -std=gnu99 to compile your code
      ../../cython/cmisc_core.c:29:3: error: ‘for’ loop initial declarations are only allowed in C99 mode
         for(int m = 1; m <= mmax; m++) {
         ^
      ../../cython/cmisc_core.c:29:18: error: expected iteration declaration or initialization before ‘m’
         for(int m = 1; m <= mmax; m++) {
                        ^
      ../../cython/cmisc_core.c:30:4: error: ‘for’ loop initial declarations are only allowed in C99 mode
          for(int l = m; l <= lmax; l++) {
          ^
      ../../cython/cmisc_core.c:37:3: error: ‘for’ loop initial declarations are only allowed in C99 mode
         for(int l = 0; l < nl; l++) {
         ^
      ../../cython/cmisc_core.c:37:18: error: expected iteration declaration or initialization before ‘l’
         for(int l = 0; l < nl; l++) {
                        ^
      ../../cython/cmisc_core.c:39:4: error: ‘for’ loop initial declarations are only allowed in C99 mode
          for(int i = 0; i < nthread; i++)
          ^
      ../../cython/cmisc_core.c: In function ‘alm2cl_dp’:
      ../../cython/cmisc_core.c:55:4: error: ‘for’ loop initial declarations are only allowed in C99 mode
          for(int l = 0; l <= lmax; l++) {
          ^
      ../../cython/cmisc_core.c:61:3: error: ‘for’ loop initial declarations are only allowed in C99 mode
         for(int m = 1; m <= mmax; m++) {
         ^
      ../../cython/cmisc_core.c:61:18: error: expected iteration declaration or initialization before ‘m’
         for(int m = 1; m <= mmax; m++) {
                        ^
      ../../cython/cmisc_core.c:62:4: error: ‘for’ loop initial declarations are only allowed in C99 mode
          for(int l = m; l <= lmax; l++) {
          ^
      ../../cython/cmisc_core.c:69:3: error: ‘for’ loop initial declarations are only allowed in C99 mode
         for(int l = 0; l < nl; l++) {
         ^
      ../../cython/cmisc_core.c:69:18: error: expected iteration declaration or initialization before ‘l’
         for(int l = 0; l < nl; l++) {
                        ^
      ../../cython/cmisc_core.c:71:4: error: ‘for’ loop initial declarations are only allowed in C99 mode
          for(int i = 0; i < nthread; i++)
          ^
      ../../cython/cmisc_core.c: In function ‘transpose_alm_dp’:
      ../../cython/cmisc_core.c:89:2: error: ‘for’ loop initial declarations are only allowed in C99 mode
        for(int im = 0; im <= mmax; im++) {
        ^
      ../../cython/cmisc_core.c:90:3: error: ‘for’ loop initial declarations are only allowed in C99 mode
         for(int il = im; il <= lmax; il++) {
         ^
      ../../cython/cmisc_core.c: In function ‘transpose_alm_sp’:
      ../../cython/cmisc_core.c:110:2: error: ‘for’ loop initial declarations are only allowed in C99 mode
        for(int im = 0; im <= mmax; im++) {
        ^
      ../../cython/cmisc_core.c:111:3: error: ‘for’ loop initial declarations are only allowed in C99 mode
         for(int il = im; il <= lmax; il++) {
         ^
      ../../cython/cmisc_core.c: In function ‘lmul_dp’:
      ../../cython/cmisc_core.c:128:2: error: ‘for’ loop initial declarations are only allowed in C99 mode
        for(int m = 0; m <= mmax; m++) {
        ^
      ../../cython/cmisc_core.c:128:17: error: expected iteration declaration or initialization before ‘m’
        for(int m = 0; m <= mmax; m++) {
                       ^
      ../../cython/cmisc_core.c:129:3: error: ‘for’ loop initial declarations are only allowed in C99 mode
         for(int l = m; l <= lmax; l++) {
         ^
      ../../cython/cmisc_core.c: In function ‘lmul_sp’:
      ../../cython/cmisc_core.c:141:2: error: ‘for’ loop initial declarations are only allowed in C99 mode
        for(int m = 0; m <= mmax; m++) {
        ^
      ../../cython/cmisc_core.c:141:17: error: expected iteration declaration or initialization before ‘m’
        for(int m = 0; m <= mmax; m++) {
                       ^
      ../../cython/cmisc_core.c:142:3: error: ‘for’ loop initial declarations are only allowed in C99 mode
         for(int l = m; l <= lmax; l++) {
         ^
      ../../cython/cmisc_core.c: In function ‘lmatmul_dp’:
      ../../cython/cmisc_core.c:163:3: error: ‘for’ loop initial declarations are only allowed in C99 mode
         for(int m = 0; m <= mmax; m++) {
         ^
      ../../cython/cmisc_core.c:163:18: error: expected iteration declaration or initialization before ‘m’
         for(int m = 0; m <= mmax; m++) {
                        ^
      ../../cython/cmisc_core.c:164:4: error: ‘for’ loop initial declarations are only allowed in C99 mode
          for(int l = m; l <= leff; l++) {
          ^
      ../../cython/cmisc_core.c:167:5: error: ‘for’ loop initial declarations are only allowed in C99 mode
           for(int r = 0; r < N; r++) { vreal[r] = vimag[r] = 0; }
           ^
      ../../cython/cmisc_core.c:169:13: error: redefinition of ‘r’
           for(int r = 0; r < N; r++) {
                   ^
      ../../cython/cmisc_core.c:167:13: note: previous definition of ‘r’ was here
           for(int r = 0; r < N; r++) { vreal[r] = vimag[r] = 0; }
                   ^
      ../../cython/cmisc_core.c:169:5: error: ‘for’ loop initial declarations are only allowed in C99 mode
           for(int r = 0; r < N; r++) {
           ^
      ../../cython/cmisc_core.c:170:6: error: ‘for’ loop initial declarations are only allowed in C99 mode
            for(int c = 0; c < M; c++) {
            ^
      ../../cython/cmisc_core.c:176:13: error: redefinition of ‘r’
           for(int r = 0; r < N; r++) {
                   ^
      ../../cython/cmisc_core.c:169:13: note: previous definition of ‘r’ was here
           for(int r = 0; r < N; r++) {
                   ^
      ../../cython/cmisc_core.c:176:5: error: ‘for’ loop initial declarations are only allowed in C99 mode
           for(int r = 0; r < N; r++) {
           ^
      ../../cython/cmisc_core.c:187:2: error: ‘for’ loop initial declarations are only allowed in C99 mode
        for(int r = 0; r < N; r++) {
        ^
      ../../cython/cmisc_core.c:187:17: error: expected iteration declaration or initialization before ‘r’
        for(int r = 0; r < N; r++) {
                       ^
      ../../cython/cmisc_core.c:188:3: error: ‘for’ loop initial declarations are only allowed in C99 mode
         for(int m = 0; m <= mmax; m++) {
         ^
      ../../cython/cmisc_core.c:189:4: error: ‘for’ loop initial declarations are only allowed in C99 mode
          for(int l = max(m,leff+1); l <= lmax; l++) {
          ^
      ../../cython/cmisc_core.c: In function ‘lmatmul_sp’:
      ../../cython/cmisc_core.c:209:3: error: ‘for’ loop initial declarations are only allowed in C99 mode
         for(int m = 0; m <= mmax; m++) {
         ^
      ../../cython/cmisc_core.c:209:18: error: expected iteration declaration or initialization before ‘m’
         for(int m = 0; m <= mmax; m++) {
                        ^
      ../../cython/cmisc_core.c:210:4: error: ‘for’ loop initial declarations are only allowed in C99 mode
          for(int l = m; l <= lfmax; l++) {
          ^
      ../../cython/cmisc_core.c:213:5: error: ‘for’ loop initial declarations are only allowed in C99 mode
           for(int r = 0; r < N; r++) { vreal[r] = vimag[r] = 0; }
           ^
      ../../cython/cmisc_core.c:215:13: error: redefinition of ‘r’
           for(int r = 0; r < N; r++) {
                   ^
      ../../cython/cmisc_core.c:213:13: note: previous definition of ‘r’ was here
           for(int r = 0; r < N; r++) { vreal[r] = vimag[r] = 0; }
                   ^
      ../../cython/cmisc_core.c:215:5: error: ‘for’ loop initial declarations are only allowed in C99 mode
           for(int r = 0; r < N; r++) {
           ^
      ../../cython/cmisc_core.c:216:6: error: ‘for’ loop initial declarations are only allowed in C99 mode
            for(int c = 0; c < M; c++) {
            ^
      ../../cython/cmisc_core.c:222:13: error: redefinition of ‘r’
           for(int r = 0; r < N; r++) {
                   ^
      ../../cython/cmisc_core.c:215:13: note: previous definition of ‘r’ was here
           for(int r = 0; r < N; r++) {
                   ^
      ../../cython/cmisc_core.c:222:5: error: ‘for’ loop initial declarations are only allowed in C99 mode
           for(int r = 0; r < N; r++) {
           ^
      ../../cython/cmisc_core.c:233:2: error: ‘for’ loop initial declarations are only allowed in C99 mode
        for(int r = 0; r < N; r++) {
        ^
      ../../cython/cmisc_core.c:233:17: error: expected iteration declaration or initialization before ‘r’
        for(int r = 0; r < N; r++) {
                       ^
      ../../cython/cmisc_core.c:234:3: error: ‘for’ loop initial declarations are only allowed in C99 mode
         for(int m = 0; m <= mmax; m++) {
         ^
      ../../cython/cmisc_core.c:235:4: error: ‘for’ loop initial declarations are only allowed in C99 mode
          for(int l = max(m,leff+1); l <= lmax; l++) {
          ^
      ../../cython/cmisc_core.c: In function ‘transfer_alm_dp’:
      ../../cython/cmisc_core.c:249:2: error: ‘for’ loop initial declarations are only allowed in C99 mode
        for(int m = 0; m <= mmax; m++) {
        ^
      ../../cython/cmisc_core.c:249:17: error: expected iteration declaration or initialization before ‘m’
        for(int m = 0; m <= mmax; m++) {
                       ^
      ../../cython/cmisc_core.c:250:3: error: ‘for’ loop initial declarations are only allowed in C99 mode
         for(int l = m; l <= lmax; l++) {
         ^
      ../../cython/cmisc_core.c:247:6: warning: unused variable ‘mmax’ [-Wunused-variable]
        int mmax = min(mmax1,mmax2);
            ^
      ../../cython/cmisc_core.c: In function ‘transfer_alm_sp’:
      ../../cython/cmisc_core.c:263:2: error: ‘for’ loop initial declarations are only allowed in C99 mode
        for(int m = 0; m <= mmax; m++) {
        ^
      ../../cython/cmisc_core.c:263:17: error: expected iteration declaration or initialization before ‘m’
        for(int m = 0; m <= mmax; m++) {
                       ^
      ../../cython/cmisc_core.c:264:3: error: ‘for’ loop initial declarations are only allowed in C99 mode
         for(int l = m; l <= lmax; l++) {
         ^
      ../../cython/cmisc_core.c:261:6: warning: unused variable ‘mmax’ [-Wunused-variable]
        int mmax = min(mmax1,mmax2);
            ^
      [2/35] Compiling C object lib_srcsim_shared.so.p/cython_srcsim_core.c.o
      FAILED: lib_srcsim_shared.so.p/cython_srcsim_core.c.o
      cc -Ilib_srcsim_shared.so.p -I. -I../.. -I../../../../pixell_test/lib/python3.12/site-packages/numpy/_core/include -DNDEBUG -D_FILE_OFFSET_BITS=64 -Wall -Winvalid-pch -O3 -fPIC -fopenmp -MD -MQ lib_srcsim_shared.so.p/cython_srcsim_core.c.o -MF lib_srcsim_shared.so.p/cython_srcsim_core.c.o.d -o lib_srcsim_shared.so.p/cython_srcsim_core.c.o -c ../../cython/srcsim_core.c
      ../../cython/srcsim_core.c: In function ‘sum_map’:
      ../../cython/srcsim_core.c:57:2: error: ‘for’ loop initial declarations are only allowed in C99 mode
        for(int y = 0; y < ny; y++)
        ^
      ../../cython/srcsim_core.c:57:2: note: use option -std=c99 or -std=gnu99 to compile your code
      ../../cython/srcsim_core.c:58:2: error: ‘for’ loop initial declarations are only allowed in C99 mode
        for(int x = 0; x < nx; x++)
        ^
      ../../cython/srcsim_core.c: At top level:
      ../../cython/srcsim_core.c:113:20: error: expected ‘;’, ‘,’ or ‘)’ before ‘amps’
         float * restrict amps,     // [ncomp], e.g. T, Q, U.
                          ^
      ../../cython/srcsim_core.c:125:49: error: expected ‘;’, ‘,’ or ‘)’ before ‘source’
       void merge_cell(int n, int op, float * restrict source, float * restrict target);
                                                       ^
      ../../cython/srcsim_core.c: In function ‘sim_objects’:
      ../../cython/srcsim_core.c:207:4: error: ‘for’ loop initial declarations are only allowed in C99 mode
          for(int ci = 0; ci < ncell; ci++)
          ^
      ../../cython/srcsim_core.c:207:20: error: expected iteration declaration or initialization before ‘ci’
          for(int ci = 0; ci < ncell; ci++)
                          ^
      ../../cython/srcsim_core.c:214:3: error: ‘for’ loop initial declarations are only allowed in C99 mode
         for(int ci = 0; ci < ncell; ci++)
         ^
      ../../cython/srcsim_core.c:214:19: error: expected iteration declaration or initialization before ‘ci’
         for(int ci = 0; ci < ncell; ci++)
                         ^
      ../../cython/srcsim_core.c:222:2: error: ‘for’ loop initial declarations are only allowed in C99 mode
        for(int ci = 0; ci < ncell; ci++) {
        ^
      ../../cython/srcsim_core.c: In function ‘measure_amax’:
      ../../cython/srcsim_core.c:235:2: error: ‘for’ loop initial declarations are only allowed in C99 mode
        for(int i = 0; i < nobj; i++) {
        ^
      ../../cython/srcsim_core.c:235:17: error: expected iteration declaration or initialization before ‘i’
        for(int i = 0; i < nobj; i++) {
                       ^
      ../../cython/srcsim_core.c:237:3: error: ‘for’ loop initial declarations are only allowed in C99 mode
         for(int c = 1; c < ncomp; c++)
         ^
      ../../cython/srcsim_core.c: In function ‘build_prof_info’:
      ../../cython/srcsim_core.c:247:2: error: ‘for’ loop initial declarations are only allowed in C99 mode
        for(int i = 0; i < nprof; i++) {
        ^
      ../../cython/srcsim_core.c:247:17: error: expected iteration declaration or initialization before ‘i’
        for(int i = 0; i < nprof; i++) {
                       ^
      ../../cython/srcsim_core.c:251:3: error: ‘for’ loop initial declarations are only allowed in C99 mode
         for(int ri = 1; ri < prof_ns[i]; ri++) {
         ^
      ../../cython/srcsim_core.c:263:7: error: redefinition of ‘ri’
         int ri = prof_ns[i]-1;
             ^
      ../../cython/srcsim_core.c:251:11: note: previous definition of ‘ri’ was here
         for(int ri = 1; ri < prof_ns[i]; ri++) {
                 ^
      ../../cython/srcsim_core.c:264:3: error: ‘for’ loop initial declarations are only allowed in C99 mode
         for(int li = prof_levels-2; li > 0; li--) {
         ^
      ../../cython/srcsim_core.c: In function ‘measure_rmax’:
      ../../cython/srcsim_core.c:287:2: error: ‘for’ loop initial declarations are only allowed in C99 mode
        for(int oi = 0; oi < nobj; oi++) {
        ^
      ../../cython/srcsim_core.c:287:18: error: expected iteration declaration or initialization before ‘oi’
        for(int oi = 0; oi < nobj; oi++) {
                        ^
      ../../cython/srcsim_core.c: In function ‘assign_cells’:
      ../../cython/srcsim_core.c:352:2: error: ‘for’ loop initial declarations are only allowed in C99 mode
        for(int ci = 0; ci < ncell; ci++)
        ^
      ../../cython/srcsim_core.c:358:2: error: ‘for’ loop initial declarations are only allowed in C99 mode
        for(int oi = 0; oi < nobj; oi++) {
        ^
      ../../cython/srcsim_core.c:358:18: error: expected iteration declaration or initialization before ‘oi’
        for(int oi = 0; oi < nobj; oi++) {
                        ^
      ../../cython/srcsim_core.c:370:2: error: ‘for’ loop initial declarations are only allowed in C99 mode
        for(int oi = 0; oi < nobj; oi++) {
        ^
      ../../cython/srcsim_core.c:374:3: error: ‘for’ loop initial declarations are only allowed in C99 mode
         for(int cy = cy1; cy < cy2; cy++) {
         ^
      ../../cython/srcsim_core.c:376:4: error: ‘for’ loop initial declarations are only allowed in C99 mode
          for(int cx = cx1; cx < cx2; cx++) {
          ^
      ../../cython/srcsim_core.c:386:10: error: redefinition of ‘ci’
        for(int ci = 0; ci < ncell; ci++)
                ^
      ../../cython/srcsim_core.c:352:10: note: previous definition of ‘ci’ was here
        for(int ci = 0; ci < ncell; ci++)
                ^
      ../../cython/srcsim_core.c:386:2: error: ‘for’ loop initial declarations are only allowed in C99 mode
        for(int ci = 0; ci < ncell; ci++)
        ^
      ../../cython/srcsim_core.c:397:2: error: ‘for’ loop initial declarations are only allowed in C99 mode
        for(int ai = 0; ai < nactive; ai++) {
        ^
      ../../cython/srcsim_core.c:411:2: error: ‘for’ loop initial declarations are only allowed in C99 mode
        for(int i = 0; i < inactive->n; i++)
        ^
      ../../cython/srcsim_core.c:413:10: error: redefinition of ‘i’
        for(int i = 0; i < active->n; i++)
                ^
      ../../cython/srcsim_core.c:411:10: note: previous definition of ‘i’ was here
        for(int i = 0; i < inactive->n; i++)
                ^
      ../../cython/srcsim_core.c:413:2: error: ‘for’ loop initial declarations are only allowed in C99 mode
        for(int i = 0; i < active->n; i++)
        ^
      ../../cython/srcsim_core.c: In function ‘process_cell’:
      ../../cython/srcsim_core.c:486:3: error: ‘for’ loop initial declarations are only allowed in C99 mode
         for(int oi = 0; oi < nobj; oi++) {
         ^
      ../../cython/srcsim_core.c:489:4: error: ‘for’ loop initial declarations are only allowed in C99 mode
          for(int ci = 0; ci < ncomp; ci++) amp[ci] = 0;
          ^
      ../../cython/srcsim_core.c:491:4: warning: implicit declaration of function ‘paint_object’ [-Wimplicit-function-declaration]
          paint_object(obj_decs[obj], obj_ras[obj], amp, prof_ns[pid], prof_rs[pid], prof_vs[pid], prof_equi, ncomp, cny, cnx, transpose, cell_decs, cell_ras, cell_data);
          ^
      ../../cython/srcsim_core.c:493:12: error: redefinition of ‘ci’
          for(int ci = 0; ci < ncomp; ci++)
                  ^
      ../../cython/srcsim_core.c:489:12: note: previous definition of ‘ci’ was here
          for(int ci = 0; ci < ncomp; ci++) amp[ci] = 0;
                  ^
      ../../cython/srcsim_core.c:493:4: error: ‘for’ loop initial declarations are only allowed in C99 mode
          for(int ci = 0; ci < ncomp; ci++)
          ^
      ../../cython/srcsim_core.c:497:3: error: ‘for’ loop initial declarations are only allowed in C99 mode
         for(int oi = 0; oi < nobj; oi++) {
         ^
      ../../cython/srcsim_core.c:499:4: error: ‘for’ loop initial declarations are only allowed in C99 mode
          for(int ci = 0; ci < ncomp; ci++)
          ^
      ../../cython/srcsim_core.c:505:4: warning: implicit declaration of function ‘merge_cell’ [-Wimplicit-function-declaration]
          merge_cell(ntot, op, cell_work, cell_data);
          ^
      ../../cython/srcsim_core.c: In function ‘extract_map’:
      ../../cython/srcsim_core.c:523:2: error: ‘for’ loop initial declarations are only allowed in C99 mode
        for(int c = 0; c < ncomp; c++) {
        ^
      ../../cython/srcsim_core.c:526:3: error: ‘for’ loop initial declarations are only allowed in C99 mode
         for(int oy = 0, iy = box[0]; oy < ny; oy++, iy++) {
         ^
      ../../cython/srcsim_core.c:528:4: error: ‘for’ loop initial declarations are only allowed in C99 mode
          for(int ox = 0, ix = box[2]; ox < nx; ox++, ix++) {
          ^
      ../../cython/srcsim_core.c: In function ‘insert_map’:
      ../../cython/srcsim_core.c:542:2: error: ‘for’ loop initial declarations are only allowed in C99 mode
        for(int c = 0; c < ncomp; c++) {
        ^
      ../../cython/srcsim_core.c:545:3: error: ‘for’ loop initial declarations are only allowed in C99 mode
         for(int iy = 0, oy = box[0]; iy < ny; iy++, oy++) {
         ^
      ../../cython/srcsim_core.c:547:4: error: ‘for’ loop initial declarations are only allowed in C99 mode
          for(int ix = 0, ox = box[2]; ix < nx; ix++, ox++) {
          ^
      ../../cython/srcsim_core.c:541:20: warning: unused variable ‘ntot’ [-Wunused-variable]
        int npix = ny*nx, ntot = npix*ncomp;
                          ^
      ../../cython/srcsim_core.c: At top level:
      ../../cython/srcsim_core.c:558:20: error: expected ‘;’, ‘,’ or ‘)’ before ‘amps’
         float * restrict amps,     // [ncomp], e.g. T, Q, U.
                          ^
      ../../cython/srcsim_core.c:584:49: error: expected ‘;’, ‘,’ or ‘)’ before ‘source’
       void merge_cell(int n, int op, float * restrict source, float * restrict target) {
                                                       ^
      ../../cython/srcsim_core.c: In function ‘estimate_bounding_box’:
      ../../cython/srcsim_core.c:710:2: error: ‘for’ loop initial declarations are only allowed in C99 mode
        for(int oy = -1; oy <= 1; oy += 2)
        ^
      ../../cython/srcsim_core.c:711:2: error: ‘for’ loop initial declarations are only allowed in C99 mode
        for(int ox = -1; ox <= 1; ox += 2) {
        ^
      ../../cython/srcsim_core.c: In function ‘calloc_pppf’:
      ../../cython/srcsim_core.c:749:2: error: ‘for’ loop initial declarations are only allowed in C99 mode
        for(int i1 = 0; i1 < n1; i1++) {
        ^
      ../../cython/srcsim_core.c:751:3: error: ‘for’ loop initial declarations are only allowed in C99 mode
         for(int i2 = 0; i2 < n2; i2++)
         ^
      ../../cython/srcsim_core.c: In function ‘free_pppf’:
      ../../cython/srcsim_core.c:758:2: error: ‘for’ loop initial declarations are only allowed in C99 mode
        for(int i1 = 0; i1 < n1; i1++) {
        ^
      ../../cython/srcsim_core.c:760:3: error: ‘for’ loop initial declarations are only allowed in C99 mode
         for(int i2 = 0; i2 < n2; i2++)
         ^
      ../../cython/srcsim_core.c: In function ‘reduce_amps’:
      ../../cython/srcsim_core.c:768:2: error: ‘for’ loop initial declarations are only allowed in C99 mode
        for(int w = 0; w < nwork; w++) {
        ^
      ../../cython/srcsim_core.c:769:3: error: ‘for’ loop initial declarations are only allowed in C99 mode
         for(int c = 0; c < ncomp; c++) {
         ^
      ../../cython/srcsim_core.c:770:4: error: ‘for’ loop initial declarations are only allowed in C99 mode
          for(int o = 0; o < nobj; o++)
          ^
      ../../cython/srcsim_core.c: In function ‘radial_sum’:
      ../../cython/srcsim_core.c:808:2: error: ‘for’ loop initial declarations are only allowed in C99 mode
        for(int oi = 0; oi < nobj; oi++) {
        ^
      ../../cython/srcsim_core.c:808:18: error: expected iteration declaration or initialization before ‘oi’
        for(int oi = 0; oi < nobj; oi++) {
                        ^
      ../../cython/srcsim_core.c:813:3: error: ‘for’ loop initial declarations are only allowed in C99 mode
         for(int y_ = pixbox[0]; y_ < pixbox[1]; y_++) {
         ^
      ../../cython/srcsim_core.c:816:4: error: ‘for’ loop initial declarations are only allowed in C99 mode
          for(int x_ = pixbox[2]; x_ < pixbox[3]; x_++) {
          ^
      ../../cython/srcsim_core.c:824:5: error: ‘for’ loop initial declarations are only allowed in C99 mode
           for(int ci = 0; ci < ncomp; ci++)
           ^
      [3/35] Compiling C object lib_distances_shared.so.p/cython_distances_core.c.o
      FAILED: lib_distances_shared.so.p/cython_distances_core.c.o
      cc -Ilib_distances_shared.so.p -I. -I../.. -I../../../../pixell_test/lib/python3.12/site-packages/numpy/_core/include -DNDEBUG -D_FILE_OFFSET_BITS=64 -Wall -Winvalid-pch -O3 -fPIC -fopenmp -MD -MQ lib_distances_shared.so.p/cython_distances_core.c.o -MF lib_distances_shared.so.p/cython_distances_core.c.o.d -o lib_distances_shared.so.p/cython_distances_core.c.o -c ../../cython/distances_core.c
      ../../cython/distances_core.c: In function ‘distance_from_points_simple’:
      ../../cython/distances_core.c:56:2: error: ‘for’ loop initial declarations are only allowed in C99 mode
        for(inum j = 0; j < npoint; j++) {
        ^
      ../../cython/distances_core.c:56:2: note: use option -std=c99 or -std=gnu99 to compile your code
      ../../cython/distances_core.c:61:2: error: ‘for’ loop initial declarations are only allowed in C99 mode
        for(inum i = 0; i < npix; i++) {
        ^
      ../../cython/distances_core.c:66:3: error: ‘for’ loop initial declarations are only allowed in C99 mode
         for(inum j = 0; j < npoint; j++) {
         ^
      ../../cython/distances_core.c: In function ‘distance_from_points_simple_separable’:
      ../../cython/distances_core.c:96:2: error: ‘for’ loop initial declarations are only allowed in C99 mode
        for(inum j = 0; j < npoint; j++) {
        ^
      ../../cython/distances_core.c:103:2: error: ‘for’ loop initial declarations are only allowed in C99 mode
        for(inum y = 0; y < ny; y++) {
        ^
      ../../cython/distances_core.c:103:18: error: expected iteration declaration or initialization before ‘y’
        for(inum y = 0; y < ny; y++) {
                        ^
      ../../cython/distances_core.c:107:3: error: ‘for’ loop initial declarations are only allowed in C99 mode
         for(inum x = 0; x < nx; x++) {
         ^
      ../../cython/distances_core.c:110:4: error: ‘for’ loop initial declarations are only allowed in C99 mode
          for(inum j = 0; j < npoint; j++) {
          ^
      ../../cython/distances_core.c: In function ‘distance_from_points_bubble’:
      ../../cython/distances_core.c:187:2: error: ‘for’ loop initial declarations are only allowed in C99 mode
        for(inum i = 0; i < ny*nx; i++) {
        ^
      ../../cython/distances_core.c:195:2: error: ‘for’ loop initial declarations are only allowed in C99 mode
        for(inum j = 0; j < npoint; j++) {
        ^
      ../../cython/distances_core.c:205:11: error: redefinition of ‘i’
        for(inum i = 0; i < npoint; i++) {
                 ^
      ../../cython/distances_core.c:187:11: note: previous definition of ‘i’ was here
        for(inum i = 0; i < ny*nx; i++) {
                 ^
      ../../cython/distances_core.c:205:2: error: ‘for’ loop initial declarations are only allowed in C99 mode
        for(inum i = 0; i < npoint; i++) {
        ^
      ../../cython/distances_core.c:218:3: error: ‘for’ loop initial declarations are only allowed in C99 mode
         for(inum i = 0; i < curr->n; i++) {
         ^
      ../../cython/distances_core.c:222:4: error: ‘for’ loop initial declarations are only allowed in C99 mode
          for(int oi = 0; oi < nneigh; oi++) {
          ^
      ../../cython/distances_core.c: In function ‘distance_from_points_bubble_separable’:
      ../../cython/distances_core.c:265:2: error: ‘for’ loop initial declarations are only allowed in C99 mode
        for(inum i = 0; i < ny*nx; i++) {
        ^
      ../../cython/distances_core.c:274:2: error: ‘for’ loop initial declarations are only allowed in C99 mode
        for(inum j = 0; j < npoint; j++) {
        ^
      ../../cython/distances_core.c:281:2: error: ‘for’ loop initial declarations are only allowed in C99 mode
        for(int y = 0; y < ny; y++) {
        ^
      ../../cython/distances_core.c:290:11: error: redefinition of ‘i’
        for(inum i = 0; i < npoint; i++) {
                 ^
      ../../cython/distances_core.c:265:11: note: previous definition of ‘i’ was here
        for(inum i = 0; i < ny*nx; i++) {
                 ^
      ../../cython/distances_core.c:290:2: error: ‘for’ loop initial declarations are only allowed in C99 mode
        for(inum i = 0; i < npoint; i++) {
        ^
      ../../cython/distances_core.c:302:3: error: ‘for’ loop initial declarations are only allowed in C99 mode
         for(inum i = 0; i < curr->n; i++) {
         ^
      ../../cython/distances_core.c:306:4: error: ‘for’ loop initial declarations are only allowed in C99 mode
          for(int oi = 0; oi < nneigh; oi++) {
          ^
      ../../cython/distances_core.c: In function ‘copy_block_double’:
      ../../cython/distances_core.c:396:2: error: ‘for’ loop initial declarations are only allowed in C99 mode
        for(int yi = 0; yi < lny; yi++) {\
        ^
      ../../cython/distances_core.c:410:1: note: in expansion of macro ‘make_copy_block’
       make_copy_block(double);
       ^
      ../../cython/distances_core.c:399:3: error: ‘for’ loop initial declarations are only allowed in C99 mode
         for(int xi = 0; xi < lnx; xi++) {\
         ^
      ../../cython/distances_core.c:410:1: note: in expansion of macro ‘make_copy_block’
       make_copy_block(double);
       ^
      ../../cython/distances_core.c: In function ‘copy_block_int’:
      ../../cython/distances_core.c:396:2: error: ‘for’ loop initial declarations are only allowed in C99 mode
        for(int yi = 0; yi < lny; yi++) {\
        ^
      ../../cython/distances_core.c:411:1: note: in expansion of macro ‘make_copy_block’
       make_copy_block(int);
       ^
      ../../cython/distances_core.c:399:3: error: ‘for’ loop initial declarations are only allowed in C99 mode
         for(int xi = 0; xi < lnx; xi++) {\
         ^
      ../../cython/distances_core.c:411:1: note: in expansion of macro ‘make_copy_block’
       make_copy_block(int);
       ^
      ../../cython/distances_core.c: In function ‘allocate_cell’:
      ../../cython/distances_core.c:427:2: error: ‘for’ loop initial declarations are only allowed in C99 mode
        for(int i = 0; i < n; i++)
        ^
      ../../cython/distances_core.c:430:13: error: conflicting types for ‘i’
        for(size_t i = 0; i < n; i++) c->domains[i] = -1;
                   ^
      ../../cython/distances_core.c:427:10: note: previous definition of ‘i’ was here
        for(int i = 0; i < n; i++)
                ^
      ../../cython/distances_core.c:430:2: error: ‘for’ loop initial declarations are only allowed in C99 mode
        for(size_t i = 0; i < n; i++) c->domains[i] = -1;
        ^
      ../../cython/distances_core.c: In function ‘fill_cell’:
      ../../cython/distances_core.c:453:2: error: ‘for’ loop initial declarations are only allowed in C99 mode
        for(size_t i = 0; i < yposlen; i++) {
        ^
      ../../cython/distances_core.c: In function ‘cell_solve_until’:
      ../../cython/distances_core.c:492:3: error: ‘for’ loop initial declarations are only allowed in C99 mode
         for(int i = 0; i < curr->n; i++) {
         ^
      ../../cython/distances_core.c:499:11: error: redefinition of ‘i’
         for(int i = 0; i < curr->n; i++) {
                 ^
      ../../cython/distances_core.c:492:11: note: previous definition of ‘i’ was here
         for(int i = 0; i < curr->n; i++) {
                 ^
      ../../cython/distances_core.c:499:3: error: ‘for’ loop initial declarations are only allowed in C99 mode
         for(int i = 0; i < curr->n; i++) {
         ^
      ../../cython/distances_core.c:503:4: error: ‘for’ loop initial declarations are only allowed in C99 mode
          for(int oi = 0; oi < nneigh; oi++) {
          ^
      ../../cython/distances_core.c: In function ‘find_relevant_cells’:
      ../../cython/distances_core.c:548:2: error: ‘for’ loop initial declarations are only allowed in C99 mode
        for(int i = 0; i < current_cells->n; i++) {
        ^
      ../../cython/distances_core.c:554:3: error: ‘for’ loop initial declarations are only allowed in C99 mode
         for(int dir = 0; dir < 4; dir++) {
         ^
      ../../cython/distances_core.c:566:2: warning: passing argument 4 of ‘qsort’ from incompatible pointer type [enabled by default]
        qsort(cands->y, cands->n, sizeof(int), compar_int);
        ^
      In file included from ../../cython/distances_core.c:3:0:
      /usr/include/stdlib.h:760:13: note: expected ‘__compar_fn_t’ but argument is of type ‘int (*)(int *, int *)’
       extern void qsort (void *__base, size_t __nmemb, size_t __size,
                   ^
      ../../cython/distances_core.c:567:10: error: redefinition of ‘i’
        for(int i = 0; i < cands->n; i++)
                ^
      ../../cython/distances_core.c:548:10: note: previous definition of ‘i’ was here
        for(int i = 0; i < current_cells->n; i++) {
                ^
      ../../cython/distances_core.c:567:2: error: ‘for’ loop initial declarations are only allowed in C99 mode
        for(int i = 0; i < cands->n; i++)
        ^
      ../../cython/distances_core.c:574:2: error: ‘for’ loop initial declarations are only allowed in C99 mode
        for(int i = 0; i < ucands->n; i++) {
        ^
      ../../cython/distances_core.c:574:17: error: expected iteration declaration or initialization before ‘i’
        for(int i = 0; i < ucands->n; i++) {
                       ^
      ../../cython/distances_core.c:585:10: error: redefinition of ‘i’
        for(int i = 0; i < ucands->n; i++) {
                ^
      ../../cython/distances_core.c:567:10: note: previous definition of ‘i’ was here
        for(int i = 0; i < cands->n; i++)
                ^
      ../../cython/distances_core.c:585:2: error: ‘for’ loop initial declarations are only allowed in C99 mode
        for(int i = 0; i < ucands->n; i++) {
        ^
      ../../cython/distances_core.c: In function ‘fetch_edge’:
      ../../cython/distances_core.c:623:2: error: ‘for’ loop initial declarations are only allowed in C99 mode
        for(int i = 0; i < n; i++) {
        ^
      ../../cython/distances_core.c:603:6: warning: unused variable ‘fnmax’ [-Wunused-variable]
        int fnmax = cfrom->ny*cfrom->nx;
            ^
      ../../cython/distances_core.c:602:6: warning: unused variable ‘tnmax’ [-Wunused-variable]
        int tnmax = cto->ny*cto->nx;
            ^
      ../../cython/distances_core.c: In function ‘distance_from_points_cellgrid’:
      ../../cython/distances_core.c:646:2: error: ‘for’ loop initial declarations are only allowed in C99 mode
        for(inum i = 0; i < ny*nx; i++) {
        ^
      ../../cython/distances_core.c:654:2: error: ‘for’ loop initial declarations are only allowed in C99 mode
        for(inum j = 0; j < npoint; j++) {
        ^
      ../../cython/distances_core.c:672:11: error: redefinition of ‘i’
        for(inum i = 0; i < npoint; i++) {
                 ^
      ../../cython/distances_core.c:646:11: note: previous definition of ‘i’ was here
        for(inum i = 0; i < ny*nx; i++) {
                 ^
      ../../cython/distances_core.c:672:2: error: ‘for’ loop initial declarations are only allowed in C99 mode
        for(inum i = 0; i < npoint; i++) {
        ^
      ../../cython/distances_core.c:690:2: error: ‘for’ loop initial declarations are only allowed in C99 mode
        for(int i = 0; i < current_cells->n; i++) {
        ^
      ../../cython/distances_core.c:690:17: error: expected iteration declaration or initialization before ‘i’
        for(int i = 0; i < current_cells->n; i++) {
                       ^
      ../../cython/distances_core.c:704:3: error: ‘for’ loop initial declarations are only allowed in C99 mode
         for(int i = 0; i < current_cells->n; i++) {
         ^
      ../../cython/distances_core.c:704:18: error: expected iteration declaration or initialization before ‘i’
         for(int i = 0; i < current_cells->n; i++) {
                        ^
      ../../cython/distances_core.c:717:3: error: ‘for’ loop initial declarations are only allowed in C99 mode
         for(int dir = 0; dir < 4; dir++) {
         ^
      ../../cython/distances_core.c:720:4: error: ‘for’ loop initial declarations are only allowed in C99 mode
          for(int i = 0; i < ucands->n; i++) {
          ^
      ../../cython/distances_core.c:720:19: error: expected iteration declaration or initialization before ‘i’
          for(int i = 0; i < ucands->n; i++) {
                         ^
      ../../cython/distances_core.c:734:3: error: ‘for’ loop initial declarations are only allowed in C99 mode
         for(int i = 0; i < ucands->n; i++) {
         ^
      ../../cython/distances_core.c:734:18: error: expected iteration declaration or initialization before ‘i’
         for(int i = 0; i < ucands->n; i++) {
                        ^
      ../../cython/distances_core.c:737:4: error: ‘for’ loop initial declarations are only allowed in C99 mode
          for(int j = 0; j < c->current->n; j++) {
          ^
      ../../cython/distances_core.c:745:4: error: ‘for’ loop initial declarations are only allowed in C99 mode
          for(int pix = 0; pix < c->ny*c->nx; pix++)
          ^
      ../../cython/distances_core.c:752:3: error: ‘for’ loop initial declarations are only allowed in C99 mode
         for(int i = 0; i < ucands->n; i++) {
         ^
      ../../cython/distances_core.c:772:10: error: conflicting types for ‘i’
        for(int i = 0; i < grid.ncell; i++)
                ^
      ../../cython/distances_core.c:672:11: note: previous definition of ‘i’ was here
        for(inum i = 0; i < npoint; i++) {
                 ^
      ../../cython/distances_core.c:772:2: error: ‘for’ loop initial declarations are only allowed in C99 mode
        for(int i = 0; i < grid.ncell; i++)
        ^
      ../../cython/distances_core.c: In function ‘build_healpix_info’:
      ../../cython/distances_core.c:799:2: error: ‘for’ loop initial declarations are only allowed in C99 mode
        for(int y = 0; y < nside; y++) {
        ^
      ../../cython/distances_core.c:809:10: error: redefinition of ‘y’
        for(int y = nside; y < 3*nside-1; y++) {
                ^
      ../../cython/distances_core.c:799:10: note: previous definition of ‘y’ was here
        for(int y = 0; y < nside; y++) {
                ^
      ../../cython/distances_core.c:809:2: error: ‘for’ loop initial declarations are only allowed in C99 mode
        for(int y = nside; y < 3*nside-1; y++) {
        ^
      ../../cython/distances_core.c:819:10: error: redefinition of ‘y’
        for(int y = 3*nside-1; y < 4*nside-1; y++) {
                ^
      ../../cython/distances_core.c:809:10: note: previous definition of ‘y’ was here
        for(int y = nside; y < 3*nside-1; y++) {
                ^
      ../../cython/distances_core.c:819:2: error: ‘for’ loop initial declarations are only allowed in C99 mode
        for(int y = 3*nside-1; y < 4*nside-1; y++) {
        ^
      ../../cython/distances_core.c: In function ‘get_healpix_neighs’:
      ../../cython/distances_core.c:990:2: error: ‘for’ loop initial declarations are only allowed in C99 mode
        for(int i = 0; i < nneigh_hp; i++) {
        ^
      ../../cython/distances_core.c: In function ‘distance_from_points_bubble_healpix’:
      ../../cython/distances_core.c:1010:2: error: ‘for’ loop initial declarations are only allowed in C99 mode
        for(inum j = 0; j < npoint; j++) {
        ^
      ../../cython/distances_core.c:1020:2: error: ‘for’ loop initial declarations are only allowed in C99 mode
        for(inum i = 0; i < geo->npix; i++) {
        ^
      ../../cython/distances_core.c:1029:11: error: redefinition of ‘i’
        for(inum i = 0; i < npoint; i++) {
                 ^
      ../../cython/distances_core.c:1020:11: note: previous definition of ‘i’ was here
        for(inum i = 0; i < geo->npix; i++) {
                 ^
      ../../cython/distances_core.c:1029:2: error: ‘for’ loop initial declarations are only allowed in C99 mode
        for(inum i = 0; i < npoint; i++) {
        ^
      ../../cython/distances_core.c:1044:3: error: ‘for’ loop initial declarations are only allowed in C99 mode
         for(inum i = 0; i < curr->n; i++) {
         ^
      ../../cython/distances_core.c:1050:4: error: ‘for’ loop initial declarations are only allowed in C99 mode
          for(int oi = 0; oi < nneigh_hp; oi++) {
          ^
      ../../cython/distances_core.c: In function ‘distance_from_points_heap_healpix’:
      ../../cython/distances_core.c:1146:2: error: ‘for’ loop initial declarations are only allowed in C99 mode
        for(inum j = 0; j < npoint; j++) {
        ^
      ../../cython/distances_core.c:1156:2: error: ‘for’ loop initial declarations are only allowed in C99 mode
        for(inum i = 0; i < geo->npix; i++) {
        ^
      ../../cython/distances_core.c:1164:11: error: redefinition of ‘i’
        for(inum i = 0; i < npoint; i++) {
                 ^
      ../../cython/distances_core.c:1156:11: note: previous definition of ‘i’ was here
        for(inum i = 0; i < geo->npix; i++) {
                 ^
      ../../cython/distances_core.c:1164:2: error: ‘for’ loop initial declarations are only allowed in C99 mode
        for(inum i = 0; i < npoint; i++) {
        ^
      ../../cython/distances_core.c:1184:3: error: ‘for’ loop initial declarations are only allowed in C99 mode
         for(int oi = 0; oi < nneigh_hp; oi++) {
         ^
      ../../cython/distances_core.c: In function ‘find_edges_healpix’:
      ../../cython/distances_core.c:1263:2: error: ‘for’ loop initial declarations are only allowed in C99 mode
        for(int y = 0; y < geo->ny; y++) {
        ^
      ../../cython/distances_core.c:1264:3: error: ‘for’ loop initial declarations are only allowed in C99 mode
         for(int x = 0; x < geo->nx[y]; x++) {
         ^
      ../../cython/distances_core.c:1268:4: error: ‘for’ loop initial declarations are only allowed in C99 mode
          for(int j = 0; j < nneigh_hp; j++) {
          ^
      ../../cython/distances_core.c: In function ‘find_edges_labeled_healpix’:
      ../../cython/distances_core.c:1295:2: error: ‘for’ loop initial declarations are only allowed in C99 mode
        for(int y = 0; y < geo->ny; y++) {
        ^
      ../../cython/distances_core.c:1296:3: error: ‘for’ loop initial declarations are only allowed in C99 mode
         for(int x = 0; x < geo->nx[y]; x++) {
         ^
      ../../cython/distances_core.c:1300:4: error: ‘for’ loop initial declarations are only allowed in C99 mode
          for(int j = 0; j < nneigh_hp; j++) {
          ^
      ../../cython/distances_core.c: In function ‘ravel_healpix’:
      ../../cython/distances_core.c:1351:2: error: ‘for’ loop initial declarations are only allowed in C99 mode
        for(inum i = 0; i < npoint; i++)
        ^
      ../../cython/distances_core.c:1351:18: error: expected iteration declaration or initialization before ‘i’
        for(inum i = 0; i < npoint; i++)
                        ^
      ../../cython/distances_core.c: In function ‘unravel_healpix’:
      ../../cython/distances_core.c:1360:2: error: ‘for’ loop initial declarations are only allowed in C99 mode
        for(inum i = 0; i < npoint; i++) {
        ^
      ../../cython/distances_core.c:1360:18: error: expected iteration declaration or initialization before ‘i’
        for(inum i = 0; i < npoint; i++) {
                        ^
      [4/35] Module scanner.
      [5/35] Module scanner.
      [6/35] Module scanner.
      [7/35] Module scanner.
      [8/35] Module scanner.
      [9/35] Compiling C object srcsim.cpython-312-x86_64-linux-gnu.so.p/meson-generated_cython_srcsim.pyx.c.o
      FAILED: srcsim.cpython-312-x86_64-linux-gnu.so.p/meson-generated_cython_srcsim.pyx.c.o
      cc -Isrcsim.cpython-312-x86_64-linux-gnu.so.p -I. -I../.. -I../../cython -I../../../../pixell_test/lib/python3.12/site-packages/numpy/_core/include -I/scratch/gpfs/ip8725/pixell_test/include/python3.12 -fvisibility=hidden -DNDEBUG -D_FILE_OFFSET_BITS=64 -Wall -Winvalid-pch -O3 -fPIC -fopenmp -MD -MQ srcsim.cpython-312-x86_64-linux-gnu.so.p/meson-generated_cython_srcsim.pyx.c.o -MF srcsim.cpython-312-x86_64-linux-gnu.so.p/meson-generated_cython_srcsim.pyx.c.o.d -o srcsim.cpython-312-x86_64-linux-gnu.so.p/meson-generated_cython_srcsim.pyx.c.o -c srcsim.cpython-312-x86_64-linux-gnu.so.p/cython/srcsim.pyx.c
      In file included from ../../../../pixell_test/lib/python3.12/site-packages/numpy/_core/include/numpy/ndarraytypes.h:1909:0,
                       from ../../../../pixell_test/lib/python3.12/site-packages/numpy/_core/include/numpy/ndarrayobject.h:12,
                       from ../../../../pixell_test/lib/python3.12/site-packages/numpy/_core/include/numpy/arrayobject.h:5,
                       from srcsim.cpython-312-x86_64-linux-gnu.so.p/cython/srcsim.pyx.c:1227:
      ../../../../pixell_test/lib/python3.12/site-packages/numpy/_core/include/numpy/npy_1_7_deprecated_api.h:17:2: warning: #warning "Using deprecated NumPy API, disable it with " "#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION" [-Wcpp]
       #warning "Using deprecated NumPy API, disable it with " \
        ^
      In file included from srcsim.cpython-312-x86_64-linux-gnu.so.p/cython/srcsim.pyx.c:30237:0:
      /scratch/gpfs/ip8725/pixell_test/include/python3.12/internal/pycore_frame.h: In function ‘_PyFrame_Initialize’:
      /scratch/gpfs/ip8725/pixell_test/include/python3.12/internal/pycore_frame.h:134:5: error: ‘for’ loop initial declarations are only allowed in C99 mode
           for (int i = null_locals_from; i < code->co_nlocalsplus; i++) {
           ^
      /scratch/gpfs/ip8725/pixell_test/include/python3.12/internal/pycore_frame.h:134:5: note: use option -std=c99 or -std=gnu99 to compile your code
      [10/35] Compiling C object cmisc.cpython-312-x86_64-linux-gnu.so.p/meson-generated_cython_cmisc.pyx.c.o
      FAILED: cmisc.cpython-312-x86_64-linux-gnu.so.p/meson-generated_cython_cmisc.pyx.c.o
      cc -Icmisc.cpython-312-x86_64-linux-gnu.so.p -I. -I../.. -I../../cython -I../../../../pixell_test/lib/python3.12/site-packages/numpy/_core/include -I/scratch/gpfs/ip8725/pixell_test/include/python3.12 -fvisibility=hidden -DNDEBUG -D_FILE_OFFSET_BITS=64 -Wall -Winvalid-pch -O3 -fPIC -fopenmp -MD -MQ cmisc.cpython-312-x86_64-linux-gnu.so.p/meson-generated_cython_cmisc.pyx.c.o -MF cmisc.cpython-312-x86_64-linux-gnu.so.p/meson-generated_cython_cmisc.pyx.c.o.d -o cmisc.cpython-312-x86_64-linux-gnu.so.p/meson-generated_cython_cmisc.pyx.c.o -c cmisc.cpython-312-x86_64-linux-gnu.so.p/cython/cmisc.pyx.c
      In file included from ../../../../pixell_test/lib/python3.12/site-packages/numpy/_core/include/numpy/ndarraytypes.h:1909:0,
                       from ../../../../pixell_test/lib/python3.12/site-packages/numpy/_core/include/numpy/ndarrayobject.h:12,
                       from ../../../../pixell_test/lib/python3.12/site-packages/numpy/_core/include/numpy/arrayobject.h:5,
                       from cmisc.cpython-312-x86_64-linux-gnu.so.p/cython/cmisc.pyx.c:1229:
      ../../../../pixell_test/lib/python3.12/site-packages/numpy/_core/include/numpy/npy_1_7_deprecated_api.h:17:2: warning: #warning "Using deprecated NumPy API, disable it with " "#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION" [-Wcpp]
       #warning "Using deprecated NumPy API, disable it with " \
        ^
      In file included from cmisc.cpython-312-x86_64-linux-gnu.so.p/cython/cmisc.pyx.c:36425:0:
      /scratch/gpfs/ip8725/pixell_test/include/python3.12/internal/pycore_frame.h: In function ‘_PyFrame_Initialize’:
      /scratch/gpfs/ip8725/pixell_test/include/python3.12/internal/pycore_frame.h:134:5: error: ‘for’ loop initial declarations are only allowed in C99 mode
           for (int i = null_locals_from; i < code->co_nlocalsplus; i++) {
           ^
      /scratch/gpfs/ip8725/pixell_test/include/python3.12/internal/pycore_frame.h:134:5: note: use option -std=c99 or -std=gnu99 to compile your code
      [11/35] Compiling C object distances.cpython-312-x86_64-linux-gnu.so.p/meson-generated_cython_distances.pyx.c.o
      FAILED: distances.cpython-312-x86_64-linux-gnu.so.p/meson-generated_cython_distances.pyx.c.o
      cc -Idistances.cpython-312-x86_64-linux-gnu.so.p -I. -I../.. -I../../cython -I../../../../pixell_test/lib/python3.12/site-packages/numpy/_core/include -I/scratch/gpfs/ip8725/pixell_test/include/python3.12 -fvisibility=hidden -DNDEBUG -D_FILE_OFFSET_BITS=64 -Wall -Winvalid-pch -O3 -fPIC -fopenmp -MD -MQ distances.cpython-312-x86_64-linux-gnu.so.p/meson-generated_cython_distances.pyx.c.o -MF distances.cpython-312-x86_64-linux-gnu.so.p/meson-generated_cython_distances.pyx.c.o.d -o distances.cpython-312-x86_64-linux-gnu.so.p/meson-generated_cython_distances.pyx.c.o -c distances.cpython-312-x86_64-linux-gnu.so.p/cython/distances.pyx.c
      In file included from ../../../../pixell_test/lib/python3.12/site-packages/numpy/_core/include/numpy/ndarraytypes.h:1909:0,
                       from ../../../../pixell_test/lib/python3.12/site-packages/numpy/_core/include/numpy/ndarrayobject.h:12,
                       from ../../../../pixell_test/lib/python3.12/site-packages/numpy/_core/include/numpy/arrayobject.h:5,
                       from distances.cpython-312-x86_64-linux-gnu.so.p/cython/distances.pyx.c:1227:
      ../../../../pixell_test/lib/python3.12/site-packages/numpy/_core/include/numpy/npy_1_7_deprecated_api.h:17:2: warning: #warning "Using deprecated NumPy API, disable it with " "#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION" [-Wcpp]
       #warning "Using deprecated NumPy API, disable it with " \
        ^
      In file included from distances.cpython-312-x86_64-linux-gnu.so.p/cython/distances.pyx.c:44192:0:
      /scratch/gpfs/ip8725/pixell_test/include/python3.12/internal/pycore_frame.h: In function ‘_PyFrame_Initialize’:
      /scratch/gpfs/ip8725/pixell_test/include/python3.12/internal/pycore_frame.h:134:5: error: ‘for’ loop initial declarations are only allowed in C99 mode
           for (int i = null_locals_from; i < code->co_nlocalsplus; i++) {
           ^
      /scratch/gpfs/ip8725/pixell_test/include/python3.12/internal/pycore_frame.h:134:5: note: use option -std=c99 or -std=gnu99 to compile your code
      ninja: build stopped: subcommand failed.
      [end of output]

  note: This error originates from a subprocess, and is likely not a problem with pip.
error: metadata-generation-failed

× Encountered error while generating package metadata.
╰─> See above for output.

note: This is an issue with the package mentioned above, not pip.
hint: See above for details.

and on my MacBook pro with the latest MacOS (14.5) with:

(pixell_meson) ip8725@RCO-VWVY2NNQLM:~/git/pixell$ pip install --no-build-isolation --editable .
Obtaining file:///Users/ip8725/git/pixell
  Checking if build backend supports build_editable ... done
  Preparing editable metadata (pyproject.toml) ... error
  error: subprocess-exited-with-error

  × Preparing editable metadata (pyproject.toml) did not run successfully.
  │ exit code: 1
  ╰─> [24 lines of output]
      + meson setup /Users/ip8725/git/pixell /Users/ip8725/git/pixell/build/cp312 -Dbuildtype=release -Db_ndebug=if-release -Db_vscrt=md --native-file=/Users/ip8725/git/pixell/build/cp312/meson-python-native-file.ini
      The Meson build system
      Version: 1.4.1
      Source dir: /Users/ip8725/git/pixell
      Build dir: /Users/ip8725/git/pixell/build/cp312
      Build type: native build
      Project name: pixell
      Project version: 0.23.14+70.g43e5b1d
      Fortran compiler for the host machine: gfortran (gcc 13.2.0 "GNU Fortran (Homebrew GCC 13.2.0) 13.2.0")
      Fortran linker for the host machine: gfortran ld64 1053.12
      C compiler for the host machine: cc (clang 15.0.0 "Apple clang version 15.0.0 (clang-1500.3.9.4)")
      C linker for the host machine: cc ld64 1053.12
      Cython compiler for the host machine: cython (cython 3.0.10)
      Host machine cpu family: aarch64
      Host machine cpu: aarch64
      Program python found: YES (/Users/ip8725/anaconda3/envs/pixell_meson/bin/python3.12)
      Did not find pkg-config by name 'pkg-config'
      Found pkg-config: NO
      Run-time dependency python found: YES 3.12
      Run-time dependency OpenMP found: NO (tried system)

      ../../meson.build:22:10: ERROR: Dependency "openmp" not found, tried system

      A full log can be found at /Users/ip8725/git/pixell/build/cp312/meson-logs/meson-log.txt
      [end of output]

  note: This error originates from a subprocess, and is likely not a problem with pip.
error: metadata-generation-failed

× Encountered error while generating package metadata.
╰─> See above for output.

note: This is an issue with the package mentioned above, not pip.
hint: See above for details.

I'll try to see what is going on on Tiger and get back to you. For my laptop it might be a bit more complicated as OpenMP is not supported I think at all.

iparask commented 4 months ago

Based on @JBorrow suggestion to use Homebrew compilers on Mac:

(pixell_meson) ip8725@RCO-VWVY2NNQLM:~/git/pixell$ pip install --no-build-isolation --editable .
Obtaining file:///Users/ip8725/git/pixell
  Checking if build backend supports build_editable ... done
  Preparing editable metadata (pyproject.toml) ... error
  error: subprocess-exited-with-error

  × Preparing editable metadata (pyproject.toml) did not run successfully.
  │ exit code: 1
  ╰─> [461 lines of output]
      + meson setup /Users/ip8725/git/pixell /Users/ip8725/git/pixell/build/cp312 -Dbuildtype=release -Db_ndebug=if-release -Db_vscrt=md --native-file=/Users/ip8725/git/pixell/build/cp312/meson-python-native-file.ini
      The Meson build system
      Version: 1.4.1
      Source dir: /Users/ip8725/git/pixell
      Build dir: /Users/ip8725/git/pixell/build/cp312
      Build type: native build
      Project name: pixell
      Project version: 0.23.14+70.g43e5b1d
      Fortran compiler for the host machine: /usr/local/bin/gfortran (gcc 14.1.0 "GNU Fortran (Homebrew GCC 14.1.0_1) 14.1.0")
      Fortran linker for the host machine: /usr/local/bin/gfortran ld64 1053.12
      C compiler for the host machine: /usr/local/bin/gcc-14 (gcc 14.1.0 "gcc-14 (Homebrew GCC 14.1.0_1) 14.1.0")
      C linker for the host machine: /usr/local/bin/gcc-14 ld64 1053.12
      Cython compiler for the host machine: cython (cython 3.0.10)
      Host machine cpu family: aarch64
      Host machine cpu: aarch64
      Program python found: YES (/Users/ip8725/anaconda3/envs/pixell_meson/bin/python3.12)
      Did not find pkg-config by name 'pkg-config'
      Found pkg-config: NO
      Run-time dependency python found: YES 3.12
      Run-time dependency OpenMP found: YES 4.5
      Library m found: YES
      Library m found: YES
      Build targets in project: 16

      pixell 0.23.14+70.g43e5b1d

        User defined options
          Native files: /Users/ip8725/git/pixell/build/cp312/meson-python-native-file.ini
          buildtype   : release
          b_ndebug    : if-release
          b_vscrt     : md

      Found ninja-1.11.1.git.kitware.jobserver-1 at /Users/ip8725/anaconda3/envs/pixell_meson/bin/ninja
      + /Users/ip8725/anaconda3/envs/pixell_meson/bin/ninja
      [1/53] Generating _array_ops_64-f2pywrappers2.f90 with a custom command
      Reading fortran codes...
          Reading file '../../fortran/array_ops_64.f90' (format:free)
      Post-processing...
          Block: _array_ops_64
                          Block: array_ops
                                  Block: matmul_multi_sym
      In: :_array_ops_64:../../fortran/array_ops_64.f90:array_ops:matmul_multi_sym
      analyzevars: could not parse dimension for variable 'size(b,1)'
      In: :_array_ops_64:../../fortran/array_ops_64.f90:array_ops:matmul_multi_sym
      analyzevars: could not parse dimension for variable 'size(b,2)'
                                  Block: matmul_multi
                                  Block: ang2rect
                                  Block: find_contours
                                  Block: roll_rows
      Applying post-processing hooks...
        character_backward_compatibility_hook
      Post-processing (stage 2)...
          Block: _array_ops_64
                  Block: unknown_interface
                          Block: array_ops
                                  Block: matmul_multi_sym
                                  Block: matmul_multi
                                  Block: ang2rect
                                  Block: find_contours
                                  Block: roll_rows
      Building modules...
          Building module "_array_ops_64"...
                  Constructing F90 module support for "array_ops"...
                  Creating wrapper for Fortran subroutine "matmul_multi_sym"("matmul_multi_sym")...
                  Constructing wrapper function "array_ops.matmul_multi_sym"...
                    matmul_multi_sym(a,b)
                  Creating wrapper for Fortran subroutine "matmul_multi"("matmul_multi")...
                  Constructing wrapper function "array_ops.matmul_multi"...
                    matmul_multi(a,b,x)
                  Creating wrapper for Fortran subroutine "ang2rect"("ang2rect")...
                  Constructing wrapper function "array_ops.ang2rect"...
                    ang2rect(ang,rect)
                  Creating wrapper for Fortran subroutine "find_contours"("find_contours")...
                  Constructing wrapper function "array_ops.find_contours"...
                    find_contours(imap,vals,omap)
                  Creating wrapper for Fortran subroutine "roll_rows"("roll_rows")...
                  Constructing wrapper function "array_ops.roll_rows"...
                    roll_rows(imap,offsets,omap)
          Wrote C/API module "_array_ops_64" to file "./_array_ops_64module.c"
          Fortran 90 wrappers are saved to "./_array_ops_64-f2pywrappers2.f90"
      [2/53] Generating _colorize-f2pywrappers2.f90 with a custom command
      Reading fortran codes...
          Reading file '../../fortran/colorize.f90' (format:free)
      Post-processing...
          Block: _colorize
                          Block: remap
      In: :_colorize:../../fortran/colorize.f90:remap
      get_useparameters: no module iso_c_binding info used by remap
      In: :_colorize:../../fortran/colorize.f90:remap
      analyzevars: could not parse dimension for variable 'size(cols,1)'
                          Block: direct
      In: :_colorize:../../fortran/colorize.f90:direct
      get_useparameters: no module iso_c_binding info used by direct
                          Block: direct_colorcap
      In: :_colorize:../../fortran/colorize.f90:direct_colorcap
      get_useparameters: no module iso_c_binding info used by direct_colorcap
      Applying post-processing hooks...
        character_backward_compatibility_hook
      Post-processing (stage 2)...
      Building modules...
          Building module "_colorize"...
          Generating possibly empty wrappers"
          Maybe empty "_colorize-f2pywrappers2.f90"
          Maybe empty "_colorize-f2pywrappers.f"
                  Creating wrapper for Fortran subroutine "remap"("remap")...
              Constructing wrapper function "remap"...
                remap(a,res,vals,cols)
          Generating possibly empty wrappers"
          Maybe empty "_colorize-f2pywrappers2.f90"
          Maybe empty "_colorize-f2pywrappers.f"
                  Creating wrapper for Fortran subroutine "direct"("direct")...
              Constructing wrapper function "direct"...
                direct(a,res)
          Generating possibly empty wrappers"
          Maybe empty "_colorize-f2pywrappers2.f90"
          Maybe empty "_colorize-f2pywrappers.f"
                  Creating wrapper for Fortran subroutine "direct_colorcap"("direct_colorcap")...
              Constructing wrapper function "direct_colorcap"...
                direct_colorcap(a,res)
          Wrote C/API module "_colorize" to file "./_colorizemodule.c"
          Fortran 90 wrappers are saved to "./_colorize-f2pywrappers2.f90"
      [3/53] Generating _array_ops_32-f2pywrappers2.f90 with a custom command
      Reading fortran codes...
          Reading file '../../fortran/array_ops_32.f90' (format:free)
      Post-processing...
          Block: _array_ops_32
                          Block: array_ops
                                  Block: matmul_multi_sym
      In: :_array_ops_32:../../fortran/array_ops_32.f90:array_ops:matmul_multi_sym
      analyzevars: could not parse dimension for variable 'size(b,1)'
      In: :_array_ops_32:../../fortran/array_ops_32.f90:array_ops:matmul_multi_sym
      analyzevars: could not parse dimension for variable 'size(b,2)'
                                  Block: matmul_multi
                                  Block: ang2rect
                                  Block: find_contours
                                  Block: roll_rows
      Applying post-processing hooks...
        character_backward_compatibility_hook
      Post-processing (stage 2)...
          Block: _array_ops_32
                  Block: unknown_interface
                          Block: array_ops
                                  Block: matmul_multi_sym
                                  Block: matmul_multi
                                  Block: ang2rect
                                  Block: find_contours
                                  Block: roll_rows
      Building modules...
          Building module "_array_ops_32"...
                  Constructing F90 module support for "array_ops"...
                  Creating wrapper for Fortran subroutine "matmul_multi_sym"("matmul_multi_sym")...
                  Constructing wrapper function "array_ops.matmul_multi_sym"...
                    matmul_multi_sym(a,b)
                  Creating wrapper for Fortran subroutine "matmul_multi"("matmul_multi")...
                  Constructing wrapper function "array_ops.matmul_multi"...
                    matmul_multi(a,b,x)
                  Creating wrapper for Fortran subroutine "ang2rect"("ang2rect")...
                  Constructing wrapper function "array_ops.ang2rect"...
                    ang2rect(ang,rect)
                  Creating wrapper for Fortran subroutine "find_contours"("find_contours")...
                  Constructing wrapper function "array_ops.find_contours"...
                    find_contours(imap,vals,omap)
                  Creating wrapper for Fortran subroutine "roll_rows"("roll_rows")...
                  Constructing wrapper function "array_ops.roll_rows"...
                    roll_rows(imap,offsets,omap)
          Wrote C/API module "_array_ops_32" to file "./_array_ops_32module.c"
          Fortran 90 wrappers are saved to "./_array_ops_32-f2pywrappers2.f90"
      [4/53] Compiling C object lib_distances_shared.dylib.p/cython_distances_core.c.o
      FAILED: lib_distances_shared.dylib.p/cython_distances_core.c.o
      /usr/local/bin/gcc-14 -Ilib_distances_shared.dylib.p -I. -I../.. -I../../../../anaconda3/envs/pixell_meson/lib/python3.12/site-packages/numpy/_core/include -fdiagnostics-color=always -DNDEBUG -Wall -Winvalid-pch -O3 -fopenmp -MD -MQ lib_distances_shared.dylib.p/cython_distances_core.c.o -MF lib_distances_shared.dylib.p/cython_distances_core.c.o.d -o lib_distances_shared.dylib.p/cython_distances_core.c.o -c ../../cython/distances_core.c
      ../../cython/distances_core.c: In function 'find_relevant_cells':
      ../../cython/distances_core.c:566:48: error: passing argument 4 of 'qsort' from incompatible pointer type [-Wincompatible-pointer-types]
        566 |         qsort(cands->y, cands->n, sizeof(int), compar_int);
            |                                                ^~~~~~~~~~
            |                                                |
            |                                                int (*)(int *, int *)
      In file included from ../../cython/distances_core.c:3:
      /Library/Developer/CommandLineTools/SDKs/MacOSX14.sdk/usr/include/stdlib.h:161:29: note: expected 'int (*)(const void *, const void *)' but argument is of type 'int (*)(int *, int *)'
        161 |             int (* _Nonnull __compar)(const void *, const void *));
            |             ~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      ../../cython/distances_core.c: In function 'fetch_edge':
      ../../cython/distances_core.c:603:13: warning: unused variable 'fnmax' [-Wunused-variable]
        603 |         int fnmax = cfrom->ny*cfrom->nx;
            |             ^~~~~
      ../../cython/distances_core.c:602:13: warning: unused variable 'tnmax' [-Wunused-variable]
        602 |         int tnmax = cto->ny*cto->nx;
            |             ^~~~~
      [5/53] Module scanner.
      [6/53] Generating _interpol_32-f2pywrappers2.f90 with a custom command
      rmbadname1: Replacing "type" with "type_bn".
      rmbadname1: Replacing "type" with "type_bn".
      rmbadname1: Replacing "type" with "type_bn".
      rmbadname1: Replacing "type" with "type_bn".
      rmbadname1: Replacing "type" with "type_bn".
      rmbadname1: Replacing "type" with "type_bn".
      rmbadname1: Replacing "type" with "type_bn".
      rmbadname1: Replacing "type" with "type_bn".
      rmbadname1: Replacing "type" with "type_bn".
      rmbadname1: Replacing "type" with "type_bn".
      rmbadname1: Replacing "type" with "type_bn".
      rmbadname1: Replacing "type" with "type_bn".
      rmbadname1: Replacing "type" with "type_bn".
      rmbadname1: Replacing "type" with "type_bn".
      rmbadname1: Replacing "type" with "type_bn".
      rmbadname1: Replacing "type" with "type_bn".
      rmbadname1: Replacing "type" with "type_bn".
      rmbadname1: Replacing "type" with "type_bn".
      rmbadname1: Replacing "type" with "type_bn".
      rmbadname1: Replacing "type" with "type_bn".
      Reading fortran codes...
          Reading file '../../fortran/interpol_32.f90' (format:free)
      Post-processing...
          Block: _interpol_32
                          Block: fortran
                                  Block: sinc
      In: :_interpol_32:../../fortran/interpol_32.f90:fortran:sinc
      param_eval: got "eval() arg 1 must be a string, bytes or code object" on 4
      In: :_interpol_32:../../fortran/interpol_32.f90:fortran:sinc
      param_eval: got "eval() arg 1 must be a string, bytes or code object" on 8
      In: :_interpol_32:../../fortran/interpol_32.f90:fortran:sinc
      analyzevars: prefix ('pure') were not used
                                  Block: dsinc
      In: :_interpol_32:../../fortran/interpol_32.f90:fortran:dsinc
      param_eval: got "eval() arg 1 must be a string, bytes or code object" on 4
      In: :_interpol_32:../../fortran/interpol_32.f90:fortran:dsinc
      param_eval: got "eval() arg 1 must be a string, bytes or code object" on 8
      In: :_interpol_32:../../fortran/interpol_32.f90:fortran:dsinc
      analyzevars: prefix ('pure') were not used
                                  Block: spline_filter1d
      In: :_interpol_32:../../fortran/interpol_32.f90:fortran:spline_filter1d
      param_eval: got "eval() arg 1 must be a string, bytes or code object" on 8
                                  Block: get_weight_length
                                  Block: calc_weights_deriv
                                  Block: interpol
      In: :_interpol_32:../../fortran/interpol_32.f90:fortran:interpol
      analyzevars: could not parse dimension for variable 'size(idata,2)'
      In: :_interpol_32:../../fortran/interpol_32.f90:fortran:interpol
      analyzevars: could not parse dimension for variable 'size(idata,2)'
      In: :_interpol_32:../../fortran/interpol_32.f90:fortran:interpol
      analyzevars: could not parse dimension for variable 'size(pos,2)'
      In: :_interpol_32:../../fortran/interpol_32.f90:fortran:interpol
      analyzevars: could not parse dimension for variable 'size(pos,2)'
                                  Block: interpol_deriv
      In: :_interpol_32:../../fortran/interpol_32.f90:fortran:interpol_deriv
      analyzevars: could not parse dimension for variable 'size(idata,2)'
      In: :_interpol_32:../../fortran/interpol_32.f90:fortran:interpol_deriv
      analyzevars: could not parse dimension for variable 'size(idata,2)'
      In: :_interpol_32:../../fortran/interpol_32.f90:fortran:interpol_deriv
      analyzevars: could not parse dimension for variable 'size(pos,2)'
      In: :_interpol_32:../../fortran/interpol_32.f90:fortran:interpol_deriv
      analyzevars: could not parse dimension for variable 'size(pos,2)'
      In: :_interpol_32:../../fortran/interpol_32.f90:fortran:interpol_deriv
      analyzevars: could not parse dimension for variable 'size(pos,2)'
                                  Block: interpol_old
      In: :_interpol_32:../../fortran/interpol_32.f90:fortran:interpol_old
      analyzevars: could not parse dimension for variable 'size(idata,1)'
      In: :_interpol_32:../../fortran/interpol_32.f90:fortran:interpol_old
      analyzevars: could not parse dimension for variable 'size(idata,1)'
      In: :_interpol_32:../../fortran/interpol_32.f90:fortran:interpol_old
      analyzevars: could not parse dimension for variable 'size(pos,2)'
      In: :_interpol_32:../../fortran/interpol_32.f90:fortran:interpol_old
      analyzevars: could not parse dimension for variable 'size(pos,2)'
                                  Block: interpol_deriv_old
      In: :_interpol_32:../../fortran/interpol_32.f90:fortran:interpol_deriv_old
      analyzevars: could not parse dimension for variable 'size(idata,1)'
      In: :_interpol_32:../../fortran/interpol_32.f90:fortran:interpol_deriv_old
      analyzevars: could not parse dimension for variable 'size(idata,1)'
      In: :_interpol_32:../../fortran/interpol_32.f90:fortran:interpol_deriv_old
      analyzevars: could not parse dimension for variable 'size(pos,2)'
      In: :_interpol_32:../../fortran/interpol_32.f90:fortran:interpol_deriv_old
      analyzevars: could not parse dimension for variable 'size(pos,2)'
      In: :_interpol_32:../../fortran/interpol_32.f90:fortran:interpol_deriv_old
      analyzevars: could not parse dimension for variable 'size(pos,2)'
      Applying post-processing hooks...
        character_backward_compatibility_hook
      Post-processing (stage 2)...
          Block: _interpol_32
                  Block: unknown_interface
                          Block: fortran
                                  Block: sinc
                                  Block: dsinc
                                  Block: spline_filter1d
                                  Block: get_weight_length
                                  Block: calc_weights_deriv
                                  Block: interpol
                                  Block: interpol_deriv
                                  Block: interpol_old
                                  Block: interpol_deriv_old
      Building modules...
          Building module "_interpol_32"...
                  Constructing F90 module support for "fortran"...
                  Creating wrapper for Fortran function "sinc"("sinc")...
                  Constructing wrapper function "fortran.sinc"...
                    sinc = sinc(x)
                  Creating wrapper for Fortran function "dsinc"("dsinc")...
                  Constructing wrapper function "fortran.dsinc"...
                    dsinc = dsinc(x)
                  Creating wrapper for Fortran subroutine "spline_filter1d"("spline_filter1d")...
                  Constructing wrapper function "fortran.spline_filter1d"...
                    spline_filter1d(data,dims,axis,order,border,trans)
                  Creating wrapper for Fortran function "get_weight_length"("get_weight_length")...
                  Constructing wrapper function "fortran.get_weight_length"...
                    n = get_weight_length(type_bn,order)
                  Creating wrapper for Fortran subroutine "calc_weights_deriv"("calc_weights_deriv")...
                  Constructing wrapper function "fortran.calc_weights_deriv"...
                    calc_weights_deriv(type_bn,order,p,weights,off)
                  Creating wrapper for Fortran subroutine "interpol"("interpol")...
                  Constructing wrapper function "fortran.interpol"...
                    interpol(idata,ishape,odata,pos,type_bn,order,border,trans)
                  Creating wrapper for Fortran subroutine "interpol_deriv"("interpol_deriv")...
                  Constructing wrapper function "fortran.interpol_deriv"...
                    interpol_deriv(idata,ishape,odata,pos,type_bn,order,border,trans)
                  Creating wrapper for Fortran subroutine "interpol_old"("interpol_old")...
                  Constructing wrapper function "fortran.interpol_old"...
                    interpol_old(idata,ishape,odata,pos,type_bn,order,border,trans)
                  Creating wrapper for Fortran subroutine "interpol_deriv_old"("interpol_deriv_old")...
                  Constructing wrapper function "fortran.interpol_deriv_old"...
                    interpol_deriv_old(idata,ishape,odata,pos,type_bn,order,border,trans)
          Wrote C/API module "_interpol_32" to file "./_interpol_32module.c"
          Fortran 90 wrappers are saved to "./_interpol_32-f2pywrappers2.f90"
      [7/53] Generating _interpol_64-f2pywrappers2.f90 with a custom command
      rmbadname1: Replacing "type" with "type_bn".
      rmbadname1: Replacing "type" with "type_bn".
      rmbadname1: Replacing "type" with "type_bn".
      rmbadname1: Replacing "type" with "type_bn".
      rmbadname1: Replacing "type" with "type_bn".
      rmbadname1: Replacing "type" with "type_bn".
      rmbadname1: Replacing "type" with "type_bn".
      rmbadname1: Replacing "type" with "type_bn".
      rmbadname1: Replacing "type" with "type_bn".
      rmbadname1: Replacing "type" with "type_bn".
      rmbadname1: Replacing "type" with "type_bn".
      rmbadname1: Replacing "type" with "type_bn".
      rmbadname1: Replacing "type" with "type_bn".
      rmbadname1: Replacing "type" with "type_bn".
      rmbadname1: Replacing "type" with "type_bn".
      rmbadname1: Replacing "type" with "type_bn".
      rmbadname1: Replacing "type" with "type_bn".
      rmbadname1: Replacing "type" with "type_bn".
      rmbadname1: Replacing "type" with "type_bn".
      rmbadname1: Replacing "type" with "type_bn".
      Reading fortran codes...
          Reading file '../../fortran/interpol_64.f90' (format:free)
      Post-processing...
          Block: _interpol_64
                          Block: fortran
                                  Block: sinc
      In: :_interpol_64:../../fortran/interpol_64.f90:fortran:sinc
      param_eval: got "eval() arg 1 must be a string, bytes or code object" on 4
      In: :_interpol_64:../../fortran/interpol_64.f90:fortran:sinc
      param_eval: got "eval() arg 1 must be a string, bytes or code object" on 4
      In: :_interpol_64:../../fortran/interpol_64.f90:fortran:sinc
      analyzevars: prefix ('pure') were not used
                                  Block: dsinc
      In: :_interpol_64:../../fortran/interpol_64.f90:fortran:dsinc
      param_eval: got "eval() arg 1 must be a string, bytes or code object" on 4
      In: :_interpol_64:../../fortran/interpol_64.f90:fortran:dsinc
      param_eval: got "eval() arg 1 must be a string, bytes or code object" on 4
      In: :_interpol_64:../../fortran/interpol_64.f90:fortran:dsinc
      analyzevars: prefix ('pure') were not used
                                  Block: spline_filter1d
      In: :_interpol_64:../../fortran/interpol_64.f90:fortran:spline_filter1d
      param_eval: got "eval() arg 1 must be a string, bytes or code object" on 4
                                  Block: get_weight_length
                                  Block: calc_weights_deriv
                                  Block: interpol
      In: :_interpol_64:../../fortran/interpol_64.f90:fortran:interpol
      analyzevars: could not parse dimension for variable 'size(idata,2)'
      In: :_interpol_64:../../fortran/interpol_64.f90:fortran:interpol
      analyzevars: could not parse dimension for variable 'size(idata,2)'
      In: :_interpol_64:../../fortran/interpol_64.f90:fortran:interpol
      analyzevars: could not parse dimension for variable 'size(pos,2)'
      In: :_interpol_64:../../fortran/interpol_64.f90:fortran:interpol
      analyzevars: could not parse dimension for variable 'size(pos,2)'
                                  Block: interpol_deriv
      In: :_interpol_64:../../fortran/interpol_64.f90:fortran:interpol_deriv
      analyzevars: could not parse dimension for variable 'size(idata,2)'
      In: :_interpol_64:../../fortran/interpol_64.f90:fortran:interpol_deriv
      analyzevars: could not parse dimension for variable 'size(idata,2)'
      In: :_interpol_64:../../fortran/interpol_64.f90:fortran:interpol_deriv
      analyzevars: could not parse dimension for variable 'size(pos,2)'
      In: :_interpol_64:../../fortran/interpol_64.f90:fortran:interpol_deriv
      analyzevars: could not parse dimension for variable 'size(pos,2)'
      In: :_interpol_64:../../fortran/interpol_64.f90:fortran:interpol_deriv
      analyzevars: could not parse dimension for variable 'size(pos,2)'
                                  Block: interpol_old
      In: :_interpol_64:../../fortran/interpol_64.f90:fortran:interpol_old
      analyzevars: could not parse dimension for variable 'size(idata,1)'
      In: :_interpol_64:../../fortran/interpol_64.f90:fortran:interpol_old
      analyzevars: could not parse dimension for variable 'size(idata,1)'
      In: :_interpol_64:../../fortran/interpol_64.f90:fortran:interpol_old
      analyzevars: could not parse dimension for variable 'size(pos,2)'
      In: :_interpol_64:../../fortran/interpol_64.f90:fortran:interpol_old
      analyzevars: could not parse dimension for variable 'size(pos,2)'
                                  Block: interpol_deriv_old
      In: :_interpol_64:../../fortran/interpol_64.f90:fortran:interpol_deriv_old
      analyzevars: could not parse dimension for variable 'size(idata,1)'
      In: :_interpol_64:../../fortran/interpol_64.f90:fortran:interpol_deriv_old
      analyzevars: could not parse dimension for variable 'size(idata,1)'
      In: :_interpol_64:../../fortran/interpol_64.f90:fortran:interpol_deriv_old
      analyzevars: could not parse dimension for variable 'size(pos,2)'
      In: :_interpol_64:../../fortran/interpol_64.f90:fortran:interpol_deriv_old
      analyzevars: could not parse dimension for variable 'size(pos,2)'
      In: :_interpol_64:../../fortran/interpol_64.f90:fortran:interpol_deriv_old
      analyzevars: could not parse dimension for variable 'size(pos,2)'
      Applying post-processing hooks...
        character_backward_compatibility_hook
      Post-processing (stage 2)...
          Block: _interpol_64
                  Block: unknown_interface
                          Block: fortran
                                  Block: sinc
                                  Block: dsinc
                                  Block: spline_filter1d
                                  Block: get_weight_length
                                  Block: calc_weights_deriv
                                  Block: interpol
                                  Block: interpol_deriv
                                  Block: interpol_old
                                  Block: interpol_deriv_old
      Building modules...
          Building module "_interpol_64"...
                  Constructing F90 module support for "fortran"...
                  Creating wrapper for Fortran function "sinc"("sinc")...
                  Constructing wrapper function "fortran.sinc"...
                    sinc = sinc(x)
                  Creating wrapper for Fortran function "dsinc"("dsinc")...
                  Constructing wrapper function "fortran.dsinc"...
                    dsinc = dsinc(x)
                  Creating wrapper for Fortran subroutine "spline_filter1d"("spline_filter1d")...
                  Constructing wrapper function "fortran.spline_filter1d"...
                    spline_filter1d(data,dims,axis,order,border,trans)
                  Creating wrapper for Fortran function "get_weight_length"("get_weight_length")...
                  Constructing wrapper function "fortran.get_weight_length"...
                    n = get_weight_length(type_bn,order)
                  Creating wrapper for Fortran subroutine "calc_weights_deriv"("calc_weights_deriv")...
                  Constructing wrapper function "fortran.calc_weights_deriv"...
                    calc_weights_deriv(type_bn,order,p,weights,off)
                  Creating wrapper for Fortran subroutine "interpol"("interpol")...
                  Constructing wrapper function "fortran.interpol"...
                    interpol(idata,ishape,odata,pos,type_bn,order,border,trans)
                  Creating wrapper for Fortran subroutine "interpol_deriv"("interpol_deriv")...
                  Constructing wrapper function "fortran.interpol_deriv"...
                    interpol_deriv(idata,ishape,odata,pos,type_bn,order,border,trans)
                  Creating wrapper for Fortran subroutine "interpol_old"("interpol_old")...
                  Constructing wrapper function "fortran.interpol_old"...
                    interpol_old(idata,ishape,odata,pos,type_bn,order,border,trans)
                  Creating wrapper for Fortran subroutine "interpol_deriv_old"("interpol_deriv_old")...
                  Constructing wrapper function "fortran.interpol_deriv_old"...
                    interpol_deriv_old(idata,ishape,odata,pos,type_bn,order,border,trans)
          Wrote C/API module "_interpol_64" to file "./_interpol_64module.c"
          Fortran 90 wrappers are saved to "./_interpol_64-f2pywrappers2.f90"
      [8/53] Compiling C object _colorize.cpython-312-darwin.so.p/meson-generated_..__colorizemodule.c.o
      [9/53] Compiling C object _array_ops_64.cpython-312-darwin.so.p/meson-generated_..__array_ops_64module.c.o
      [10/53] Compiling C object lib_cmisc_shared.dylib.p/cython_cmisc_core.c.o
      [11/53] Compiling C object _array_ops_32.cpython-312-darwin.so.p/1baf9236dc166f61fa1ab72a009d94b02a7bac7d_site-packages_numpy_f2py_src_fortranobject.c.o
      [12/53] Compiling C object _colorize.cpython-312-darwin.so.p/1baf9236dc166f61fa1ab72a009d94b02a7bac7d_site-packages_numpy_f2py_src_fortranobject.c.o
      [13/53] Compiling C object _interpol_32.cpython-312-darwin.so.p/1baf9236dc166f61fa1ab72a009d94b02a7bac7d_site-packages_numpy_f2py_src_fortranobject.c.o
      [14/53] Compiling C object _interpol_64.cpython-312-darwin.so.p/1baf9236dc166f61fa1ab72a009d94b02a7bac7d_site-packages_numpy_f2py_src_fortranobject.c.o
      [15/53] Compiling C object _array_ops_64.cpython-312-darwin.so.p/1baf9236dc166f61fa1ab72a009d94b02a7bac7d_site-packages_numpy_f2py_src_fortranobject.c.o
      ninja: build stopped: subcommand failed.
      [end of output]

  note: This error originates from a subprocess, and is likely not a problem with pip.
error: metadata-generation-failed

× Encountered error while generating package metadata.
╰─> See above for output.

note: This is an issue with the package mentioned above, not pip.
hint: See above for details.