Skip to content

python -m build fails to build source distribution and wheel #40

@wbkboyer

Description

@wbkboyer

Describe the bug

I first noticed this issue while testing #38 (see bottom of PR description for "accordion" containing logs), where I was trying to build the release before publishing to TestPyPI. When I ran python -m build in the root of the planarity repository, instead of producing the source distribution and the .whl for my current platform, I got a whole whack of Cannot convert 'graphP' to Python object errors.

Then, when I switch to the HEAD of master (at the time ff460a), the build failed due to a "missing" header.

Reproduction steps

As per the steps I'd performed in #28 , i.e. following Generating Distribution Archives:

  1. Created and activated my "build" virtual environment
wbkboyer@Wandas-MacBook-Pro planarity % rm -rf .buildenv 
wbkboyer@Wandas-MacBook-Pro planarity % python3.14 -m venv .buildenv
wbkboyer@Wandas-MacBook-Pro planarity % source .buildenv/bin/activate
  1. Installed dependencies outlined in requirements.txt, most importantly for this process setuptools, cython, build, and twine.
(.buildenv) wbkboyer@Wandas-MacBook-Pro planarity % pip install --upgrade pip
...
Successfully installed pip-26.0.1
(.buildenv) wbkboyer@Wandas-MacBook-Pro planarity % pip install -r requirements.txt 
...
Successfully installed build-1.4.4 certifi-2026.4.22 charset_normalizer-3.4.7 contourpy-1.3.3 cycler-0.12.1 cython-3.2.4 docutils-0.22.4 fonttools-4.62.1 id-1.6.1 idna-3.13 iniconfig-2.3.0 jaraco.classes-3.4.0 jaraco.context-6.1.2 jaraco.functools-4.4.0 keyring-25.7.0 kiwisolver-1.5.0 markdown-it-py-4.0.0 matplotlib-3.10.8 mdurl-0.1.2 more-itertools-11.0.2 networkx-3.6.1 nh3-0.3.4 numpy-2.4.4 packaging-26.1 pillow-12.2.0 pluggy-1.6.0 pygments-2.20.0 pyparsing-3.3.2 pyproject_hooks-1.2.0 pytest-9.0.3 python-dateutil-2.9.0.post0 readme-renderer-44.0 requests-2.33.1 requests-toolbelt-1.0.0 rfc3986-2.0.0 rich-15.0.0 setuptools-82.0.1 six-1.17.0 twine-6.2.0 urllib3-2.6.3 wheel-0.47.0
  1. Cleaned up any leftover build artifacts from prior runs:
(.buildenv) wbkboyer@Wandas-MacBook-Pro planarity % git status
On branch Issue37-graphLibBump
Your branch is up to date with 'origin/Issue37-graphLibBump'.

nothing to commit, working tree clean
(.buildenv) wbkboyer@Wandas-MacBook-Pro planarity % git clean -d -x -e .buildenv -e .venv -f
Removing .pytest_cache/
Removing .vscode/
Removing build/
Removing dist/
Removing examples/__pycache__/
Removing examples/full/__pycache__/
Removing planarity.egg-info/
Removing planarity/__pycache__/
Removing planarity/classic/__pycache__/
Removing tests/__pycache__/
  1. Attempted to run python -m build
Logs
(.buildenv) wbkboyer@Wandas-MacBook-Pro planarity % python -m build
* Creating isolated environment: venv+pip...
* Installing packages in isolated environment:
  - cython
  - setuptools
* Getting build dependencies for sdist...
Compiling planarity/classic/planarity.pyx because it depends on /private/var/folders/t1/2kcfnw2902x6gjpfcq7l1r800000gn/T/build-env-i79zven0/lib/python3.14/site-packages/Cython/Includes/libc/stdlib.pxd.
Compiling planarity/full/graph.pyx because it depends on /private/var/folders/t1/2kcfnw2902x6gjpfcq7l1r800000gn/T/build-env-i79zven0/lib/python3.14/site-packages/Cython/Includes/libc/stdlib.pxd.
[1/2] Cythonizing planarity/classic/planarity.pyx
[2/2] Cythonizing planarity/full/graph.pyx
running egg_info
creating planarity.egg-info
writing planarity.egg-info/PKG-INFO
writing dependency_links to planarity.egg-info/dependency_links.txt
writing top-level names to planarity.egg-info/top_level.txt
writing manifest file 'planarity.egg-info/SOURCES.txt'
reading manifest file 'planarity.egg-info/SOURCES.txt'
reading manifest template 'MANIFEST.in'
warning: no files found matching '*.gz' under directory 'examples'
warning: no previously-included files matching '*~' found anywhere in distribution
warning: no previously-included files matching '*.pyc' found anywhere in distribution
warning: no previously-included files matching '.git' found anywhere in distribution
adding license file 'LICENSE.txt'
writing manifest file 'planarity.egg-info/SOURCES.txt'
* Building sdist...
running sdist
running egg_info
writing planarity.egg-info/PKG-INFO
writing dependency_links to planarity.egg-info/dependency_links.txt
writing top-level names to planarity.egg-info/top_level.txt
reading manifest file 'planarity.egg-info/SOURCES.txt'
reading manifest template 'MANIFEST.in'
warning: no files found matching '*.gz' under directory 'examples'
warning: no previously-included files matching '*~' found anywhere in distribution
warning: no previously-included files matching '*.pyc' found anywhere in distribution
warning: no previously-included files matching '.git' found anywhere in distribution
adding license file 'LICENSE.txt'
writing manifest file 'planarity.egg-info/SOURCES.txt'
running check
creating planarity-0.7.11
creating planarity-0.7.11/doc
creating planarity-0.7.11/doc/source
creating planarity-0.7.11/doc/source/reference
creating planarity-0.7.11/doc/sphinxext
creating planarity-0.7.11/examples/classic
creating planarity-0.7.11/examples/full
creating planarity-0.7.11/planarity
creating planarity-0.7.11/planarity.egg-info
creating planarity-0.7.11/planarity/c
creating planarity-0.7.11/planarity/c/graphLib
creating planarity-0.7.11/planarity/c/graphLib/extensionSystem
creating planarity-0.7.11/planarity/c/graphLib/homeomorphSearch
creating planarity-0.7.11/planarity/c/graphLib/io
creating planarity-0.7.11/planarity/c/graphLib/lowLevelUtils
creating planarity-0.7.11/planarity/c/graphLib/planarityRelated
creating planarity-0.7.11/planarity/classic
creating planarity-0.7.11/planarity/full
creating planarity-0.7.11/tests
copying files to planarity-0.7.11...
copying LICENSE.txt -> planarity-0.7.11
copying MANIFEST.in -> planarity-0.7.11
copying README.md -> planarity-0.7.11
copying pyproject.toml -> planarity-0.7.11
copying setup.py -> planarity-0.7.11
copying doc/Makefile -> planarity-0.7.11/doc
copying doc/source/conf.py -> planarity-0.7.11/doc/source
copying doc/source/index.rst -> planarity-0.7.11/doc/source
copying doc/source/reference/index.rst -> planarity-0.7.11/doc/source/reference
copying doc/sphinxext/LICENSE.txt -> planarity-0.7.11/doc/sphinxext
copying doc/sphinxext/docscrape.py -> planarity-0.7.11/doc/sphinxext
copying doc/sphinxext/docscrape_sphinx.py -> planarity-0.7.11/doc/sphinxext
copying doc/sphinxext/numpydoc.py -> planarity-0.7.11/doc/sphinxext
copying examples/classic/ascii.py -> planarity-0.7.11/examples/classic
copying examples/classic/graph_formats.py -> planarity-0.7.11/examples/classic
copying examples/classic/kuratowski.py -> planarity-0.7.11/examples/classic
copying examples/classic/networkx_draw.py -> planarity-0.7.11/examples/classic
copying examples/classic/networkx_interface.py -> planarity-0.7.11/examples/classic
copying examples/classic/pgraph_class.py -> planarity-0.7.11/examples/classic
copying examples/classic/write_adjlist.py -> planarity-0.7.11/examples/classic
copying examples/full/planarity_app_utils.py -> planarity-0.7.11/examples/full
copying examples/full/test_specific_graph.py -> planarity-0.7.11/examples/full
copying planarity/__init__.py -> planarity-0.7.11/planarity
copying planarity.egg-info/PKG-INFO -> planarity-0.7.11/planarity.egg-info
copying planarity.egg-info/SOURCES.txt -> planarity-0.7.11/planarity.egg-info
copying planarity.egg-info/dependency_links.txt -> planarity-0.7.11/planarity.egg-info
copying planarity.egg-info/top_level.txt -> planarity-0.7.11/planarity.egg-info
copying planarity/c/LICENSE.TXT -> planarity-0.7.11/planarity/c
copying planarity/c/README -> planarity-0.7.11/planarity/c
copying planarity/c/graphLib/graphDFSUtils.c -> planarity-0.7.11/planarity/c/graphLib
copying planarity/c/graphLib/graphUtils.c -> planarity-0.7.11/planarity/c/graphLib
copying planarity/c/graphLib/extensionSystem/graphExtensions.c -> planarity-0.7.11/planarity/c/graphLib/extensionSystem
copying planarity/c/graphLib/homeomorphSearch/graphK23Search.c -> planarity-0.7.11/planarity/c/graphLib/homeomorphSearch
copying planarity/c/graphLib/homeomorphSearch/graphK23Search_Extensions.c -> planarity-0.7.11/planarity/c/graphLib/homeomorphSearch
copying planarity/c/graphLib/homeomorphSearch/graphK33Search.c -> planarity-0.7.11/planarity/c/graphLib/homeomorphSearch
copying planarity/c/graphLib/homeomorphSearch/graphK33Search_Extensions.c -> planarity-0.7.11/planarity/c/graphLib/homeomorphSearch
copying planarity/c/graphLib/homeomorphSearch/graphK4Search.c -> planarity-0.7.11/planarity/c/graphLib/homeomorphSearch
copying planarity/c/graphLib/homeomorphSearch/graphK4Search_Extensions.c -> planarity-0.7.11/planarity/c/graphLib/homeomorphSearch
copying planarity/c/graphLib/io/g6-api-utilities.c -> planarity-0.7.11/planarity/c/graphLib/io
copying planarity/c/graphLib/io/g6-read-iterator.c -> planarity-0.7.11/planarity/c/graphLib/io
copying planarity/c/graphLib/io/g6-write-iterator.c -> planarity-0.7.11/planarity/c/graphLib/io
copying planarity/c/graphLib/io/graphIO.c -> planarity-0.7.11/planarity/c/graphLib/io
copying planarity/c/graphLib/io/strOrFile.c -> planarity-0.7.11/planarity/c/graphLib/io
copying planarity/c/graphLib/io/strbuf.c -> planarity-0.7.11/planarity/c/graphLib/io
copying planarity/c/graphLib/lowLevelUtils/apiutils.c -> planarity-0.7.11/planarity/c/graphLib/lowLevelUtils
copying planarity/c/graphLib/lowLevelUtils/listcoll.c -> planarity-0.7.11/planarity/c/graphLib/lowLevelUtils
copying planarity/c/graphLib/lowLevelUtils/stack.c -> planarity-0.7.11/planarity/c/graphLib/lowLevelUtils
copying planarity/c/graphLib/planarityRelated/graphDrawPlanar.c -> planarity-0.7.11/planarity/c/graphLib/planarityRelated
copying planarity/c/graphLib/planarityRelated/graphDrawPlanar_Extensions.c -> planarity-0.7.11/planarity/c/graphLib/planarityRelated
copying planarity/c/graphLib/planarityRelated/graphEmbed.c -> planarity-0.7.11/planarity/c/graphLib/planarityRelated
copying planarity/c/graphLib/planarityRelated/graphIsolator.c -> planarity-0.7.11/planarity/c/graphLib/planarityRelated
copying planarity/c/graphLib/planarityRelated/graphNonplanar.c -> planarity-0.7.11/planarity/c/graphLib/planarityRelated
copying planarity/c/graphLib/planarityRelated/graphOuterplanarObstruction.c -> planarity-0.7.11/planarity/c/graphLib/planarityRelated
copying planarity/c/graphLib/planarityRelated/graphTests.c -> planarity-0.7.11/planarity/c/graphLib/planarityRelated
copying planarity/classic/__init__.py -> planarity-0.7.11/planarity/classic
copying planarity/classic/cplanarity.pxd -> planarity-0.7.11/planarity/classic
copying planarity/classic/planarity.c -> planarity-0.7.11/planarity/classic
copying planarity/classic/planarity.pyx -> planarity-0.7.11/planarity/classic
copying planarity/classic/planarity_functions.py -> planarity-0.7.11/planarity/classic
copying planarity/classic/planarity_networkx.py -> planarity-0.7.11/planarity/classic
copying planarity/full/__init__.py -> planarity-0.7.11/planarity/full
copying planarity/full/cappconst.pxd -> planarity-0.7.11/planarity/full
copying planarity/full/cg6IterationDefs.pxd -> planarity-0.7.11/planarity/full
copying planarity/full/cgraphLib.pxd -> planarity-0.7.11/planarity/full
copying planarity/full/g6IterationUtils.c -> planarity-0.7.11/planarity/full
copying planarity/full/g6IterationUtils.pyx -> planarity-0.7.11/planarity/full
copying planarity/full/graph.c -> planarity-0.7.11/planarity/full
copying planarity/full/graph.pyx -> planarity-0.7.11/planarity/full
copying tests/test_planarity.py -> planarity-0.7.11/tests
copying tests/test_planarity_networkx.py -> planarity-0.7.11/tests
copying planarity.egg-info/SOURCES.txt -> planarity-0.7.11/planarity.egg-info
Writing planarity-0.7.11/setup.cfg
Creating tar archive
removing 'planarity-0.7.11' (and everything under it)
* Building wheel from sdist
* Creating isolated environment: venv+pip...
* Installing packages in isolated environment:
  - cython
  - setuptools
* Getting build dependencies for wheel...
Compiling planarity/classic/planarity.pyx because it depends on /private/var/folders/t1/2kcfnw2902x6gjpfcq7l1r800000gn/T/build-env-azwy86v9/lib/python3.14/site-packages/Cython/Includes/libc/stdlib.pxd.
Compiling planarity/full/graph.pyx because it depends on /private/var/folders/t1/2kcfnw2902x6gjpfcq7l1r800000gn/T/build-env-azwy86v9/lib/python3.14/site-packages/Cython/Includes/libc/stdlib.pxd.
[1/2] Cythonizing planarity/classic/planarity.pyx
[2/2] Cythonizing planarity/full/graph.pyx

Error compiling Cython file:
------------------------------------------------------------
...


cdef class Graph:
    def __cinit__(self):
        global global_id_count
        self._theGraph = cgraphLib.gp_New()
                                         ^
------------------------------------------------------------
planarity/full/graph.pyx:41:41: Cannot convert 'graphP' to Python object

Error compiling Cython file:
------------------------------------------------------------
...

cdef class Graph:
    def __cinit__(self):
        global global_id_count
        self._theGraph = cgraphLib.gp_New()
        if self._theGraph == NULL:
                          ^
------------------------------------------------------------
planarity/full/graph.pyx:42:26: Invalid types for '==' (Python object, void *)

Error compiling Cython file:
------------------------------------------------------------
...
        if self._theGraph == NULL:
            raise MemoryError("gp_New() failed.")
        self.owns_graphP = True

    def __dealloc__(self):
        if self._theGraph != NULL and self.owns_graphP:
                          ^
------------------------------------------------------------
planarity/full/graph.pyx:47:26: Invalid types for '!=' (Python object, void *)

Error compiling Cython file:
------------------------------------------------------------
...
            raise MemoryError("gp_New() failed.")
        self.owns_graphP = True

    def __dealloc__(self):
        if self._theGraph != NULL and self.owns_graphP:
            cgraphLib.gp_Free(&self._theGraph)
                              ^
------------------------------------------------------------
planarity/full/graph.pyx:48:30: Cannot take address of Python object attribute '_theGraph'

Error compiling Cython file:
------------------------------------------------------------
...
            cgraphLib.gp_Free(&self._theGraph)

    def get_wrapper_for_graphP(self) -> Graph:
        cdef Graph new_wrapper = Graph()

        if new_wrapper._theGraph != NULL:
                                 ^
------------------------------------------------------------
planarity/full/graph.pyx:53:33: Invalid types for '!=' (Python object, void *)

Error compiling Cython file:
------------------------------------------------------------
...

    def get_wrapper_for_graphP(self) -> Graph:
        cdef Graph new_wrapper = Graph()

        if new_wrapper._theGraph != NULL:
            cgraphLib.gp_Free(&new_wrapper._theGraph)
                              ^
------------------------------------------------------------
planarity/full/graph.pyx:54:30: Cannot take address of Python object attribute '_theGraph'

Error compiling Cython file:
------------------------------------------------------------
...

    def gp_IsEdge(self, int e):
        return (
            (e >= self.gp_EdgeArrayStart()) and
            (e < self.gp_EdgeArraySize()) and
            cgraphLib.gp_IsEdge(self._theGraph, e)
                                    ^
------------------------------------------------------------
planarity/full/graph.pyx:64:36: Cannot convert Python object to 'graphP'

Error compiling Cython file:
------------------------------------------------------------
...
            (e < self.gp_EdgeArraySize()) and
            cgraphLib.gp_IsEdge(self._theGraph, e)
        )

    def gp_EdgeArrayStart(self):
        return cgraphLib.gp_EdgeArrayStart(self._theGraph)
                                               ^
------------------------------------------------------------
planarity/full/graph.pyx:68:47: Cannot convert Python object to 'graphP'

Error compiling Cython file:
------------------------------------------------------------
...
        if not self.gp_IsEdge(e):
            raise RuntimeError(
                f"gp_EdgeInUse() failed: invalid edge index '{e}'."
            )

        return cgraphLib.gp_EdgeInUse(self._theGraph, e)
                                          ^
------------------------------------------------------------
planarity/full/graph.pyx:76:42: Cannot convert Python object to 'graphP'

Error compiling Cython file:
------------------------------------------------------------
...
            )

        return cgraphLib.gp_EdgeInUse(self._theGraph, e)

    def gp_EdgeArraySize(self):
        return cgraphLib.gp_EdgeArraySize(self._theGraph)
                                              ^
------------------------------------------------------------
planarity/full/graph.pyx:79:46: Cannot convert Python object to 'graphP'

Error compiling Cython file:
------------------------------------------------------------
...

    def gp_EdgeArraySize(self):
        return cgraphLib.gp_EdgeArraySize(self._theGraph)

    def gp_EdgeInUseArraySize(self):
        return cgraphLib.gp_EdgeInUseArraySize(self._theGraph)
                                                   ^
------------------------------------------------------------
planarity/full/graph.pyx:82:51: Cannot convert Python object to 'graphP'

Error compiling Cython file:
------------------------------------------------------------
...
        if not self.gp_IsVertex(v):
            raise RuntimeError(
                f"gp_GetFirstEdge() failed: invalid vertex intex '{v}'."
            )

        return cgraphLib.gp_GetFirstEdge(self._theGraph, v)
                                             ^
------------------------------------------------------------
planarity/full/graph.pyx:90:45: Cannot convert Python object to 'graphP'

Error compiling Cython file:
------------------------------------------------------------
...
        if not self.gp_IsEdge(e):
            raise RuntimeError(
                f"gp_GetNextEdge() failed: invalid edge index '{e}'."
            )

        return cgraphLib.gp_GetNextEdge(self._theGraph, e)
                                            ^
------------------------------------------------------------
planarity/full/graph.pyx:98:44: Cannot convert Python object to 'graphP'

Error compiling Cython file:
------------------------------------------------------------
...
        if not self.gp_IsEdge(e):
            raise RuntimeError(
                f"gp_GetNeighbor() failed: invalid edge index '{e}'."
            )

        return cgraphLib.gp_GetNeighbor(self._theGraph, e)
                                            ^
------------------------------------------------------------
planarity/full/graph.pyx:106:44: Cannot convert Python object to 'graphP'

Error compiling Cython file:
------------------------------------------------------------
...

    def gp_IsVertex(self, int v):
        return (
            (v >= self.gp_GetFirstVertex()) and
            (v <= self.gp_GetLastVertex()) and
            cgraphLib.gp_IsVertex(self._theGraph, v)
                                      ^
------------------------------------------------------------
planarity/full/graph.pyx:112:38: Cannot convert Python object to 'graphP'

Error compiling Cython file:
------------------------------------------------------------
...
            (v <= self.gp_GetLastVertex()) and
            cgraphLib.gp_IsVertex(self._theGraph, v)
        )

    def gp_GetFirstVertex(self):
        return cgraphLib.gp_GetFirstVertex(self._theGraph)
                                               ^
------------------------------------------------------------
planarity/full/graph.pyx:116:47: Cannot convert Python object to 'graphP'

Error compiling Cython file:
------------------------------------------------------------
...

    def gp_GetFirstVertex(self):
        return cgraphLib.gp_GetFirstVertex(self._theGraph)

    def gp_GetLastVertex(self):
        return cgraphLib.gp_GetLastVertex(self._theGraph)
                                              ^
------------------------------------------------------------
planarity/full/graph.pyx:119:46: Cannot convert Python object to 'graphP'

Error compiling Cython file:
------------------------------------------------------------
...
        return cgraphLib.gp_GetLastVertex(self._theGraph)

    def gp_VertexInRangeAscending(self, int v):
        return (
            v >= self.gp_GetFirstVertex() and
            cgraphLib.gp_VertexInRangeAscending(self._theGraph, v)
                                                    ^
------------------------------------------------------------
planarity/full/graph.pyx:124:52: Cannot convert Python object to 'graphP'

Error compiling Cython file:
------------------------------------------------------------
...

    def gp_GetN(self)-> int:
        """
        Returns the number of vertices in the graph.
        """
        if self._theGraph == NULL:
                          ^
------------------------------------------------------------
planarity/full/graph.pyx:131:26: Invalid types for '==' (Python object, void *)

Error compiling Cython file:
------------------------------------------------------------
...
        Returns the number of vertices in the graph.
        """
        if self._theGraph == NULL:
            raise RuntimeError("Graph is not initialized.")

        return cgraphLib.gp_GetN(self._theGraph)
                                     ^
------------------------------------------------------------
planarity/full/graph.pyx:134:37: Cannot convert Python object to 'graphP'

Error compiling Cython file:
------------------------------------------------------------
...
            raise RuntimeError("Graph is not initialized.")

        return cgraphLib.gp_GetN(self._theGraph)

    def gp_InitGraph(self, int n):
        if cgraphLib.gp_InitGraph(self._theGraph, n) != cappconst.OK:
                                      ^
------------------------------------------------------------
planarity/full/graph.pyx:137:38: Cannot convert Python object to 'graphP'

Error compiling Cython file:
------------------------------------------------------------
...
    def gp_InitGraph(self, int n):
        if cgraphLib.gp_InitGraph(self._theGraph, n) != cappconst.OK:
            raise RuntimeError(f"gp_InitGraph() failed.")

    def gp_ReinitializeGraph(self):
        cgraphLib.gp_ReinitializeGraph(self._theGraph)
                                           ^
------------------------------------------------------------
planarity/full/graph.pyx:141:43: Cannot convert Python object to 'graphP'

Error compiling Cython file:
------------------------------------------------------------
...
        cgraphLib.gp_ReinitializeGraph(self._theGraph)

    def gp_CopyGraph(self, Graph src_graph):
        # NOTE: this is interpreting the self as the dstGraph, i.e. copying
        # the Graph wrapper that is passed in as the srcGraph
        if self._theGraph == NULL:
                          ^
------------------------------------------------------------
planarity/full/graph.pyx:146:26: Invalid types for '==' (Python object, void *)

Error compiling Cython file:
------------------------------------------------------------
...
        if self.gp_GetN() != src_graph.gp_GetN():
            raise ValueError(
                "Source and destination graphs must have the same order "
                "to copy graphP struct.")

        if cgraphLib.gp_CopyGraph(self._theGraph, src_graph._theGraph) != cappconst.OK:
                                      ^
------------------------------------------------------------
planarity/full/graph.pyx:164:38: Cannot convert Python object to 'graphP'

Error compiling Cython file:
------------------------------------------------------------
...
        if self.gp_GetN() != src_graph.gp_GetN():
            raise ValueError(
                "Source and destination graphs must have the same order "
                "to copy graphP struct.")

        if cgraphLib.gp_CopyGraph(self._theGraph, src_graph._theGraph) != cappconst.OK:
                                                           ^
------------------------------------------------------------
planarity/full/graph.pyx:164:59: Cannot convert Python object to 'graphP'

Error compiling Cython file:
------------------------------------------------------------
...

        if cgraphLib.gp_CopyGraph(self._theGraph, src_graph._theGraph) != cappconst.OK:
            raise RuntimeError(f"gp_CopyGraph() failed.")

    def gp_DupGraph(self) -> Graph:
        cdef cgraphLib.graphP theGraph_dup = cgraphLib.gp_DupGraph(self._theGraph)
                                                                       ^
------------------------------------------------------------
planarity/full/graph.pyx:168:71: Cannot convert Python object to 'graphP'

Error compiling Cython file:
------------------------------------------------------------
...

        cdef Graph new_graph = Graph()
        if new_graph is None:
            raise MemoryError("Unable to create new Graph container for duplicate.")

        if new_graph._theGraph != NULL:
                               ^
------------------------------------------------------------
planarity/full/graph.pyx:176:31: Invalid types for '!=' (Python object, void *)

Error compiling Cython file:
------------------------------------------------------------
...
        cdef Graph new_graph = Graph()
        if new_graph is None:
            raise MemoryError("Unable to create new Graph container for duplicate.")

        if new_graph._theGraph != NULL:
            cgraphLib.gp_Free(&new_graph._theGraph)
                              ^
------------------------------------------------------------
planarity/full/graph.pyx:177:30: Cannot take address of Python object attribute '_theGraph'

Error compiling Cython file:
------------------------------------------------------------
...
            raise MemoryError("Unable to create new Graph container for duplicate.")

        if new_graph._theGraph != NULL:
            cgraphLib.gp_Free(&new_graph._theGraph)

        new_graph._theGraph = theGraph_dup
                              ^
------------------------------------------------------------
planarity/full/graph.pyx:179:30: Cannot convert 'graphP' to Python object

Error compiling Cython file:
------------------------------------------------------------
...
    def gp_Read(self, str infile_name):
        # Convert Python str to UTF-8 encoded bytes, and then to const char *
        cdef bytes encoded = infile_name.encode('utf-8')
        cdef const char *FileName = encoded

        if cgraphLib.gp_Read(self._theGraph, FileName) != cappconst.OK:
                                 ^
------------------------------------------------------------
planarity/full/graph.pyx:189:33: Cannot convert Python object to 'graphP'

Error compiling Cython file:
------------------------------------------------------------
...

        # Convert Python str to UTF-8 encoded bytes, and then to const char *
        cdef bytes encoded = outfile_name.encode('utf-8')
        cdef const char *theFileName = encoded

        if cgraphLib.gp_Write(self._theGraph, theFileName, mode_code) != cappconst.OK:
                                  ^
------------------------------------------------------------
planarity/full/graph.pyx:207:34: Cannot convert Python object to 'graphP'

Error compiling Cython file:
------------------------------------------------------------
...
        if not self.gp_IsVertex(u):
            raise RuntimeError(f"'{u}' is not a valid vertex label.")
        if not self.gp_IsVertex(v):
            raise RuntimeError(f"'{v}' is not a valid vertex label.")

        return cgraphLib.gp_FindEdge(self._theGraph, u, v)
                                         ^
------------------------------------------------------------
planarity/full/graph.pyx:218:41: Cannot convert Python object to 'graphP'

Error compiling Cython file:
------------------------------------------------------------
...

    def gp_GetVertexDegree(self, int v):
        if not self.gp_IsVertex(v):
            raise RuntimeError(f"'{v}' is not a valid vertex label.")

        return cgraphLib.gp_GetVertexDegree(self._theGraph, v)
                                                ^
------------------------------------------------------------
planarity/full/graph.pyx:224:48: Cannot convert Python object to 'graphP'

Error compiling Cython file:
------------------------------------------------------------
...
            raise RuntimeError(f"'{v}' is not a valid vertex label.")

        return cgraphLib.gp_GetVertexDegree(self._theGraph, v)

    def gp_GetEdgeCapacity(self):
        return cgraphLib.gp_GetEdgeCapacity(self._theGraph)
                                                ^
------------------------------------------------------------
planarity/full/graph.pyx:227:48: Cannot convert Python object to 'graphP'

Error compiling Cython file:
------------------------------------------------------------
...

    def gp_GetEdgeCapacity(self):
        return cgraphLib.gp_GetEdgeCapacity(self._theGraph)

    def gp_EnsureEdgeCapacity(self, int new_edge_capacity):
        if cgraphLib.gp_EnsureEdgeCapacity(self._theGraph, new_edge_capacity) != cappconst.OK:
                                               ^
------------------------------------------------------------
planarity/full/graph.pyx:230:47: Cannot convert Python object to 'graphP'

Error compiling Cython file:
------------------------------------------------------------
...
            )
        if vlink != 0 and vlink != 1:
            raise RuntimeError(
                f"Invalid link index for vlink: '{vlink}'."
            )
        if cgraphLib.gp_AddEdge(self._theGraph, u, ulink, v, vlink) != cappconst.OK:
                                    ^
------------------------------------------------------------
planarity/full/graph.pyx:244:36: Cannot convert Python object to 'graphP'

Error compiling Cython file:
------------------------------------------------------------
...
        if not self.gp_IsEdge(e):
            raise RuntimeError(
                f"gp_DeleteEdge() failed: invalid edge '{e}'."
            )

        return cgraphLib.gp_DeleteEdge(self._theGraph, e)
                                           ^
------------------------------------------------------------
planarity/full/graph.pyx:256:43: Cannot convert Python object to 'graphP'

Error compiling Cython file:
------------------------------------------------------------
...
            )

        return cgraphLib.gp_DeleteEdge(self._theGraph, e)

    def gp_ExtendWith_Planarity(self):
        if cgraphLib.gp_ExtendWith_Planarity(self._theGraph) != cappconst.OK:
                                                 ^
------------------------------------------------------------
planarity/full/graph.pyx:259:49: Cannot convert Python object to 'graphP'

Error compiling Cython file:
------------------------------------------------------------
...
    def gp_ExtendWith_Planarity(self):
        if cgraphLib.gp_ExtendWith_Planarity(self._theGraph) != cappconst.OK:
            raise RuntimeError("Failed to extend graph with Planarity structures.")

    def gp_ExtendWith_DrawPlanar(self):
        if cgraphLib.gp_ExtendWith_DrawPlanar(self._theGraph) != cappconst.OK:
                                                  ^
------------------------------------------------------------
planarity/full/graph.pyx:263:50: Cannot convert Python object to 'graphP'

Error compiling Cython file:
------------------------------------------------------------
...
    def gp_DrawPlanar_RenderToFile(self, str outfile_name):
        # Convert Python str to UTF-8 encoded bytes, and then to const char *
        cdef bytes encoded = outfile_name.encode('utf-8')
        cdef const char *theFileName = encoded

        if cgraphLib.gp_DrawPlanar_RenderToFile(self._theGraph, theFileName) != cappconst.OK:
                                                    ^
------------------------------------------------------------
planarity/full/graph.pyx:271:52: Cannot convert Python object to 'graphP'

Error compiling Cython file:
------------------------------------------------------------
...
        if cgraphLib.gp_DrawPlanar_RenderToFile(self._theGraph, theFileName) != cappconst.OK:
            raise RuntimeError(f"Failed to render embedding to file '{outfile_name}'.")

    def gp_DrawPlanar_RenderToString(self):
        cdef char* renditionString = NULL
        if cgraphLib.gp_DrawPlanar_RenderToString(self._theGraph, &renditionString) != OK:
                                                      ^
------------------------------------------------------------
planarity/full/graph.pyx:276:54: Cannot convert Python object to 'graphP'

Error compiling Cython file:
------------------------------------------------------------
...
                ) from string_conversion_error
        finally:
            free(renditionString)

    def gp_ExtendWith_Outerplanarity(self):
        if cgraphLib.gp_ExtendWith_Outerplanarity(self._theGraph) != cappconst.OK:
                                                      ^
------------------------------------------------------------
planarity/full/graph.pyx:289:54: Cannot convert Python object to 'graphP'

Error compiling Cython file:
------------------------------------------------------------
...
    def gp_ExtendWith_Outerplanarity(self):
        if cgraphLib.gp_ExtendWith_Outerplanarity(self._theGraph) != cappconst.OK:
            raise RuntimeError("Failed to extend graph with Outerplanarity structures.")

    def gp_ExtendWith_K23Search(self):
        if cgraphLib.gp_ExtendWith_K23Search(self._theGraph) != cappconst.OK:
                                                 ^
------------------------------------------------------------
planarity/full/graph.pyx:293:49: Cannot convert Python object to 'graphP'

Error compiling Cython file:
------------------------------------------------------------
...
    def gp_ExtendWith_K23Search(self):
        if cgraphLib.gp_ExtendWith_K23Search(self._theGraph) != cappconst.OK:
            raise RuntimeError("Failed to extend graph with K23Search structures.")

    def gp_ExtendWith_K33Search(self):
        if cgraphLib.gp_ExtendWith_K33Search(self._theGraph) != cappconst.OK:
                                                 ^
------------------------------------------------------------
planarity/full/graph.pyx:297:49: Cannot convert Python object to 'graphP'

Error compiling Cython file:
------------------------------------------------------------
...
    def gp_ExtendWith_K33Search(self):
        if cgraphLib.gp_ExtendWith_K33Search(self._theGraph) != cappconst.OK:
            raise RuntimeError("Failed to extend graph with K33Search structures.")

    def gp_ExtendWith_K4Search(self):
        if cgraphLib.gp_ExtendWith_K4Search(self._theGraph) != cappconst.OK:
                                                ^
------------------------------------------------------------
planarity/full/graph.pyx:301:48: Cannot convert Python object to 'graphP'

Error compiling Cython file:
------------------------------------------------------------
...
    def gp_ExtendWith_K4Search(self):
        if cgraphLib.gp_ExtendWith_K4Search(self._theGraph) != cappconst.OK:
            raise RuntimeError("Failed to extend graph with K4Search structures.")

    def gp_Embed(self, int embedFlags) -> int:
        return cgraphLib.gp_Embed(self._theGraph, embedFlags)
                                      ^
------------------------------------------------------------
planarity/full/graph.pyx:305:38: Cannot convert Python object to 'graphP'

Error compiling Cython file:
------------------------------------------------------------
...

    def gp_Embed(self, int embedFlags) -> int:
        return cgraphLib.gp_Embed(self._theGraph, embedFlags)

    def gp_TestEmbedResultIntegrity(self, Graph copy_of_orig_graph, int embed_result) -> int:
        return cgraphLib.gp_TestEmbedResultIntegrity(self._theGraph, copy_of_orig_graph._theGraph, embed_result)
                                                         ^
------------------------------------------------------------
planarity/full/graph.pyx:308:57: Cannot convert Python object to 'graphP'

Error compiling Cython file:
------------------------------------------------------------
...

    def gp_Embed(self, int embedFlags) -> int:
        return cgraphLib.gp_Embed(self._theGraph, embedFlags)

    def gp_TestEmbedResultIntegrity(self, Graph copy_of_orig_graph, int embed_result) -> int:
        return cgraphLib.gp_TestEmbedResultIntegrity(self._theGraph, copy_of_orig_graph._theGraph, embed_result)
                                                                                       ^
------------------------------------------------------------
planarity/full/graph.pyx:308:87: Cannot convert Python object to 'graphP'
Traceback (most recent call last):
  File "/Users/wbkboyer/git/planarity/.buildenv/lib/python3.14/site-packages/pyproject_hooks/_in_process/_in_process.py", line 389, in <module>
    main()
    ~~~~^^
  File "/Users/wbkboyer/git/planarity/.buildenv/lib/python3.14/site-packages/pyproject_hooks/_in_process/_in_process.py", line 373, in main
    json_out["return_val"] = hook(**hook_input["kwargs"])
                             ~~~~^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/wbkboyer/git/planarity/.buildenv/lib/python3.14/site-packages/pyproject_hooks/_in_process/_in_process.py", line 143, in get_requires_for_build_wheel
    return hook(config_settings)
  File "/private/var/folders/t1/2kcfnw2902x6gjpfcq7l1r800000gn/T/build-env-azwy86v9/lib/python3.14/site-packages/setuptools/build_meta.py", line 333, in get_requires_for_build_wheel
    return self._get_build_requires(config_settings, requirements=[])
           ~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/private/var/folders/t1/2kcfnw2902x6gjpfcq7l1r800000gn/T/build-env-azwy86v9/lib/python3.14/site-packages/setuptools/build_meta.py", line 301, in _get_build_requires
    self.run_setup()
    ~~~~~~~~~~~~~~^^
  File "/private/var/folders/t1/2kcfnw2902x6gjpfcq7l1r800000gn/T/build-env-azwy86v9/lib/python3.14/site-packages/setuptools/build_meta.py", line 317, in run_setup
    exec(code, locals())
    ~~~~^^^^^^^^^^^^^^^^
  File "<string>", line 53, in <module>
  File "/private/var/folders/t1/2kcfnw2902x6gjpfcq7l1r800000gn/T/build-env-azwy86v9/lib/python3.14/site-packages/Cython/Build/Dependencies.py", line 1153, in cythonize
    cythonize_one(*args)
    ~~~~~~~~~~~~~^^^^^^^
  File "/private/var/folders/t1/2kcfnw2902x6gjpfcq7l1r800000gn/T/build-env-azwy86v9/lib/python3.14/site-packages/Cython/Build/Dependencies.py", line 1297, in cythonize_one
    raise CompileError(None, pyx_file)
Cython.Compiler.Errors.CompileError: planarity/full/graph.pyx

ERROR Backend subprocess exited when trying to invoke get_requires_for_build_wheel

  1. Switch to ff460a, clean build environment, and re-run python -m build, which fails due to fatal error: '../lowLevelUtils/appconst.h' file not found (even though the file does exist)
Logs
wbkboyer@Wandas-MacBook-Pro planarity % git checkout ff460a
Note: switching to 'ff460a'.
...

HEAD is now at ff460ad Merge pull request #36 from graph-algorithms/Issue22-ReviseTemplatesToMatchEAPS
(.buildenv) wbkboyer@Wandas-MacBook-Pro planarity % git clean -d -x -e .buildenv -e .venv -f
Removing dist/
Removing planarity.egg-info/
(.buildenv) wbkboyer@Wandas-MacBook-Pro planarity % python -m build                         
* Creating isolated environment: venv+pip...
* Installing packages in isolated environment:
  - cython
  - setuptools
* Getting build dependencies for sdist...
Compiling planarity/classic/planarity.pyx because it changed.
Compiling planarity/full/g6IterationUtils.pyx because it changed.
Compiling planarity/full/graph.pyx because it changed.
[1/3] Cythonizing planarity/classic/planarity.pyx
[2/3] Cythonizing planarity/full/g6IterationUtils.pyx
[3/3] Cythonizing planarity/full/graph.pyx
running egg_info
creating planarity.egg-info
writing planarity.egg-info/PKG-INFO
writing dependency_links to planarity.egg-info/dependency_links.txt
writing top-level names to planarity.egg-info/top_level.txt
writing manifest file 'planarity.egg-info/SOURCES.txt'
reading manifest file 'planarity.egg-info/SOURCES.txt'
reading manifest template 'MANIFEST.in'
warning: no files found matching '*.gz' under directory 'examples'
warning: no previously-included files matching '*~' found anywhere in distribution
warning: no previously-included files matching '*.pyc' found anywhere in distribution
warning: no previously-included files matching '.git' found anywhere in distribution
adding license file 'LICENSE.txt'
writing manifest file 'planarity.egg-info/SOURCES.txt'
* Building sdist...
running sdist
running egg_info
writing planarity.egg-info/PKG-INFO
writing dependency_links to planarity.egg-info/dependency_links.txt
writing top-level names to planarity.egg-info/top_level.txt
reading manifest file 'planarity.egg-info/SOURCES.txt'
reading manifest template 'MANIFEST.in'
warning: no files found matching '*.gz' under directory 'examples'
warning: no previously-included files matching '*~' found anywhere in distribution
warning: no previously-included files matching '*.pyc' found anywhere in distribution
warning: no previously-included files matching '.git' found anywhere in distribution
adding license file 'LICENSE.txt'
writing manifest file 'planarity.egg-info/SOURCES.txt'
running check
creating planarity-0.7.10
creating planarity-0.7.10/doc
creating planarity-0.7.10/doc/source
creating planarity-0.7.10/doc/source/reference
creating planarity-0.7.10/doc/sphinxext
creating planarity-0.7.10/examples
creating planarity-0.7.10/planarity
creating planarity-0.7.10/planarity.egg-info
creating planarity-0.7.10/planarity/c
creating planarity-0.7.10/planarity/c/graphLib
creating planarity-0.7.10/planarity/c/graphLib/extensionSystem
creating planarity-0.7.10/planarity/c/graphLib/homeomorphSearch
creating planarity-0.7.10/planarity/c/graphLib/io
creating planarity-0.7.10/planarity/c/graphLib/lowLevelUtils
creating planarity-0.7.10/planarity/c/graphLib/planarityRelated
creating planarity-0.7.10/planarity/classic
creating planarity-0.7.10/planarity/full
creating planarity-0.7.10/tests
copying files to planarity-0.7.10...
copying LICENSE.txt -> planarity-0.7.10
copying MANIFEST.in -> planarity-0.7.10
copying README.md -> planarity-0.7.10
copying pyproject.toml -> planarity-0.7.10
copying setup.py -> planarity-0.7.10
copying doc/Makefile -> planarity-0.7.10/doc
copying doc/source/conf.py -> planarity-0.7.10/doc/source
copying doc/source/index.rst -> planarity-0.7.10/doc/source
copying doc/source/reference/index.rst -> planarity-0.7.10/doc/source/reference
copying doc/sphinxext/LICENSE.txt -> planarity-0.7.10/doc/sphinxext
copying doc/sphinxext/docscrape.py -> planarity-0.7.10/doc/sphinxext
copying doc/sphinxext/docscrape_sphinx.py -> planarity-0.7.10/doc/sphinxext
copying doc/sphinxext/numpydoc.py -> planarity-0.7.10/doc/sphinxext
copying examples/ascii.py -> planarity-0.7.10/examples
copying examples/graph_formats.py -> planarity-0.7.10/examples
copying examples/kuratowski.py -> planarity-0.7.10/examples
copying examples/networkx_draw.py -> planarity-0.7.10/examples
copying examples/networkx_interface.py -> planarity-0.7.10/examples
copying examples/pgraph_class.py -> planarity-0.7.10/examples
copying examples/write_adjlist.py -> planarity-0.7.10/examples
copying planarity/__init__.py -> planarity-0.7.10/planarity
copying planarity.egg-info/PKG-INFO -> planarity-0.7.10/planarity.egg-info
copying planarity.egg-info/SOURCES.txt -> planarity-0.7.10/planarity.egg-info
copying planarity.egg-info/dependency_links.txt -> planarity-0.7.10/planarity.egg-info
copying planarity.egg-info/top_level.txt -> planarity-0.7.10/planarity.egg-info
copying planarity/c/LICENSE.TXT -> planarity-0.7.10/planarity/c
copying planarity/c/README -> planarity-0.7.10/planarity/c
copying planarity/c/graphLib/graphDFSUtils.c -> planarity-0.7.10/planarity/c/graphLib
copying planarity/c/graphLib/graphUtils.c -> planarity-0.7.10/planarity/c/graphLib
copying planarity/c/graphLib/extensionSystem/graphExtensions.c -> planarity-0.7.10/planarity/c/graphLib/extensionSystem
copying planarity/c/graphLib/homeomorphSearch/graphK23Search.c -> planarity-0.7.10/planarity/c/graphLib/homeomorphSearch
copying planarity/c/graphLib/homeomorphSearch/graphK23Search_Extensions.c -> planarity-0.7.10/planarity/c/graphLib/homeomorphSearch
copying planarity/c/graphLib/homeomorphSearch/graphK33Search.c -> planarity-0.7.10/planarity/c/graphLib/homeomorphSearch
copying planarity/c/graphLib/homeomorphSearch/graphK33Search_Extensions.c -> planarity-0.7.10/planarity/c/graphLib/homeomorphSearch
copying planarity/c/graphLib/homeomorphSearch/graphK4Search.c -> planarity-0.7.10/planarity/c/graphLib/homeomorphSearch
copying planarity/c/graphLib/homeomorphSearch/graphK4Search_Extensions.c -> planarity-0.7.10/planarity/c/graphLib/homeomorphSearch
copying planarity/c/graphLib/io/g6-api-utilities.c -> planarity-0.7.10/planarity/c/graphLib/io
copying planarity/c/graphLib/io/g6-read-iterator.c -> planarity-0.7.10/planarity/c/graphLib/io
copying planarity/c/graphLib/io/g6-write-iterator.c -> planarity-0.7.10/planarity/c/graphLib/io
copying planarity/c/graphLib/io/graphIO.c -> planarity-0.7.10/planarity/c/graphLib/io
copying planarity/c/graphLib/io/strOrFile.c -> planarity-0.7.10/planarity/c/graphLib/io
copying planarity/c/graphLib/io/strbuf.c -> planarity-0.7.10/planarity/c/graphLib/io
copying planarity/c/graphLib/lowLevelUtils/apiutils.c -> planarity-0.7.10/planarity/c/graphLib/lowLevelUtils
copying planarity/c/graphLib/lowLevelUtils/listcoll.c -> planarity-0.7.10/planarity/c/graphLib/lowLevelUtils
copying planarity/c/graphLib/lowLevelUtils/stack.c -> planarity-0.7.10/planarity/c/graphLib/lowLevelUtils
copying planarity/c/graphLib/planarityRelated/graphDrawPlanar.c -> planarity-0.7.10/planarity/c/graphLib/planarityRelated
copying planarity/c/graphLib/planarityRelated/graphDrawPlanar_Extensions.c -> planarity-0.7.10/planarity/c/graphLib/planarityRelated
copying planarity/c/graphLib/planarityRelated/graphEmbed.c -> planarity-0.7.10/planarity/c/graphLib/planarityRelated
copying planarity/c/graphLib/planarityRelated/graphIsolator.c -> planarity-0.7.10/planarity/c/graphLib/planarityRelated
copying planarity/c/graphLib/planarityRelated/graphNonplanar.c -> planarity-0.7.10/planarity/c/graphLib/planarityRelated
copying planarity/c/graphLib/planarityRelated/graphOuterplanarObstruction.c -> planarity-0.7.10/planarity/c/graphLib/planarityRelated
copying planarity/c/graphLib/planarityRelated/graphTests.c -> planarity-0.7.10/planarity/c/graphLib/planarityRelated
copying planarity/classic/__init__.py -> planarity-0.7.10/planarity/classic
copying planarity/classic/cplanarity.pxd -> planarity-0.7.10/planarity/classic
copying planarity/classic/planarity.c -> planarity-0.7.10/planarity/classic
copying planarity/classic/planarity.pyx -> planarity-0.7.10/planarity/classic
copying planarity/classic/planarity_functions.py -> planarity-0.7.10/planarity/classic
copying planarity/classic/planarity_networkx.py -> planarity-0.7.10/planarity/classic
copying planarity/full/__init__.py -> planarity-0.7.10/planarity/full
copying planarity/full/cappconst.pxd -> planarity-0.7.10/planarity/full
copying planarity/full/cg6IterationDefs.pxd -> planarity-0.7.10/planarity/full
copying planarity/full/cgraphLib.pxd -> planarity-0.7.10/planarity/full
copying planarity/full/g6IterationUtils.c -> planarity-0.7.10/planarity/full
copying planarity/full/g6IterationUtils.pyx -> planarity-0.7.10/planarity/full
copying planarity/full/graph.c -> planarity-0.7.10/planarity/full
copying planarity/full/graph.pyx -> planarity-0.7.10/planarity/full
copying planarity/full/planarity_app_utils.py -> planarity-0.7.10/planarity/full
copying tests/test_planarity.py -> planarity-0.7.10/tests
copying tests/test_planarity_networkx.py -> planarity-0.7.10/tests
copying planarity.egg-info/SOURCES.txt -> planarity-0.7.10/planarity.egg-info
Writing planarity-0.7.10/setup.cfg
Creating tar archive
removing 'planarity-0.7.10' (and everything under it)
* Building wheel from sdist
* Creating isolated environment: venv+pip...
* Installing packages in isolated environment:
  - cython
  - setuptools
* Getting build dependencies for wheel...
Compiling planarity/classic/planarity.pyx because it depends on /private/var/folders/t1/2kcfnw2902x6gjpfcq7l1r800000gn/T/build-env-i2tfdikt/lib/python3.14/site-packages/Cython/Includes/libc/stdlib.pxd.
[1/1] Cythonizing planarity/classic/planarity.pyx
running egg_info
writing planarity.egg-info/PKG-INFO
writing dependency_links to planarity.egg-info/dependency_links.txt
writing top-level names to planarity.egg-info/top_level.txt
reading manifest file 'planarity.egg-info/SOURCES.txt'
reading manifest template 'MANIFEST.in'
warning: no files found matching '*.gz' under directory 'examples'
warning: no files found matching '*.html' under directory 'doc'
warning: no previously-included files matching '*~' found anywhere in distribution
warning: no previously-included files matching '*.pyc' found anywhere in distribution
warning: no previously-included files matching '.git' found anywhere in distribution
no previously-included directories found matching 'doc/build'
adding license file 'LICENSE.txt'
writing manifest file 'planarity.egg-info/SOURCES.txt'
* Building wheel...
running bdist_wheel
running build
running build_py
creating build/lib.macosx-10.15-universal2-cpython-314/planarity
copying planarity/__init__.py -> build/lib.macosx-10.15-universal2-cpython-314/planarity
creating build/lib.macosx-10.15-universal2-cpython-314/planarity/classic
copying planarity/classic/planarity_networkx.py -> build/lib.macosx-10.15-universal2-cpython-314/planarity/classic
copying planarity/classic/__init__.py -> build/lib.macosx-10.15-universal2-cpython-314/planarity/classic
copying planarity/classic/planarity_functions.py -> build/lib.macosx-10.15-universal2-cpython-314/planarity/classic
creating build/lib.macosx-10.15-universal2-cpython-314/planarity/full
copying planarity/full/__init__.py -> build/lib.macosx-10.15-universal2-cpython-314/planarity/full
copying planarity/full/planarity_app_utils.py -> build/lib.macosx-10.15-universal2-cpython-314/planarity/full
running build_ext
building 'planarity.classic.planarity' extension
creating build/temp.macosx-10.15-universal2-cpython-314/planarity/c/graphLib/extensionSystem
creating build/temp.macosx-10.15-universal2-cpython-314/planarity/c/graphLib/homeomorphSearch
creating build/temp.macosx-10.15-universal2-cpython-314/planarity/c/graphLib/io
creating build/temp.macosx-10.15-universal2-cpython-314/planarity/c/graphLib/lowLevelUtils
creating build/temp.macosx-10.15-universal2-cpython-314/planarity/c/graphLib/planarityRelated
creating build/temp.macosx-10.15-universal2-cpython-314/planarity/classic
clang -fno-strict-overflow -Wsign-compare -Wunreachable-code -fno-common -dynamic -DNDEBUG -g -O3 -Wall -arch arm64 -arch x86_64 -I/opt/homebrew/opt/llvm/include -Iplanarity/c/graphLib -I/private/var/folders/t1/2kcfnw2902x6gjpfcq7l1r800000gn/T/build-env-i2tfdikt/include -I/Library/Frameworks/Python.framework/Versions/3.14/include/python3.14 -c planarity/c/graphLib/extensionSystem/graphExtensions.c -o build/temp.macosx-10.15-universal2-cpython-314/planarity/c/graphLib/extensionSystem/graphExtensions.o
planarity/c/graphLib/extensionSystem/graphExtensions.c:10:10: fatal error: '../lowLevelUtils/appconst.h' file not found
   10 | #include "../lowLevelUtils/appconst.h"
      |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1 error generated.
error: command '/opt/homebrew/opt/llvm/bin/clang' failed with exit code 1

ERROR Backend subprocess exited when trying to invoke build_wheel
  1. If I use the flags python -m build --sdist, then only the source distribution is successfully built
Logs from python -m build --sdist
(.buildenv) wbkboyer@Wandas-MacBook-Pro planarity % python -m build --sdist
* Creating isolated environment: venv+pip...
* Installing packages in isolated environment:
  - cython
  - setuptools
* Getting build dependencies for sdist...
Compiling planarity/classic/planarity.pyx because it changed.
Compiling planarity/full/g6IterationUtils.pyx because it changed.
Compiling planarity/full/graph.pyx because it changed.
[1/3] Cythonizing planarity/classic/planarity.pyx
[2/3] Cythonizing planarity/full/g6IterationUtils.pyx
[3/3] Cythonizing planarity/full/graph.pyx
running egg_info
creating planarity.egg-info
writing planarity.egg-info/PKG-INFO
writing dependency_links to planarity.egg-info/dependency_links.txt
writing top-level names to planarity.egg-info/top_level.txt
writing manifest file 'planarity.egg-info/SOURCES.txt'
reading manifest file 'planarity.egg-info/SOURCES.txt'
reading manifest template 'MANIFEST.in'
warning: no files found matching '*.gz' under directory 'examples'
warning: no previously-included files matching '*~' found anywhere in distribution
warning: no previously-included files matching '*.pyc' found anywhere in distribution
warning: no previously-included files matching '.git' found anywhere in distribution
adding license file 'LICENSE.txt'
writing manifest file 'planarity.egg-info/SOURCES.txt'
* Building sdist...
running sdist
running egg_info
writing planarity.egg-info/PKG-INFO
writing dependency_links to planarity.egg-info/dependency_links.txt
writing top-level names to planarity.egg-info/top_level.txt
reading manifest file 'planarity.egg-info/SOURCES.txt'
reading manifest template 'MANIFEST.in'
warning: no files found matching '*.gz' under directory 'examples'
warning: no previously-included files matching '*~' found anywhere in distribution
warning: no previously-included files matching '*.pyc' found anywhere in distribution
warning: no previously-included files matching '.git' found anywhere in distribution
adding license file 'LICENSE.txt'
writing manifest file 'planarity.egg-info/SOURCES.txt'
running check
creating planarity-0.7.11
creating planarity-0.7.11/doc
creating planarity-0.7.11/doc/source
creating planarity-0.7.11/doc/source/reference
creating planarity-0.7.11/doc/sphinxext
creating planarity-0.7.11/examples/classic
creating planarity-0.7.11/examples/full
creating planarity-0.7.11/planarity
creating planarity-0.7.11/planarity.egg-info
creating planarity-0.7.11/planarity/c
creating planarity-0.7.11/planarity/c/graphLib
creating planarity-0.7.11/planarity/c/graphLib/extensionSystem
creating planarity-0.7.11/planarity/c/graphLib/homeomorphSearch
creating planarity-0.7.11/planarity/c/graphLib/io
creating planarity-0.7.11/planarity/c/graphLib/lowLevelUtils
creating planarity-0.7.11/planarity/c/graphLib/planarityRelated
creating planarity-0.7.11/planarity/classic
creating planarity-0.7.11/planarity/full
creating planarity-0.7.11/tests
copying files to planarity-0.7.11...
copying LICENSE.txt -> planarity-0.7.11
copying MANIFEST.in -> planarity-0.7.11
copying README.md -> planarity-0.7.11
copying pyproject.toml -> planarity-0.7.11
copying setup.py -> planarity-0.7.11
copying doc/Makefile -> planarity-0.7.11/doc
copying doc/source/conf.py -> planarity-0.7.11/doc/source
copying doc/source/index.rst -> planarity-0.7.11/doc/source
copying doc/source/reference/index.rst -> planarity-0.7.11/doc/source/reference
copying doc/sphinxext/LICENSE.txt -> planarity-0.7.11/doc/sphinxext
copying doc/sphinxext/docscrape.py -> planarity-0.7.11/doc/sphinxext
copying doc/sphinxext/docscrape_sphinx.py -> planarity-0.7.11/doc/sphinxext
copying doc/sphinxext/numpydoc.py -> planarity-0.7.11/doc/sphinxext
copying examples/classic/ascii.py -> planarity-0.7.11/examples/classic
copying examples/classic/graph_formats.py -> planarity-0.7.11/examples/classic
copying examples/classic/kuratowski.py -> planarity-0.7.11/examples/classic
copying examples/classic/networkx_draw.py -> planarity-0.7.11/examples/classic
copying examples/classic/networkx_interface.py -> planarity-0.7.11/examples/classic
copying examples/classic/pgraph_class.py -> planarity-0.7.11/examples/classic
copying examples/classic/write_adjlist.py -> planarity-0.7.11/examples/classic
copying examples/full/planarity_app_utils.py -> planarity-0.7.11/examples/full
copying examples/full/test_specific_graph.py -> planarity-0.7.11/examples/full
copying planarity/__init__.py -> planarity-0.7.11/planarity
copying planarity.egg-info/PKG-INFO -> planarity-0.7.11/planarity.egg-info
copying planarity.egg-info/SOURCES.txt -> planarity-0.7.11/planarity.egg-info
copying planarity.egg-info/dependency_links.txt -> planarity-0.7.11/planarity.egg-info
copying planarity.egg-info/top_level.txt -> planarity-0.7.11/planarity.egg-info
copying planarity/c/LICENSE.TXT -> planarity-0.7.11/planarity/c
copying planarity/c/README -> planarity-0.7.11/planarity/c
copying planarity/c/graphLib/graphDFSUtils.c -> planarity-0.7.11/planarity/c/graphLib
copying planarity/c/graphLib/graphUtils.c -> planarity-0.7.11/planarity/c/graphLib
copying planarity/c/graphLib/extensionSystem/graphExtensions.c -> planarity-0.7.11/planarity/c/graphLib/extensionSystem
copying planarity/c/graphLib/homeomorphSearch/graphK23Search.c -> planarity-0.7.11/planarity/c/graphLib/homeomorphSearch
copying planarity/c/graphLib/homeomorphSearch/graphK23Search_Extensions.c -> planarity-0.7.11/planarity/c/graphLib/homeomorphSearch
copying planarity/c/graphLib/homeomorphSearch/graphK33Search.c -> planarity-0.7.11/planarity/c/graphLib/homeomorphSearch
copying planarity/c/graphLib/homeomorphSearch/graphK33Search_Extensions.c -> planarity-0.7.11/planarity/c/graphLib/homeomorphSearch
copying planarity/c/graphLib/homeomorphSearch/graphK4Search.c -> planarity-0.7.11/planarity/c/graphLib/homeomorphSearch
copying planarity/c/graphLib/homeomorphSearch/graphK4Search_Extensions.c -> planarity-0.7.11/planarity/c/graphLib/homeomorphSearch
copying planarity/c/graphLib/io/g6-api-utilities.c -> planarity-0.7.11/planarity/c/graphLib/io
copying planarity/c/graphLib/io/g6-read-iterator.c -> planarity-0.7.11/planarity/c/graphLib/io
copying planarity/c/graphLib/io/g6-write-iterator.c -> planarity-0.7.11/planarity/c/graphLib/io
copying planarity/c/graphLib/io/graphIO.c -> planarity-0.7.11/planarity/c/graphLib/io
copying planarity/c/graphLib/io/strOrFile.c -> planarity-0.7.11/planarity/c/graphLib/io
copying planarity/c/graphLib/io/strbuf.c -> planarity-0.7.11/planarity/c/graphLib/io
copying planarity/c/graphLib/lowLevelUtils/apiutils.c -> planarity-0.7.11/planarity/c/graphLib/lowLevelUtils
copying planarity/c/graphLib/lowLevelUtils/listcoll.c -> planarity-0.7.11/planarity/c/graphLib/lowLevelUtils
copying planarity/c/graphLib/lowLevelUtils/stack.c -> planarity-0.7.11/planarity/c/graphLib/lowLevelUtils
copying planarity/c/graphLib/planarityRelated/graphDrawPlanar.c -> planarity-0.7.11/planarity/c/graphLib/planarityRelated
copying planarity/c/graphLib/planarityRelated/graphDrawPlanar_Extensions.c -> planarity-0.7.11/planarity/c/graphLib/planarityRelated
copying planarity/c/graphLib/planarityRelated/graphEmbed.c -> planarity-0.7.11/planarity/c/graphLib/planarityRelated
copying planarity/c/graphLib/planarityRelated/graphIsolator.c -> planarity-0.7.11/planarity/c/graphLib/planarityRelated
copying planarity/c/graphLib/planarityRelated/graphNonplanar.c -> planarity-0.7.11/planarity/c/graphLib/planarityRelated
copying planarity/c/graphLib/planarityRelated/graphOuterplanarObstruction.c -> planarity-0.7.11/planarity/c/graphLib/planarityRelated
copying planarity/c/graphLib/planarityRelated/graphTests.c -> planarity-0.7.11/planarity/c/graphLib/planarityRelated
copying planarity/classic/__init__.py -> planarity-0.7.11/planarity/classic
copying planarity/classic/cplanarity.pxd -> planarity-0.7.11/planarity/classic
copying planarity/classic/planarity.c -> planarity-0.7.11/planarity/classic
copying planarity/classic/planarity.pyx -> planarity-0.7.11/planarity/classic
copying planarity/classic/planarity_functions.py -> planarity-0.7.11/planarity/classic
copying planarity/classic/planarity_networkx.py -> planarity-0.7.11/planarity/classic
copying planarity/full/__init__.py -> planarity-0.7.11/planarity/full
copying planarity/full/cappconst.pxd -> planarity-0.7.11/planarity/full
copying planarity/full/cg6IterationDefs.pxd -> planarity-0.7.11/planarity/full
copying planarity/full/cgraphLib.pxd -> planarity-0.7.11/planarity/full
copying planarity/full/g6IterationUtils.c -> planarity-0.7.11/planarity/full
copying planarity/full/g6IterationUtils.pyx -> planarity-0.7.11/planarity/full
copying planarity/full/graph.c -> planarity-0.7.11/planarity/full
copying planarity/full/graph.pyx -> planarity-0.7.11/planarity/full
copying tests/test_planarity.py -> planarity-0.7.11/tests
copying tests/test_planarity_networkx.py -> planarity-0.7.11/tests
copying planarity.egg-info/SOURCES.txt -> planarity-0.7.11/planarity.egg-info
Writing planarity-0.7.11/setup.cfg
Creating tar archive
removing 'planarity-0.7.11' (and everything under it)
Successfully built planarity-0.7.11.tar.gz
  1. If I use the flags python -m build --sdist --wheel, then both the source distribution and wheel are built

python-build_sdist-wheel.txt

  1. Publishing the source distribution only to TestPyPI and then installing to a fresh virtual environment succeeds, and examples/ + test_all_graphs.py + edge_deletion_analysis.py all work (see the bottom of the description of Issue #37 - Update planarity/c/graphLib/ contents + corresponding .pxd definition files + .pyx Cython source files in preparation for EAPS 4.0.2 release #38)

Expected behaviour

I expected to see the same output as was documented in this comment on #28 , i.e. Successfully built planarity-XXX.XXX.XXX.tar.gz and planarity-XXX.XXX.XXX-cp314-cp314-macosx_10_15_universal2.whl since I'm running this on MacOS.

Environment

  • OS: MacOS 26.3.1 (a) (25D771280a)
  • Python Version: Python 3.14.2

Metadata

Metadata

Assignees

Labels

Type

No fields configured for Bug.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions