geoarrow-c 0.4.0


pip install geoarrow-c

  Latest version

Released: Sep 29, 2026


Meta
Author: Dewey Dunnington
Requires Python: >=3.9

Classifiers

geoarrow-c for Python

The geoarrow-c Python package provides bindings to the geoarrow-c implementation of the GeoArrow specification. Its primary purpose is to serve as a dependency to geoarrow-python where needed.

Installation

Python bindings for geoarrow are available on PyPI and can be installed with:

pip install geoarrow-c

You can install a development version with:

python -m pip install "git+https://github.com/geoarrow/geoarrow-c.git#egg=geoarrow-c&subdirectory=python/geoarrow-c"

If you can import the namespace, you're good to go!

import geoarrow.c

Example

Most users should use the higher-level geoarrow-python bindings. The Python package also provides thin Arrow PyCapsule protocol wrappers around the compute kernels exposed by geoarrow-c:

import geoarrow.pyarrow as ga
from geoarrow.c import AggregateFunction, ScalarFunction

input_pyarrow = ga.array(["POINT (0 1)"])
format_wkt = ScalarFunction("format_wkt", precision=3)
formatted = format_wkt(input_pyarrow)

box_agg = AggregateFunction("box_agg")
result = box_agg(input_pyarrow)

Each call infers the input type from the array or stream and creates a fresh kernel. Scalar functions preserve stream batch boundaries; aggregate functions combine all batches into a single result array. Results implement the Arrow PyCapsule protocol and can be imported into an Arrow implementation.

Type specification integration

The arrow_to_type_spec() and type_spec_to_arrow() functions bridge geoarrow.types.TypeSpec objects and the Arrow C Data Interface. This integration requires the geoarrow-types package but does not require a particular Arrow implementation.

type_spec_to_arrow() returns a SchemaHolder implementing __arrow_c_schema__:

import geoarrow.types as gt
from geoarrow.c import type_spec_to_arrow

type_spec = gt.linestring(
    dimensions=gt.Dimensions.XYZ,
    coord_type=gt.CoordType.INTERLEAVED,
    crs="EPSG:4326",
)
schema = type_spec_to_arrow(type_spec)
schema_capsule = schema.__arrow_c_schema__()

arrow_to_type_spec() accepts a SchemaHolder or any other __arrow_c_schema__ provider and reconstructs the corresponding TypeSpec:

from geoarrow.c import arrow_to_type_spec

roundtripped = arrow_to_type_spec(schema)
assert roundtripped == type_spec.with_defaults().canonicalize()

Building

Python bindings for nanoarrow are managed with setuptools. This means you can build the project using:

git clone https://github.com/geoarrow/geoarrow-c.git
cd python
pip install -e geoarrow-c/

Tests use pytest:

# Install dependencies
cd python/geoarrow-c
pip install -e ".[test]"

# Run tests
pytest

Wheel compatibility matrix

Platform CPython 3.9 CPython 3.10 CPython 3.11 CPython 3.12 CPython 3.13 CPython 3.14 CPython 3.15 CPython (additional flags: t) 3.14 CPython (additional flags: t) 3.15
macosx_10_13_x86_64
macosx_10_15_x86_64
macosx_10_9_x86_64
macosx_11_0_arm64
manylinux_2_24_aarch64
manylinux_2_24_x86_64
manylinux_2_28_aarch64
manylinux_2_28_x86_64
musllinux_1_2_aarch64
musllinux_1_2_x86_64
pyemscripten_2025_0_wasm32
pyemscripten_2026_0_wasm32
pyemscripten_2026_5_wasm32
win32
win_amd64
win_arm64

Files in release

geoarrow_c-0.4.0-cp310-cp310-macosx_10_9_x86_64.whl (615.5KiB)
geoarrow_c-0.4.0-cp310-cp310-macosx_11_0_arm64.whl (606.1KiB)
geoarrow_c-0.4.0-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl (2.1MiB)
geoarrow_c-0.4.0-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (2.1MiB)
geoarrow_c-0.4.0-cp310-cp310-musllinux_1_2_aarch64.whl (3.0MiB)
geoarrow_c-0.4.0-cp310-cp310-musllinux_1_2_x86_64.whl (3.1MiB)
geoarrow_c-0.4.0-cp310-cp310-win32.whl (462.8KiB)
geoarrow_c-0.4.0-cp310-cp310-win_amd64.whl (491.1KiB)
geoarrow_c-0.4.0-cp310-cp310-win_arm64.whl (467.5KiB)
geoarrow_c-0.4.0-cp311-cp311-macosx_10_9_x86_64.whl (616.0KiB)
geoarrow_c-0.4.0-cp311-cp311-macosx_11_0_arm64.whl (606.6KiB)
geoarrow_c-0.4.0-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl (2.1MiB)
geoarrow_c-0.4.0-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (2.2MiB)
geoarrow_c-0.4.0-cp311-cp311-musllinux_1_2_aarch64.whl (3.0MiB)
geoarrow_c-0.4.0-cp311-cp311-musllinux_1_2_x86_64.whl (3.1MiB)
geoarrow_c-0.4.0-cp311-cp311-win32.whl (461.9KiB)
geoarrow_c-0.4.0-cp311-cp311-win_amd64.whl (490.8KiB)
geoarrow_c-0.4.0-cp311-cp311-win_arm64.whl (467.1KiB)
geoarrow_c-0.4.0-cp312-cp312-macosx_10_13_x86_64.whl (616.0KiB)
geoarrow_c-0.4.0-cp312-cp312-macosx_11_0_arm64.whl (606.5KiB)
geoarrow_c-0.4.0-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl (2.1MiB)
geoarrow_c-0.4.0-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (2.1MiB)
geoarrow_c-0.4.0-cp312-cp312-musllinux_1_2_aarch64.whl (3.0MiB)
geoarrow_c-0.4.0-cp312-cp312-musllinux_1_2_x86_64.whl (3.1MiB)
geoarrow_c-0.4.0-cp312-cp312-win32.whl (461.9KiB)
geoarrow_c-0.4.0-cp312-cp312-win_amd64.whl (491.7KiB)
geoarrow_c-0.4.0-cp312-cp312-win_arm64.whl (468.9KiB)
geoarrow_c-0.4.0-cp313-cp313-macosx_10_13_x86_64.whl (620.1KiB)
geoarrow_c-0.4.0-cp313-cp313-macosx_11_0_arm64.whl (609.4KiB)
geoarrow_c-0.4.0-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl (2.1MiB)
geoarrow_c-0.4.0-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (2.2MiB)
geoarrow_c-0.4.0-cp313-cp313-musllinux_1_2_aarch64.whl (3.0MiB)
geoarrow_c-0.4.0-cp313-cp313-musllinux_1_2_x86_64.whl (3.1MiB)
geoarrow_c-0.4.0-cp313-cp313-pyemscripten_2025_0_wasm32.whl (475.0KiB)
geoarrow_c-0.4.0-cp313-cp313-win32.whl (462.7KiB)
geoarrow_c-0.4.0-cp313-cp313-win_amd64.whl (493.2KiB)
geoarrow_c-0.4.0-cp313-cp313-win_arm64.whl (469.1KiB)
geoarrow_c-0.4.0-cp314-cp314-macosx_10_15_x86_64.whl (619.1KiB)
geoarrow_c-0.4.0-cp314-cp314-macosx_11_0_arm64.whl (609.7KiB)
geoarrow_c-0.4.0-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl (2.1MiB)
geoarrow_c-0.4.0-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (2.2MiB)
geoarrow_c-0.4.0-cp314-cp314-musllinux_1_2_aarch64.whl (3.0MiB)
geoarrow_c-0.4.0-cp314-cp314-musllinux_1_2_x86_64.whl (3.1MiB)
geoarrow_c-0.4.0-cp314-cp314-pyemscripten_2026_0_wasm32.whl (474.9KiB)
geoarrow_c-0.4.0-cp314-cp314-win32.whl (467.2KiB)
geoarrow_c-0.4.0-cp314-cp314-win_amd64.whl (500.2KiB)
geoarrow_c-0.4.0-cp314-cp314-win_arm64.whl (476.0KiB)
geoarrow_c-0.4.0-cp314-cp314t-macosx_10_15_x86_64.whl (625.8KiB)
geoarrow_c-0.4.0-cp314-cp314t-macosx_11_0_arm64.whl (619.6KiB)
geoarrow_c-0.4.0-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl (2.2MiB)
geoarrow_c-0.4.0-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (2.2MiB)
geoarrow_c-0.4.0-cp314-cp314t-musllinux_1_2_aarch64.whl (3.0MiB)
geoarrow_c-0.4.0-cp314-cp314t-musllinux_1_2_x86_64.whl (3.1MiB)
geoarrow_c-0.4.0-cp314-cp314t-win32.whl (476.4KiB)
geoarrow_c-0.4.0-cp314-cp314t-win_amd64.whl (509.3KiB)
geoarrow_c-0.4.0-cp314-cp314t-win_arm64.whl (484.5KiB)
geoarrow_c-0.4.0-cp315-cp315-macosx_10_15_x86_64.whl (618.8KiB)
geoarrow_c-0.4.0-cp315-cp315-macosx_11_0_arm64.whl (609.4KiB)
geoarrow_c-0.4.0-cp315-cp315-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl (2.1MiB)
geoarrow_c-0.4.0-cp315-cp315-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (2.2MiB)
geoarrow_c-0.4.0-cp315-cp315-musllinux_1_2_aarch64.whl (3.0MiB)
geoarrow_c-0.4.0-cp315-cp315-musllinux_1_2_x86_64.whl (3.1MiB)
geoarrow_c-0.4.0-cp315-cp315-pyemscripten_2026_5_wasm32.whl (474.8KiB)
geoarrow_c-0.4.0-cp315-cp315-win32.whl (467.0KiB)
geoarrow_c-0.4.0-cp315-cp315-win_amd64.whl (499.9KiB)
geoarrow_c-0.4.0-cp315-cp315-win_arm64.whl (475.7KiB)
geoarrow_c-0.4.0-cp315-cp315t-macosx_10_15_x86_64.whl (625.0KiB)
geoarrow_c-0.4.0-cp315-cp315t-macosx_11_0_arm64.whl (620.2KiB)
geoarrow_c-0.4.0-cp315-cp315t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl (2.2MiB)
geoarrow_c-0.4.0-cp315-cp315t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (2.2MiB)
geoarrow_c-0.4.0-cp315-cp315t-musllinux_1_2_aarch64.whl (3.0MiB)
geoarrow_c-0.4.0-cp315-cp315t-musllinux_1_2_x86_64.whl (3.1MiB)
geoarrow_c-0.4.0-cp315-cp315t-win32.whl (475.9KiB)
geoarrow_c-0.4.0-cp315-cp315t-win_amd64.whl (508.5KiB)
geoarrow_c-0.4.0-cp315-cp315t-win_arm64.whl (483.9KiB)
geoarrow_c-0.4.0-cp39-cp39-macosx_10_9_x86_64.whl (615.7KiB)
geoarrow_c-0.4.0-cp39-cp39-macosx_11_0_arm64.whl (606.3KiB)
geoarrow_c-0.4.0-cp39-cp39-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl (2.1MiB)
geoarrow_c-0.4.0-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (2.1MiB)
geoarrow_c-0.4.0-cp39-cp39-musllinux_1_2_aarch64.whl (3.0MiB)
geoarrow_c-0.4.0-cp39-cp39-musllinux_1_2_x86_64.whl (3.1MiB)
geoarrow_c-0.4.0-cp39-cp39-win32.whl (462.8KiB)
geoarrow_c-0.4.0-cp39-cp39-win_amd64.whl (491.2KiB)
geoarrow_c-0.4.0-cp39-cp39-win_arm64.whl (467.6KiB)
geoarrow_c-0.4.0.tar.gz (317.5KiB)
Extras:
Dependencies: