Skip to content

ValueError: Can't create geoarrow.types.Crs from 4326 #73

Open

Description

@kylebarron

This might be expected if geoarrow-types hasn't yet updated to the latest support for non-projjson CRS representations in 0.2?

If it's not expected, I can create a more detailed repro. I don't have an easy repro here because passing a crs argument to geoarrow-rust will automatically use pyproj to convert to PROJJSON. In geodatafusion I'm assigning a CRS with SRID 4326 when calling ST_Point(x, y, 4326). You can see my SQL call here: https://github.com/developmentseed/lonboard/blob/751f1a1a3d35d078758f51c4ef422e04dd45bd01/examples/nyc_taxi_trips.py#L137-L138

Traceback (most recent call last):
  File "/Users/kyle/.cache/uv/archive-v0/N2xYiaCnXio3dQ-xoXvod/lib/python3.12/site-packages/marimo/_output/formatting.py", line 231, in try_format
    mimetype, data = formatter(obj)
                     ^^^^^^^^^^^^^^
  File "/Users/kyle/.cache/uv/archive-v0/N2xYiaCnXio3dQ-xoXvod/lib/python3.12/site-packages/marimo/_output/formatters/repr_formatters.py", line 107, in f_repr
    contents = method()
               ^^^^^^^^
  File "/Users/kyle/.cache/uv/archive-v0/N2xYiaCnXio3dQ-xoXvod/lib/python3.12/site-packages/datafusion/dataframe.py", line 327, in _repr_html_
    return self.df._repr_html_()
           ^^^^^^^^^^^^^^^^^^^^^
  File "/Users/kyle/.cache/uv/archive-v0/N2xYiaCnXio3dQ-xoXvod/lib/python3.12/site-packages/datafusion/dataframe_formatter.py", line 303, in format_html
    html.extend(self._build_table_header(schema))
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/kyle/.cache/uv/archive-v0/N2xYiaCnXio3dQ-xoXvod/lib/python3.12/site-packages/datafusion/dataframe_formatter.py", line 379, in _build_table_header
    for field in schema:
                 ^^^^^^
  File "pyarrow/types.pxi", line 2907, in __iter__
  File "pyarrow/types.pxi", line 2903, in pyarrow.lib.Schema.__getitem__
  File "pyarrow/types.pxi", line 3209, in pyarrow.lib.Schema._field
  File "pyarrow/public-api.pxi", line 185, in pyarrow.lib.pyarrow_wrap_field
  File "pyarrow/types.pxi", line 2495, in pyarrow.lib.Field.init
  File "pyarrow/public-api.pxi", line 129, in pyarrow.lib.pyarrow_wrap_data_type
  File "/Users/kyle/.cache/uv/archive-v0/N2xYiaCnXio3dQ-xoXvod/lib/python3.12/site-packages/geoarrow/types/type_pyarrow.py", line 62, in __arrow_ext_deserialize__
    return _deserialize_storage(
           ^^^^^^^^^^^^^^^^^^^^^
  File "/Users/kyle/.cache/uv/archive-v0/N2xYiaCnXio3dQ-xoXvod/lib/python3.12/site-packages/geoarrow/types/type_pyarrow.py", line 619, in _deserialize_storage
    spec = TypeSpec.from_extension_metadata(extension_metadata).with_defaults(spec)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/kyle/.cache/uv/archive-v0/N2xYiaCnXio3dQ-xoXvod/lib/python3.12/site-packages/geoarrow/types/type_spec.py", line 275, in from_extension_metadata
    out_crs = crs.create(metadata["crs"])
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/kyle/.cache/uv/archive-v0/N2xYiaCnXio3dQ-xoXvod/lib/python3.12/site-packages/geoarrow/types/crs.py", line 322, in create
    raise ValueError(f"Can't create geoarrow.types.Crs from {obj}")
ValueError: Can't create geoarrow.types.Crs from 4326

Activity

  1. paleolimbot commented on Sep 18, 2025

    @paleolimbot
    Contributor

    Thanks! That should definitely work.

    In SedonaDB we prefix it with EPSG:4326 (i.e., we only support SRIDs that are EPSG codes, and we make that assumption explicit in the scalar function implementation rather than assume something downstream will interpret it correctly). We also have ST_Crs() and ST_SetCrs() to make it a bit easier to work with non EPSG things.

  2. kylebarron commented on Sep 18, 2025

    @kylebarron
    MemberAuthor

    Hmm, perhaps I should assume that input is always EPSG and assign the CRS as such.

    Then I would have:

    • {"crs_type": "authority_code", "crs": "EPSG:4326"}

    I believe currently I'm creating

    • {"crs_type": "srid", "crs": "4326"}

    I can verify this. But is this representation invalid? In terms of the spec there's not much validation around what the crs string should be formatted like here.

  3. paleolimbot commented on Sep 18, 2025

    @paleolimbot
    Contributor

    Yes, I think that was on purpose (on my part, anyway), to force that assumption to be made explicit. It was added to ensure that when we passed on SRIDs from other specifications where this wasn't explicit (cough, Parquet), we didn't insert any assumptions.

  4. kylebarron commented on Sep 18, 2025

    @kylebarron
    MemberAuthor

    Yes

    You're saying yes that is invalid? In the spec or in your implementation, or both?

    Is there some spec text we can change to clarify this?

    I think that was on purpose (on my part, anyway), to force that assumption to be made explicit. It was added to ensure that when we passed on SRIDs from other specifications where this wasn't explicit (cough, Parquet), we didn't insert any assumptions.

    So you're saying we should essentially always use authority_code and EPSG:4326, and essentially never use srid?

  5. paleolimbot commented on Sep 18, 2025

    @paleolimbot
    Contributor

    Sorry!

    • Your example code at the top shouldn't cause that error...any "string" should be propagated by geoarrow-python without erroring. Any "string" is also valid with respect to the spec, although obviously if you put in random stuff it's unlikely to be recognized correctly elsewhere.
    • Yes, the specification doesn't say anything about what an SRID is or is not. I think this is the right "spec" language.
    • I think for the purposes of your functions, when somebody types ST_SetSRID(geom, 1234), you should set the CRS to "EPSG:1234" (i.e., resolve and document that assumption in your function rather than assume on an interpretation somewhere else).
  6. kylebarron commented on Sep 19, 2025

    @kylebarron
    MemberAuthor

    Ok, thanks! That's good info.

    I'm still trying to ascertain if there's any bug here in geoarrow-types.

    crs.create("4326") # StringCrs(4326)
    
    crs.create(4326) # ValueError: Can't create geoarrow.types.Crs from 4326

    Perhaps I'm incorrectly saving it as an integer 👀

  7. paleolimbot commented on Sep 19, 2025

    @paleolimbot
    Contributor

    Ahh! That would make sense. geoarrow-types should still probably handle that even though it's theoreetically out of spec.

  8. kylebarron commented on Sep 19, 2025

    @kylebarron
    MemberAuthor

    Hmm

    https://github.com/datafusion-contrib/datafusion-geo/blob/171bdaf31069efe618371249e051e5b8eaa109d1/rust/geodatafusion/src/udf/native/constructors/point.rs#L80-L81
    https://github.com/geoarrow/geoarrow-rs/blob/338a08cd2f5f2b35df36453ec3ad6ef031dfb702/rust/geoarrow-schema/src/crs.rs#L101-L107

    I sure thought I was saving it as a string.

    This crashes the interpreter when trying to access the table schema. (Run with uv run script.py)

    # /// script
    # requires-python = ">=3.10"
    # dependencies = [
    #     "arro3-core",
    #     "geoarrow-types",
    #     "geodatafusion==0.1.1",
    #     "pyarrow",
    # ]
    # ///
    
    from __future__ import annotations
    
    import pyarrow as pa
    from datafusion import SessionContext
    from geoarrow.types.type_pyarrow import register_extension_types
    from geodatafusion import register_all
    
    register_extension_types()
    
    
    ctx = SessionContext()
    register_all(ctx)
    sql = "SELECT ST_Point(0, 1, 4326) as geom"
    df = ctx.sql(sql)
    print("converting to pyarrow table")
    table = pa.table(df)
    print("finished converting to pyarrow table")
    
    print("printing schema:")
    print(table.schema)
    print("finished printing schema")

    But this works just fine when I load it into arro3:

    # /// script
    # requires-python = ">=3.10"
    # dependencies = [
    #     "arro3-core",
    #     "geoarrow-types",
    #     "geodatafusion==0.1.1",
    #     "pyarrow",
    # ]
    # ///
    
    from __future__ import annotations
    
    from arro3.core import Table
    from datafusion import SessionContext
    from geodatafusion import register_all
    
    
    ctx = SessionContext()
    register_all(ctx)
    sql = "SELECT ST_Point(0, 1, 4326) as geom"
    df = ctx.sql(sql)
    print("converting to pyarrow table")
    table = Table(df)
    print("finished converting to pyarrow table")
    
    print("printing schema:")
    print(table.schema)
    print("finished printing schema")
    
    print("printing field metadata")
    print(table.schema.field(0).metadata_str)

    Run with uv run script.py I see:

    > uv run geodatafusion_pyarrow_test.py
    converting to pyarrow table
    finished converting to pyarrow table
    printing schema:
    arro3.core.Schema
    ------------
    geom: Struct(x Float64, y Float64)
    
    finished printing schema
    printing field metadata
    {'ARROW:extension:metadata': '{"crs":"4326","crs_type":"srid"}', 'ARROW:extension:name': 'geoarrow.point'}
    

    Is the issue that it should be

    {'ARROW:extension:metadata': {"crs":"4326","crs_type":"srid"}, 'ARROW:extension:name': 'geoarrow.point'}

    without encoding the JSON as a string?

    But the spec says

    When GeoArrow-encoded Arrays have the ARROW:extension:metadata metadata field set, it must be serialized as a UTF-8 encoded JSON object

  9. paleolimbot commented on Sep 19, 2025

    @paleolimbot
    Contributor

    I think you're doing the right thing here...I bet something funny is going on somewhere you're not in control of (hopefully not geoarrow-c, since theoretically that shouldn't be in play here). With that script I can probably get a backtrace (if the crash is happening in geoarrow-c or pyarrow).

  10. kylebarron commented on Sep 19, 2025

    @kylebarron
    MemberAuthor

    This is happening just with geoarrow-types, where geoarrow-c isn't even a dependency I don't think?

  11. paleolimbot commented on Sep 19, 2025

    @paleolimbot
    Contributor

    In theory, it's not a dependency!

  12. kylebarron commented on Sep 19, 2025

    @kylebarron
    MemberAuthor

    Just verified it's not. uv lock --script script.py; cat script.py.lock gives the following, and no geoarrow-c

    version = 1
    revision = 3
    requires-python = ">=3.10"
    
    [manifest]
    requirements = [
        { name = "arro3-core" },
        { name = "geoarrow-types" },
        { name = "geodatafusion", specifier = "==0.1.1" },
        { name = "pyarrow" },
    ]
    
    [[package]]
    name = "arro3-core"
    version = "0.6.3"
    source = { registry = "https://pypi.org/simple" }
    dependencies = [
        { name = "typing-extensions", marker = "python_full_version < '3.12'" },
    ]
    sdist = { url = "https://files.pythonhosted.org/packages/08/44/104ec426c1bed146deae8fdf1f9b8aa1fd54872fc05768059e47d642285b/arro3_core-0.6.3.tar.gz", hash = "sha256:5da776dda9ac278d8ae61f6dbc5bc4ce95ac9869d57940938eb10115ce4b8edf", size = 107926, upload-time = "2025-09-17T21:59:52.46Z" }
    wheels = [
        { url = "https://files.pythonhosted.org/packages/5b/75/937519fcdbe7e406f7c8bde0beb8ac22d44df132185e5711c2a25be71f5d/arro3_core-0.6.3-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:cac1cbb57c272293b7f4fb42ae5736103bab0a5ce3fadde47a52adf9f16b0db4", size = 2679224, upload-time = "2025-09-17T21:55:20.842Z" },
        { url = "https://files.pythonhosted.org/packages/bf/9b/9eafd4fbd4c016359e8a4c9870096e35f44f44c928b193b750df69ac52d3/arro3_core-0.6.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ecb1f1c5b83a2e24d2079f70588f4ddeb8409f0080397fb874db45c2da8c52ad", size = 2372219, upload-time = "2025-09-17T21:55:23.099Z" },
        { url = "https://files.pythonhosted.org/packages/89/5a/8f1bc061c5b18e54ff69b2e4270fdc20a217ded411d036a6f80c33fd9dc1/arro3_core-0.6.3-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:38b53021e6572115b1e066647db8c0d2bf322b8d984e89a10bf216124a60b85a", size = 2875551, upload-time = "2025-09-17T21:55:27.87Z" },
        { url = "https://files.pythonhosted.org/packages/95/da/ddda696d287880cc63e0bbfbe6ada8251de02443a006e0e4c3ec29c001f3/arro3_core-0.6.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:615ba271f72e3d09e6c3996db4a5b7b1fc16fec5dcc49b57e291d7b514327ab7", size = 2886930, upload-time = "2025-09-17T21:55:31.153Z" },
        { url = "https://files.pythonhosted.org/packages/ca/a0/48249d8ed00f67929ba2077b857a4e1d196b3e395f755514ae003d3b4fa3/arro3_core-0.6.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:570b65b6616856a731fa11e39c341142aa626232676edd17cfc4c4234ffa7acc", size = 3115522, upload-time = "2025-09-17T21:55:35.471Z" },
        { url = "https://files.pythonhosted.org/packages/2f/4b/4395b173b3a4f2c2ff18ab9b4b494061fbdf03a654b5facdad5e01387562/arro3_core-0.6.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a1c39d2af2106d001be55706c72f1924904f79f4908ddb32e2d57aa0bee66255", size = 2773941, upload-time = "2025-09-17T21:55:38.722Z" },
        { url = "https://files.pythonhosted.org/packages/f9/98/811cef3af0c15a512058423dba80b78f8811bdab3fbf66af8957f16cd6a5/arro3_core-0.6.3-cp310-cp310-manylinux_2_24_aarch64.whl", hash = "sha256:76f00bea5439df58f1934f7987e8eae701a2ede52c930df71bf8cc8f1ed6a9d6", size = 2518671, upload-time = "2025-09-17T21:55:41.945Z" },
        { url = "https://files.pythonhosted.org/packages/d8/03/28be52f54d6ab49437e774daa47ea87694fa0de3f96f56c8aad48fee3769/arro3_core-0.6.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:18d65dcab157e16f2bf130d80edd261bf712a7e5f52185fd488e53dc19f4ea52", size = 3027914, upload-time = "2025-09-17T21:55:45.427Z" },
        { url = "https://files.pythonhosted.org/packages/24/37/d9281b4a7830209ac1b0594942dca0c1a89a9bf2b3efc862c5cc81c0afc9/arro3_core-0.6.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:877d3ae8d2f5ff5867e7f81047700f54f7124ff1fb5fb9912bfec6abe1a27b41", size = 2664963, upload-time = "2025-09-17T21:55:48.782Z" },
        { url = "https://files.pythonhosted.org/packages/ed/73/0561e00f53a40b4928a7a1a521a3c8291a5b5be387bbe67d9b6d65dfd504/arro3_core-0.6.3-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:1745162a43dbeb9c689f1207e3bfe251a48fb467e455d44be0daaba85aac9b2a", size = 3138808, upload-time = "2025-09-17T21:55:52.336Z" },
        { url = "https://files.pythonhosted.org/packages/58/b8/594b856c9e33d34b35e26cb0e789a7264bf8e44f4a9c45a69403139676da/arro3_core-0.6.3-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:f3715fcdfeb2ded8eeab14a940bf7cf350d5cdea82422982af4e2aea0fdbf866", size = 3101813, upload-time = "2025-09-17T21:55:55.89Z" },
        { url = "https://files.pythonhosted.org/packages/4e/41/6acc5bc6443090176697074fc59eac2d5f4eb32ca727255eab49d7fdc0ac/arro3_core-0.6.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:89f0070cdd259482379275c3eeaddcb7ad5a81a997215304674cf3f9f032899f", size = 2941502, upload-time = "2025-09-17T21:55:59.021Z" },
        { url = "https://files.pythonhosted.org/packages/c3/ae/1ffb462a907d2765c326173112c0b07c5c5c26bda9c698fe75d884f7c3cd/arro3_core-0.6.3-cp310-cp310-win_amd64.whl", hash = "sha256:54e7afc9955e7b409ec79638514580eea518707a90b65d35cb3819363debc88d", size = 2833453, upload-time = "2025-09-17T21:56:02.474Z" },
        { url = "https://files.pythonhosted.org/packages/4e/cd/8e92efdc61501bfd66979837e24b3c4ab63eb7222415c2984e5ab5c5815d/arro3_core-0.6.3-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:60d1fb6621f7319d489eda5192ad07d198b4d2af2216d81ade05a09ef3f96e1a", size = 2678994, upload-time = "2025-09-17T21:56:05.856Z" },
        { url = "https://files.pythonhosted.org/packages/51/8e/54a59b3e23b3440742f10863d16b23c34aeca56cf6ce54d7d7250203229c/arro3_core-0.6.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4adb82b6fda667197b9d84d0bb4d9f6557349d4cf950a84813773944d33ced27", size = 2371720, upload-time = "2025-09-17T21:56:09.119Z" },
        { url = "https://files.pythonhosted.org/packages/bb/ce/75f53e0fa120ed440a5ed5b64f6488ec1d9f377bf5c7dfe744bcea6fbc38/arro3_core-0.6.3-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:18c3f8419d1af70b489ebf5d655f81fcf919174f84367aff3df489b824f22b08", size = 2874192, upload-time = "2025-09-17T21:56:12.18Z" },
        { url = "https://files.pythonhosted.org/packages/1b/56/9e549efcfef137d6c8c42bf5bd2b6eb90edaf355b12734aaff6dfaf1acf9/arro3_core-0.6.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:234081b9038038fecafa098a7e8d069ba37ab78ccd83d5cd8e843204a42912e4", size = 2887039, upload-time = "2025-09-17T21:56:15.699Z" },
        { url = "https://files.pythonhosted.org/packages/bb/d3/cce00c8dabdb894710922551c8fca2faf1c85e73b452a07502aaec1100d4/arro3_core-0.6.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9141997dc999eb8a77cefd91a95de4d2958b7b23dc764e33ce37881ea4a7bae6", size = 3124472, upload-time = "2025-09-17T21:56:23.682Z" },
        { url = "https://files.pythonhosted.org/packages/5b/c7/adaa299dc5428f641076f54dd074d6a323a9b2d9cde8e37e3bfe9b16e478/arro3_core-0.6.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21f95a2176d861f2d767c8d988750ab1f0e13bd12e551e6c1b709470020c2144", size = 2773773, upload-time = "2025-09-17T21:56:26.729Z" },
        { url = "https://files.pythonhosted.org/packages/8b/10/b13b87eb3b9fa9378dc697fa8ec47646cd778f52fa581d49bfdba7893e1e/arro3_core-0.6.3-cp311-cp311-manylinux_2_24_aarch64.whl", hash = "sha256:62b7fd6989db16379c22db1c2923bda4eae24ee0905e1610a932dd74cf8ce8d4", size = 2518754, upload-time = "2025-09-17T21:56:30.046Z" },
        { url = "https://files.pythonhosted.org/packages/33/f5/d52689288a4700f7dc3721175f4497f4afd0eba4b9de0b735aec3f0176d2/arro3_core-0.6.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b11d0b8992c810448a461baff9fcffa64131deb2362105091fce634bc08eb4d9", size = 3027932, upload-time = "2025-09-17T21:56:33.437Z" },
        { url = "https://files.pythonhosted.org/packages/07/a6/31c25e9f056b450e966d18444041e34bcd993da83898125b516882828b43/arro3_core-0.6.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:3c0ff853d61fd5bab04b846e21a4d06b2b75a7a2428674d1b16be5ebe27bed64", size = 2664877, upload-time = "2025-09-17T21:56:36.639Z" },
        { url = "https://files.pythonhosted.org/packages/e8/1d/01c18475c2d802907efbe02b1a65386d8ed65b315c9cffec967e81e98ccd/arro3_core-0.6.3-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:16ab37568859c80da1d24cc2b059aff078511f023ea015329da034df842004b5", size = 3137633, upload-time = "2025-09-17T21:56:39.749Z" },
        { url = "https://files.pythonhosted.org/packages/31/3b/ee1e0224a0561b6a30319b69c79bd9e4c2f12900687223a71f53c788ebfd/arro3_core-0.6.3-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:8ea70271c886e84e837d57027f70888e10cf81f6d9126fbdaa1d9f583e2757bb", size = 3101927, upload-time = "2025-09-17T21:56:43.348Z" },
        { url = "https://files.pythonhosted.org/packages/7d/51/06a43ce42236aaa30e886fc4727ed76bc84f61234d7e9a25cc39b570034f/arro3_core-0.6.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:64905d36d08a5ae72bd214031b00ea895682f88300183e532834ab15c0a7830b", size = 2941784, upload-time = "2025-09-17T21:56:47.468Z" },
        { url = "https://files.pythonhosted.org/packages/6b/55/be25f89600893d9063770435f40c40af5287942633d8962e4cb63f431956/arro3_core-0.6.3-cp311-cp311-win_amd64.whl", hash = "sha256:896f4368a18f3303f372f9ca4e55348813afe8b3b6ab78d976a2a560d0546e57", size = 2833486, upload-time = "2025-09-17T21:56:50.827Z" },
        { url = "https://files.pythonhosted.org/packages/3d/0a/56fae7e43377e7f3b4d12cf2610600e9dd7bca80178dbedc9d9c25d2c85e/arro3_core-0.6.3-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:831b16044e791d7bd93aa47ebbdce219ef7e8613a04802149cd61584b236cead", size = 2667943, upload-time = "2025-09-17T21:56:54.157Z" },
        { url = "https://files.pythonhosted.org/packages/3c/d8/589a4a1ef136bca84d7b0c20a82fbfb7526b81611a8407a94c8a82a82212/arro3_core-0.6.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1ed625996c63443b354fed1c0756dbfa55f3b2cd5adbc4203adbfdb79549d49f", size = 2359479, upload-time = "2025-09-17T21:56:57.364Z" },
        { url = "https://files.pythonhosted.org/packages/79/7f/67729c440e3d1a41e0fea10738328785c5b3e5e78776c985a46f925e2de6/arro3_core-0.6.3-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a125b1c69b556bf3ad6f5fc31910489c987612c30e160b8634d86f63f53f6099", size = 2869113, upload-time = "2025-09-17T21:57:00.592Z" },
        { url = "https://files.pythonhosted.org/packages/af/29/ec07886805640b5fe7d9d9a1f6ff8286bd43e3a17e76c9c6500f6a7cb2e1/arro3_core-0.6.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c4eaee19aef578340eb1a21358ec74a076730a0034f9201fb8300f68161442da", size = 2884956, upload-time = "2025-09-17T21:57:03.679Z" },
        { url = "https://files.pythonhosted.org/packages/42/36/95006f8ffe9ac402b9fdc30c1219e4b4c84b015a2044a64881665a39d031/arro3_core-0.6.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4d0e3cd65d3d8291a1264f63f4d52fdec6f568b59b251b06da262c04366c4e94", size = 3128632, upload-time = "2025-09-17T21:57:07.424Z" },
        { url = "https://files.pythonhosted.org/packages/8b/68/2e26a8ab469a0c5bcee59a1237c77045a9190ff226d5802ba771ea04213c/arro3_core-0.6.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ace96f1a933b7acc64b66f9f9b2bccac79244c693cdfc74ed7eaef92c05c4db8", size = 2769161, upload-time = "2025-09-17T21:57:10.643Z" },
        { url = "https://files.pythonhosted.org/packages/db/23/36abe2e3c146442fdec5b982fad757002469276e7cf65e8b64dad927129a/arro3_core-0.6.3-cp312-cp312-manylinux_2_24_aarch64.whl", hash = "sha256:92d75b1b5e6faaa44aa3e24543e8bfb06703e510d2c98104eae4ef36c234fbd8", size = 2514233, upload-time = "2025-09-17T21:57:14.236Z" },
        { url = "https://files.pythonhosted.org/packages/28/99/467096bea0b81f9bb959e2d399a8dc88886a4f2c20342c26e82ad8bc643b/arro3_core-0.6.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f222ff4aec28cb10a422bd36d15c947f5b134682bb60c546131c5fdb2f9d75e0", size = 3028860, upload-time = "2025-09-17T21:57:17.905Z" },
        { url = "https://files.pythonhosted.org/packages/40/61/430d9f8006429c9e1e8961aaeb4fd6cd56dc5cf9eb457fd368b9b7428058/arro3_core-0.6.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:81bbb41244ad6ed9cbf292ed0fa22ce39ac1280cd2062faa80d6d11841517caa", size = 2659640, upload-time = "2025-09-17T21:57:21.114Z" },
        { url = "https://files.pythonhosted.org/packages/02/79/93474994e5babfe9eedbe6f2d3f45b303d9bd0c3729a7a432f1d3db4f99f/arro3_core-0.6.3-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:b7b0295a1b792b62de0110d73e3abc77c54482e0e5bb82e06a3809bdd0c7e5c7", size = 3132602, upload-time = "2025-09-17T21:57:24.596Z" },
        { url = "https://files.pythonhosted.org/packages/87/8d/c750a612aa6c23184d078de3546c3d775ed7fc050e5fbb5752798610f687/arro3_core-0.6.3-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:5ce2bc0bba2bab845d6974a9bebe7607e8edd273628d71fbe4513e8f28f44622", size = 3099007, upload-time = "2025-09-17T21:57:27.872Z" },
        { url = "https://files.pythonhosted.org/packages/86/d3/7e582fc2e413c26e6dcd993428663db33bbea26be6f3911dcb726768b4d4/arro3_core-0.6.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ed285fba9dab1cebf3bf63a98df83e93d4fd70933d5af1dc24b6164032d845ee", size = 2936878, upload-time = "2025-09-17T21:57:31.193Z" },
        { url = "https://files.pythonhosted.org/packages/9a/13/5aed08d87a396c0b8441871f703ef06c2364d98ef1fbfa73b1c259457212/arro3_core-0.6.3-cp312-cp312-win_amd64.whl", hash = "sha256:a564470bd529facffd71e31e11b8b38cc9ca207745b6349f5923fcd39bf75877", size = 2835145, upload-time = "2025-09-17T21:57:35.296Z" },
        { url = "https://files.pythonhosted.org/packages/a6/27/75f729785396e5780a08b7c63f3f09b0545a718e5a38976d815ccf0c51e2/arro3_core-0.6.3-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:5510c501252212fe6b5427f465019de1d92c9ad8e8d1c0b268ab952b1888d9f7", size = 2667560, upload-time = "2025-09-17T21:57:38.531Z" },
        { url = "https://files.pythonhosted.org/packages/db/c4/d3730b7f4e7f01e502f79966733b4821388c23e7c343483f69dad0f99568/arro3_core-0.6.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:3aa049228302c81b996fb6e5917dd6fe1cb0f0699b69e5031e9e22331379c5b0", size = 2359471, upload-time = "2025-09-17T21:57:41.714Z" },
        { url = "https://files.pythonhosted.org/packages/96/47/f7b0589c9ba7b4d0b09fc363e2b8fd62ab897c81494be2f099647d27df15/arro3_core-0.6.3-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ae4ba5141376c668f8cc5b0607f1e1e23713d1fe922e77f153648aa21739f2de", size = 2867954, upload-time = "2025-09-17T21:57:44.884Z" },
        { url = "https://files.pythonhosted.org/packages/00/13/7a2ed0b27cc0ce265022f338446c0c133ad7f2ccd9746934203728786be4/arro3_core-0.6.3-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e45fa8a90ef779495b52932eaca374d69b5f0683a3458a66f002a107857f43b4", size = 2884493, upload-time = "2025-09-17T21:57:48.351Z" },
        { url = "https://files.pythonhosted.org/packages/d9/07/d1ada59bb461e0103323cb2096ffa9e0590d8504bd624745ec2d900eeab1/arro3_core-0.6.3-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b79291b12f3cb3f4538b07770cba15b4013ecebca8e28230ee6f08665e3b8d4e", size = 3128265, upload-time = "2025-09-17T21:57:51.651Z" },
        { url = "https://files.pythonhosted.org/packages/23/fe/3f19abcf6c0fc788df79366e5bfee643f1d0f20493a906e660bc4041f4a0/arro3_core-0.6.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:81a450d3904e834ae6a21866538e5ddf43f676a7f3881321835390d061953a98", size = 2768547, upload-time = "2025-09-17T21:57:55.056Z" },
        { url = "https://files.pythonhosted.org/packages/49/3e/b3c2a260c1e2ade25998540a151be37b000849c7d21af068f70d824f9681/arro3_core-0.6.3-cp313-cp313-manylinux_2_24_aarch64.whl", hash = "sha256:02e86a9b932639e6282ef8b5ad6a0d532d1e4909b8c3d36e8a82b8cefa3aa759", size = 2514159, upload-time = "2025-09-17T21:57:58.348Z" },
        { url = "https://files.pythonhosted.org/packages/37/56/fd6bd638be26dccb237d3c51b221b2a6e90ae70749a103a505c05387f05b/arro3_core-0.6.3-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7b0115eb6a91da54dc00e99d609b37fff460aca1d3e04ffc9a827626938c5fde", size = 3028141, upload-time = "2025-09-17T21:58:01.84Z" },
        { url = "https://files.pythonhosted.org/packages/ef/29/ed5048111de3c8b65a0d4b95bd86859d88efbe9a21d2a3194f01cccd79bf/arro3_core-0.6.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:2c29251db308c087a9bb49a71ea2e921333e8951edecfcc9659cf87a2de237e5", size = 2659264, upload-time = "2025-09-17T21:58:05.259Z" },
        { url = "https://files.pythonhosted.org/packages/d6/2e/69c651cdbc56c250dee8f44ed5a4ec11824be9e9f3513bc0ae0b1824941a/arro3_core-0.6.3-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:d45a6affb74f20a7c6e049f2abba73e687f6cd674e2cb747e3cfe8a012560fda", size = 3131835, upload-time = "2025-09-17T21:58:08.435Z" },
        { url = "https://files.pythonhosted.org/packages/d0/b6/82947fe4c322ef60315a12023e27048078dcf90967ec2b373687e2f9dfd9/arro3_core-0.6.3-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:312d70f7c69436a3eac716995c4fdafe94acf750d0037fa2495936dff8feaa0b", size = 3098165, upload-time = "2025-09-17T21:58:11.875Z" },
        { url = "https://files.pythonhosted.org/packages/1b/05/1ed10598ea96d80d4b2db9f3ac0b19390fe996c8b6f342c40f0fac22115d/arro3_core-0.6.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:2d8f8dd075c2f69e36b968bca420cd0c6885f8f877d544a0b6af5872deeb4ab2", size = 2936341, upload-time = "2025-09-17T21:58:15.112Z" },
        { url = "https://files.pythonhosted.org/packages/32/0e/3eadf8cf4be14df1d6c991b094685da9fd605d5727d969640a2d85873e29/arro3_core-0.6.3-cp313-cp313-win_amd64.whl", hash = "sha256:4f69866656e8a2e75495bf8c5ed8138f4ca7169b6532e66f6c7f7e37bd96b21f", size = 2834121, upload-time = "2025-09-17T21:58:18.431Z" },
        { url = "https://files.pythonhosted.org/packages/d3/b8/af4a42a62f808b62f35d5601b1494ddab39585379754d6e87d9c5863fe98/arro3_core-0.6.3-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:615f5384ee2cc7b30306a91453e7b05dda310cbad7a7f2dc606b3c8ef706ce98", size = 2678187, upload-time = "2025-09-17T21:59:11.639Z" },
        { url = "https://files.pythonhosted.org/packages/bc/cb/493c1dff23830e14407425b94139475e05ad566e451ddde775f0c50466fb/arro3_core-0.6.3-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:183cac8d4909536ccdbc6a56be800afe96272289a6ac5547177403ec7d7ff1ff", size = 2370497, upload-time = "2025-09-17T21:59:15.414Z" },
        { url = "https://files.pythonhosted.org/packages/72/38/46ff4340c92071a265a48f2cc4089d6da2a6ad7763fe8845677ed79acc5f/arro3_core-0.6.3-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b3b1bf6d96cc906c00bebb4165b6da1bed61dcdca051e0a084b3799d185aeab0", size = 2874173, upload-time = "2025-09-17T21:59:18.788Z" },
        { url = "https://files.pythonhosted.org/packages/ef/92/ff15e892a6c306ee78eb0018e7a27f9eb8ab2ddbe41d106a6d353f0e6e8c/arro3_core-0.6.3-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cea24982f6e5bd6cb5f7df6acaad8a585262376c1c633454136316187098fcb7", size = 2886020, upload-time = "2025-09-17T21:59:22.332Z" },
        { url = "https://files.pythonhosted.org/packages/58/7d/b582ad6461197b37cf8ddd5e37988232186363b774bc5048120bf7b351a1/arro3_core-0.6.3-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cf641982e1e6213c5ad62c2d4b7bfc27e972f363e00fbf3983c298ec6dad5887", size = 3114794, upload-time = "2025-09-17T21:59:26.838Z" },
        { url = "https://files.pythonhosted.org/packages/6b/14/d10a204e71861d6d595b254d4ddff1a6448c02b0f05ebf68b3a96ca36f3e/arro3_core-0.6.3-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f33a5ab3203ff4884e84c1a3ea01e4f749603a6070d8bedc29044b57253afc62", size = 2773685, upload-time = "2025-09-17T21:59:30.411Z" },
        { url = "https://files.pythonhosted.org/packages/e2/2b/a749b4103d5975fa187db5d72912a55a20470df1910c5549f893d1c13fc0/arro3_core-0.6.3-pp310-pypy310_pp73-manylinux_2_24_aarch64.whl", hash = "sha256:fdb8e17c31582b36303288c9516491c5e2e4d50c6ede437cc5a2d048065ef500", size = 2518737, upload-time = "2025-09-17T21:59:33.666Z" },
        { url = "https://files.pythonhosted.org/packages/74/83/e36c3c0e03aa4550f021dc16c20d39ab91f36c73d36536425d6e76890e29/arro3_core-0.6.3-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:dd7d9ca69880cc92bf71c37f43cdb5aac8681c014a512f2c27088015b7adac61", size = 3027924, upload-time = "2025-09-17T21:59:37.493Z" },
        { url = "https://files.pythonhosted.org/packages/a6/70/c4f78e9bd128a4b6aa479cb24f398d79735630ae45d902c8df608951f690/arro3_core-0.6.3-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:a6a52556b76e7dabd0a3bbd9c556e366c93e6b1ae9dcdf7f454f439ce3296d24", size = 2664871, upload-time = "2025-09-17T21:59:40.76Z" },
        { url = "https://files.pythonhosted.org/packages/6a/f7/40711fbd308d568cfa6cd882259769aebfed4dfbb580fe77e047e50f3a2b/arro3_core-0.6.3-pp310-pypy310_pp73-musllinux_1_2_armv7l.whl", hash = "sha256:3db782df72e7ccd9688fa1ff2f504261f9f346c29219d0c165791ca1d3fa35de", size = 3137750, upload-time = "2025-09-17T21:59:44.198Z" },
        { url = "https://files.pythonhosted.org/packages/2c/0a/b03c4b936ec3a93047226cdcdda7dc96362f332c56133777c9fa8139d206/arro3_core-0.6.3-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:ded38b6092f16e7e7f90c3879586ea76e3651e967e9fd4db7e604f435c9fdaa5", size = 3101734, upload-time = "2025-09-17T21:59:48.003Z" },
        { url = "https://files.pythonhosted.org/packages/5e/17/70a3596f7f4124113f4b8938c0f4c339f29e792a177ea3ef3b12ebc84da5/arro3_core-0.6.3-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:8ff145b5556c07cd1968c428e57e3234dd71c258bc45e78e802bbae509c4d54b", size = 2941071, upload-time = "2025-09-17T21:59:50.575Z" },
    ]
    
    [[package]]
    name = "datafusion"
    version = "49.0.0"
    source = { registry = "https://pypi.org/simple" }
    dependencies = [
        { name = "pyarrow" },
        { name = "typing-extensions", marker = "python_full_version < '3.13'" },
    ]
    sdist = { url = "https://files.pythonhosted.org/packages/1b/81/eb7f69e184eba6f8fc748f09aa6ac39a50a4aa54e66e1529769d68d7c9e4/datafusion-49.0.0.tar.gz", hash = "sha256:f3ba4f00d56a199a90df145f43667131dbba9aea9b170cc61cd3663241a74a94", size = 183558, upload-time = "2025-08-29T01:39:45.889Z" }
    wheels = [
        { url = "https://files.pythonhosted.org/packages/02/16/a1438058d784deea42105b869323007cf9dd8a52dbb4551a9ef23967a235/datafusion-49.0.0-cp39-abi3-macosx_10_12_x86_64.whl", hash = "sha256:bb419810c7b1032ec4a374260d289279c5911e3fcdcfb57c9513b6d256fe0330", size = 26455326, upload-time = "2025-08-29T01:39:19.759Z" },
        { url = "https://files.pythonhosted.org/packages/83/8d/d906b27b61838002b1cf0880eaa75c741409f0f6386192f2fabee24684af/datafusion-49.0.0-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:95d82ceda75767714629c1b5572a41bc919066156163d1ca3777418ffdbf4916", size = 23623419, upload-time = "2025-08-29T01:39:26.613Z" },
        { url = "https://files.pythonhosted.org/packages/66/4e/2a113bef5e51e56f7273f193959a80e4abd48a2ff6856cfa219dbba85600/datafusion-49.0.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e093a8d8cc68bf48376c2f553dcec35829be3ea2c9557516fcf93d2bf4695593", size = 29392602, upload-time = "2025-08-29T01:39:32.053Z" },
        { url = "https://files.pythonhosted.org/packages/ea/80/f49809e61f28343f303059572d9fdfedcb6f08653f34c057c2018d98ab5e/datafusion-49.0.0-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:7e9286f92f9f292a57873f8b83f10796decba98f4c022e92d929511f68e2d79a", size = 27505100, upload-time = "2025-08-29T01:39:36.398Z" },
        { url = "https://files.pythonhosted.org/packages/f6/d7/54f1d73a9e8b084965ea40531988ca25e57f7f5c77560e198483b1c7bf25/datafusion-49.0.0-cp39-abi3-win_amd64.whl", hash = "sha256:2079a2ec6e73820a21d6f8d466a1410a94f8ef3171eba2cd2461790fc0437c91", size = 28352189, upload-time = "2025-08-29T01:39:43.546Z" },
    ]
    
    [[package]]
    name = "geoarrow-types"
    version = "0.3.0"
    source = { registry = "https://pypi.org/simple" }
    sdist = { url = "https://files.pythonhosted.org/packages/a5/97/fa35f5d13a803b8f16e59c1f18f06607b9df5683c08bd7cd7a48a29ce988/geoarrow_types-0.3.0.tar.gz", hash = "sha256:82243e4be88b268fa978ae5bba6c6680c3556735e795965b2fe3e6fbfea9f9ee", size = 23708, upload-time = "2025-05-27T03:39:39.979Z" }
    wheels = [
        { url = "https://files.pythonhosted.org/packages/b6/16/e37cb1b0894c9cf3f9b1c50ebcfab56a0d9fe7c3b6f97d5680a7eb27ca08/geoarrow_types-0.3.0-py3-none-any.whl", hash = "sha256:439df6101632080442beccc7393cac54d6c7f6965da897554349e94d2492f613", size = 19025, upload-time = "2025-05-27T03:39:38.652Z" },
    ]
    
    [[package]]
    name = "geodatafusion"
    version = "0.1.1"
    source = { registry = "https://pypi.org/simple" }
    dependencies = [
        { name = "datafusion" },
    ]
    wheels = [
        { url = "https://files.pythonhosted.org/packages/60/3e/9ef4f135437b9eedae73f13b97ef59e96839db906f9e20407c9d5d8ed9bf/geodatafusion-0.1.1-cp39-abi3-macosx_10_12_x86_64.whl", hash = "sha256:5ba50701d4b78abaca14d2d6fb33c234f6494b6f207f2d3e3ab290b756bc55ec", size = 28530074, upload-time = "2025-09-15T05:45:32.659Z" },
        { url = "https://files.pythonhosted.org/packages/ce/00/1135df86d248cd84df01cd0eca160779839b3ab19f36086448ad9a874f54/geodatafusion-0.1.1-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:de2320b1263f920cd4ba6d6b3529c5530eba4bf528e10ab421559d1c46e28c2c", size = 26274401, upload-time = "2025-09-15T05:45:29.419Z" },
        { url = "https://files.pythonhosted.org/packages/11/61/3f419848d70c8459cc36e9131199ec7e380ceb0641e3c733041051080c21/geodatafusion-0.1.1-cp39-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3ed1be20aaa5f7b05f68c78534db38c15c9dbf617e0ffccc6c4b03631e933080", size = 30155603, upload-time = "2025-09-15T05:45:01.693Z" },
        { url = "https://files.pythonhosted.org/packages/30/ad/64aada98741467d63ed39b1e0ec9c77fe5cca49adfd1a3ba69a7e7d66947/geodatafusion-0.1.1-cp39-abi3-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:537b2d19a0ba32c8b9ca2289745ff2729f388b6f386c7493f556e92b89d7277e", size = 33762357, upload-time = "2025-09-15T05:45:15.868Z" },
        { url = "https://files.pythonhosted.org/packages/fb/4e/68afb522171f2eb79ca31a6a5dd02364c9e71fe8abb492804344ce5d7766/geodatafusion-0.1.1-cp39-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d9c01cb04644d60f82083667589dca8e5ada3400d16afb5976537c100ae76085", size = 36528469, upload-time = "2025-09-15T05:45:08.755Z" },
        { url = "https://files.pythonhosted.org/packages/c4/6a/154eb1bb3736f5d22ccf7596a2df9440bed813dcb4188b8efc1e5f415af4/geodatafusion-0.1.1-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:112bae9682f3419a4a5888152cfd0dfb2f4795ab1763c5aa7761f2c31fb92aed", size = 30501886, upload-time = "2025-09-15T05:45:22.645Z" },
        { url = "https://files.pythonhosted.org/packages/71/3d/b5152e4e24874a10f56d0babb05e277e9695811cac9912e742d3d8ee03ed/geodatafusion-0.1.1-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:26511e03bf93f7695b3c25e6dac6c8b4a8bc30401a81d4dfa5d63cce15ce6aef", size = 29066422, upload-time = "2025-09-15T05:44:54.794Z" },
        { url = "https://files.pythonhosted.org/packages/bf/d1/12ea9a604a2ec5df2053bbb1c328e02bd48a623865350e8f7ffd680dd449/geodatafusion-0.1.1-cp39-abi3-win_amd64.whl", hash = "sha256:dbbfaff31d26d28566441d268ca462b4c52a8ce78ad1c180130a7db4c118747e", size = 26681481, upload-time = "2025-09-15T05:45:36.044Z" },
        { url = "https://files.pythonhosted.org/packages/1b/22/799d268b1f7a9fcd687fc89ce602fa0dc8b6a98d48b633d202d672ed704a/geodatafusion-0.1.1-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d20d9d7d6b365df9f790940bc81eee39d85abe924c3df7ff87ab3149c426b984", size = 30144129, upload-time = "2025-09-15T05:45:04.902Z" },
        { url = "https://files.pythonhosted.org/packages/6a/5d/4e52b6a46e78a49e42aab99b53b8eeb237cf73dd285ca4354114303127b2/geodatafusion-0.1.1-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3f9a61e29aceaaaaf8b7b03dfe0c0824e2ab348509d039ea562d7e6936bf8b7c", size = 33757068, upload-time = "2025-09-15T05:45:19.505Z" },
        { url = "https://files.pythonhosted.org/packages/f7/cf/3fccc3d36db7d695d25d5a279139aad7bafa22fc5eb321ec19f3eb14dbd7/geodatafusion-0.1.1-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:38274d703c0d403e6b6aadf392c8d39aa31edc114b590b07e8d40c349a5479fe", size = 36521785, upload-time = "2025-09-15T05:45:12.562Z" },
        { url = "https://files.pythonhosted.org/packages/70/5e/ed2f404e384b6d807ac25bedfee592807ea8f060b5e58b682021d0cbbd7a/geodatafusion-0.1.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:888b2d05a585b2c94846198da5e059ca1f69fc7d2263cbf07cfa7577b577260f", size = 30494275, upload-time = "2025-09-15T05:45:25.963Z" },
        { url = "https://files.pythonhosted.org/packages/0e/f3/e36350c7b57e7f020f442db77c583e158f7f5287f0de5274aa4240302461/geodatafusion-0.1.1-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:633c604eb2cd400e74ffd4b2321066575715dde0cae0ac716ee419fdcc182bf3", size = 29057512, upload-time = "2025-09-15T05:44:58.311Z" },
    ]
    
    [[package]]
    name = "pyarrow"
    version = "21.0.0"
    source = { registry = "https://pypi.org/simple" }
    sdist = { url = "https://files.pythonhosted.org/packages/ef/c2/ea068b8f00905c06329a3dfcd40d0fcc2b7d0f2e355bdb25b65e0a0e4cd4/pyarrow-21.0.0.tar.gz", hash = "sha256:5051f2dccf0e283ff56335760cbc8622cf52264d67e359d5569541ac11b6d5bc", size = 1133487, upload-time = "2025-07-18T00:57:31.761Z" }
    wheels = [
        { url = "https://files.pythonhosted.org/packages/17/d9/110de31880016e2afc52d8580b397dbe47615defbf09ca8cf55f56c62165/pyarrow-21.0.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:e563271e2c5ff4d4a4cbeb2c83d5cf0d4938b891518e676025f7268c6fe5fe26", size = 31196837, upload-time = "2025-07-18T00:54:34.755Z" },
        { url = "https://files.pythonhosted.org/packages/df/5f/c1c1997613abf24fceb087e79432d24c19bc6f7259cab57c2c8e5e545fab/pyarrow-21.0.0-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:fee33b0ca46f4c85443d6c450357101e47d53e6c3f008d658c27a2d020d44c79", size = 32659470, upload-time = "2025-07-18T00:54:38.329Z" },
        { url = "https://files.pythonhosted.org/packages/3e/ed/b1589a777816ee33ba123ba1e4f8f02243a844fed0deec97bde9fb21a5cf/pyarrow-21.0.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:7be45519b830f7c24b21d630a31d48bcebfd5d4d7f9d3bdb49da9cdf6d764edb", size = 41055619, upload-time = "2025-07-18T00:54:42.172Z" },
        { url = "https://files.pythonhosted.org/packages/44/28/b6672962639e85dc0ac36f71ab3a8f5f38e01b51343d7aa372a6b56fa3f3/pyarrow-21.0.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:26bfd95f6bff443ceae63c65dc7e048670b7e98bc892210acba7e4995d3d4b51", size = 42733488, upload-time = "2025-07-18T00:54:47.132Z" },
        { url = "https://files.pythonhosted.org/packages/f8/cc/de02c3614874b9089c94eac093f90ca5dfa6d5afe45de3ba847fd950fdf1/pyarrow-21.0.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:bd04ec08f7f8bd113c55868bd3fc442a9db67c27af098c5f814a3091e71cc61a", size = 43329159, upload-time = "2025-07-18T00:54:51.686Z" },
        { url = "https://files.pythonhosted.org/packages/a6/3e/99473332ac40278f196e105ce30b79ab8affab12f6194802f2593d6b0be2/pyarrow-21.0.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:9b0b14b49ac10654332a805aedfc0147fb3469cbf8ea951b3d040dab12372594", size = 45050567, upload-time = "2025-07-18T00:54:56.679Z" },
        { url = "https://files.pythonhosted.org/packages/7b/f5/c372ef60593d713e8bfbb7e0c743501605f0ad00719146dc075faf11172b/pyarrow-21.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:9d9f8bcb4c3be7738add259738abdeddc363de1b80e3310e04067aa1ca596634", size = 26217959, upload-time = "2025-07-18T00:55:00.482Z" },
        { url = "https://files.pythonhosted.org/packages/94/dc/80564a3071a57c20b7c32575e4a0120e8a330ef487c319b122942d665960/pyarrow-21.0.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:c077f48aab61738c237802836fc3844f85409a46015635198761b0d6a688f87b", size = 31243234, upload-time = "2025-07-18T00:55:03.812Z" },
        { url = "https://files.pythonhosted.org/packages/ea/cc/3b51cb2db26fe535d14f74cab4c79b191ed9a8cd4cbba45e2379b5ca2746/pyarrow-21.0.0-cp311-cp311-macosx_12_0_x86_64.whl", hash = "sha256:689f448066781856237eca8d1975b98cace19b8dd2ab6145bf49475478bcaa10", size = 32714370, upload-time = "2025-07-18T00:55:07.495Z" },
        { url = "https://files.pythonhosted.org/packages/24/11/a4431f36d5ad7d83b87146f515c063e4d07ef0b7240876ddb885e6b44f2e/pyarrow-21.0.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:479ee41399fcddc46159a551705b89c05f11e8b8cb8e968f7fec64f62d91985e", size = 41135424, upload-time = "2025-07-18T00:55:11.461Z" },
        { url = "https://files.pythonhosted.org/packages/74/dc/035d54638fc5d2971cbf1e987ccd45f1091c83bcf747281cf6cc25e72c88/pyarrow-21.0.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:40ebfcb54a4f11bcde86bc586cbd0272bac0d516cfa539c799c2453768477569", size = 42823810, upload-time = "2025-07-18T00:55:16.301Z" },
        { url = "https://files.pythonhosted.org/packages/2e/3b/89fced102448a9e3e0d4dded1f37fa3ce4700f02cdb8665457fcc8015f5b/pyarrow-21.0.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8d58d8497814274d3d20214fbb24abcad2f7e351474357d552a8d53bce70c70e", size = 43391538, upload-time = "2025-07-18T00:55:23.82Z" },
        { url = "https://files.pythonhosted.org/packages/fb/bb/ea7f1bd08978d39debd3b23611c293f64a642557e8141c80635d501e6d53/pyarrow-21.0.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:585e7224f21124dd57836b1530ac8f2df2afc43c861d7bf3d58a4870c42ae36c", size = 45120056, upload-time = "2025-07-18T00:55:28.231Z" },
        { url = "https://files.pythonhosted.org/packages/6e/0b/77ea0600009842b30ceebc3337639a7380cd946061b620ac1a2f3cb541e2/pyarrow-21.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:555ca6935b2cbca2c0e932bedd853e9bc523098c39636de9ad4693b5b1df86d6", size = 26220568, upload-time = "2025-07-18T00:55:32.122Z" },
        { url = "https://files.pythonhosted.org/packages/ca/d4/d4f817b21aacc30195cf6a46ba041dd1be827efa4a623cc8bf39a1c2a0c0/pyarrow-21.0.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:3a302f0e0963db37e0a24a70c56cf91a4faa0bca51c23812279ca2e23481fccd", size = 31160305, upload-time = "2025-07-18T00:55:35.373Z" },
        { url = "https://files.pythonhosted.org/packages/a2/9c/dcd38ce6e4b4d9a19e1d36914cb8e2b1da4e6003dd075474c4cfcdfe0601/pyarrow-21.0.0-cp312-cp312-macosx_12_0_x86_64.whl", hash = "sha256:b6b27cf01e243871390474a211a7922bfbe3bda21e39bc9160daf0da3fe48876", size = 32684264, upload-time = "2025-07-18T00:55:39.303Z" },
        { url = "https://files.pythonhosted.org/packages/4f/74/2a2d9f8d7a59b639523454bec12dba35ae3d0a07d8ab529dc0809f74b23c/pyarrow-21.0.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:e72a8ec6b868e258a2cd2672d91f2860ad532d590ce94cdf7d5e7ec674ccf03d", size = 41108099, upload-time = "2025-07-18T00:55:42.889Z" },
        { url = "https://files.pythonhosted.org/packages/ad/90/2660332eeb31303c13b653ea566a9918484b6e4d6b9d2d46879a33ab0622/pyarrow-21.0.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:b7ae0bbdc8c6674259b25bef5d2a1d6af5d39d7200c819cf99e07f7dfef1c51e", size = 42829529, upload-time = "2025-07-18T00:55:47.069Z" },
        { url = "https://files.pythonhosted.org/packages/33/27/1a93a25c92717f6aa0fca06eb4700860577d016cd3ae51aad0e0488ac899/pyarrow-21.0.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:58c30a1729f82d201627c173d91bd431db88ea74dcaa3885855bc6203e433b82", size = 43367883, upload-time = "2025-07-18T00:55:53.069Z" },
        { url = "https://files.pythonhosted.org/packages/05/d9/4d09d919f35d599bc05c6950095e358c3e15148ead26292dfca1fb659b0c/pyarrow-21.0.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:072116f65604b822a7f22945a7a6e581cfa28e3454fdcc6939d4ff6090126623", size = 45133802, upload-time = "2025-07-18T00:55:57.714Z" },
        { url = "https://files.pythonhosted.org/packages/71/30/f3795b6e192c3ab881325ffe172e526499eb3780e306a15103a2764916a2/pyarrow-21.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:cf56ec8b0a5c8c9d7021d6fd754e688104f9ebebf1bf4449613c9531f5346a18", size = 26203175, upload-time = "2025-07-18T00:56:01.364Z" },
        { url = "https://files.pythonhosted.org/packages/16/ca/c7eaa8e62db8fb37ce942b1ea0c6d7abfe3786ca193957afa25e71b81b66/pyarrow-21.0.0-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:e99310a4ebd4479bcd1964dff9e14af33746300cb014aa4a3781738ac63baf4a", size = 31154306, upload-time = "2025-07-18T00:56:04.42Z" },
        { url = "https://files.pythonhosted.org/packages/ce/e8/e87d9e3b2489302b3a1aea709aaca4b781c5252fcb812a17ab6275a9a484/pyarrow-21.0.0-cp313-cp313-macosx_12_0_x86_64.whl", hash = "sha256:d2fe8e7f3ce329a71b7ddd7498b3cfac0eeb200c2789bd840234f0dc271a8efe", size = 32680622, upload-time = "2025-07-18T00:56:07.505Z" },
        { url = "https://files.pythonhosted.org/packages/84/52/79095d73a742aa0aba370c7942b1b655f598069489ab387fe47261a849e1/pyarrow-21.0.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:f522e5709379d72fb3da7785aa489ff0bb87448a9dc5a75f45763a795a089ebd", size = 41104094, upload-time = "2025-07-18T00:56:10.994Z" },
        { url = "https://files.pythonhosted.org/packages/89/4b/7782438b551dbb0468892a276b8c789b8bbdb25ea5c5eb27faadd753e037/pyarrow-21.0.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:69cbbdf0631396e9925e048cfa5bce4e8c3d3b41562bbd70c685a8eb53a91e61", size = 42825576, upload-time = "2025-07-18T00:56:15.569Z" },
        { url = "https://files.pythonhosted.org/packages/b3/62/0f29de6e0a1e33518dec92c65be0351d32d7ca351e51ec5f4f837a9aab91/pyarrow-21.0.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:731c7022587006b755d0bdb27626a1a3bb004bb56b11fb30d98b6c1b4718579d", size = 43368342, upload-time = "2025-07-18T00:56:19.531Z" },
        { url = "https://files.pythonhosted.org/packages/90/c7/0fa1f3f29cf75f339768cc698c8ad4ddd2481c1742e9741459911c9ac477/pyarrow-21.0.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:dc56bc708f2d8ac71bd1dcb927e458c93cec10b98eb4120206a4091db7b67b99", size = 45131218, upload-time = "2025-07-18T00:56:23.347Z" },
        { url = "https://files.pythonhosted.org/packages/01/63/581f2076465e67b23bc5a37d4a2abff8362d389d29d8105832e82c9c811c/pyarrow-21.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:186aa00bca62139f75b7de8420f745f2af12941595bbbfa7ed3870ff63e25636", size = 26087551, upload-time = "2025-07-18T00:56:26.758Z" },
        { url = "https://files.pythonhosted.org/packages/c9/ab/357d0d9648bb8241ee7348e564f2479d206ebe6e1c47ac5027c2e31ecd39/pyarrow-21.0.0-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:a7a102574faa3f421141a64c10216e078df467ab9576684d5cd696952546e2da", size = 31290064, upload-time = "2025-07-18T00:56:30.214Z" },
        { url = "https://files.pythonhosted.org/packages/3f/8a/5685d62a990e4cac2043fc76b4661bf38d06efed55cf45a334b455bd2759/pyarrow-21.0.0-cp313-cp313t-macosx_12_0_x86_64.whl", hash = "sha256:1e005378c4a2c6db3ada3ad4c217b381f6c886f0a80d6a316fe586b90f77efd7", size = 32727837, upload-time = "2025-07-18T00:56:33.935Z" },
        { url = "https://files.pythonhosted.org/packages/fc/de/c0828ee09525c2bafefd3e736a248ebe764d07d0fd762d4f0929dbc516c9/pyarrow-21.0.0-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:65f8e85f79031449ec8706b74504a316805217b35b6099155dd7e227eef0d4b6", size = 41014158, upload-time = "2025-07-18T00:56:37.528Z" },
        { url = "https://files.pythonhosted.org/packages/6e/26/a2865c420c50b7a3748320b614f3484bfcde8347b2639b2b903b21ce6a72/pyarrow-21.0.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:3a81486adc665c7eb1a2bde0224cfca6ceaba344a82a971ef059678417880eb8", size = 42667885, upload-time = "2025-07-18T00:56:41.483Z" },
        { url = "https://files.pythonhosted.org/packages/0a/f9/4ee798dc902533159250fb4321267730bc0a107d8c6889e07c3add4fe3a5/pyarrow-21.0.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:fc0d2f88b81dcf3ccf9a6ae17f89183762c8a94a5bdcfa09e05cfe413acf0503", size = 43276625, upload-time = "2025-07-18T00:56:48.002Z" },
        { url = "https://files.pythonhosted.org/packages/5a/da/e02544d6997037a4b0d22d8e5f66bc9315c3671371a8b18c79ade1cefe14/pyarrow-21.0.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:6299449adf89df38537837487a4f8d3bd91ec94354fdd2a7d30bc11c48ef6e79", size = 44951890, upload-time = "2025-07-18T00:56:52.568Z" },
        { url = "https://files.pythonhosted.org/packages/e5/4e/519c1bc1876625fe6b71e9a28287c43ec2f20f73c658b9ae1d485c0c206e/pyarrow-21.0.0-cp313-cp313t-win_amd64.whl", hash = "sha256:222c39e2c70113543982c6b34f3077962b44fca38c0bd9e68bb6781534425c10", size = 26371006, upload-time = "2025-07-18T00:56:56.379Z" },
    ]
    
    [[package]]
    name = "typing-extensions"
    version = "4.15.0"
    source = { registry = "https://pypi.org/simple" }
    sdist = { url = "https://files.pythonhosted.org/packages/72/94/1a15dd82efb362ac84269196e94cf00f187f7ed21c242792a923cdb1c61f/typing_extensions-4.15.0.tar.gz", hash = "sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466", size = 109391, upload-time = "2025-08-25T13:49:26.313Z" }
    wheels = [
        { url = "https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl", hash = "sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548", size = 44614, upload-time = "2025-08-25T13:49:24.86Z" },
    ]
  13. CyberNativeAI commented on Oct 16, 2026

    @CyberNativeAI

    I think this is where the integer comes from: geoarrow-types turns the SRID string into a JSON number when it re-serializes the type.

    StringCrs.__geoarrow_crs_json_values__ (geoarrow-types/src/geoarrow/types/crs.py, same in 0.4.1 and current main) calls json.loads(self._crs) so that valid JSON is not escaped into a JSON string. json.loads("4326") succeeds and returns the int 4326, so extension_metadata() writes {"crs": 4326} and drops crs_type. The next from_extension_metadata() passes that int to crs.create(), which raises. So geodatafusion was writing a string, as you thought.

    With geoarrow-types 0.4.1 alone:

    from geoarrow.types.type_spec import TypeSpec
    
    s = TypeSpec.from_extension_metadata('{"crs": "4326", "crs_type": "srid"}')
    print(s.extension_metadata())  # {"crs": 4326}
    TypeSpec.from_extension_metadata(s.extension_metadata())
    # ValueError: Can't create geoarrow.types.Crs from 4326

    Your first traceback shows that ValueError propagating normally, so I haven't pinned down exactly how it becomes the interpreter crash in your second script; the Parquet crash below does stop with the change at the end. The same path is now reachable from plain Parquet: pyarrow 26 maps a Parquet GEOMETRY column whose crs is srid:2193 to {"crs": "2193", "crs_type": "srid"}. With geoarrow.pyarrow imported, pq.read_table() on a small synthetic file like that exits with SIGSEGV (3 of 3 runs; pyarrow 26.0.0, geoarrow-pyarrow 0.3.0, geoarrow-types 0.4.1, Linux x86-64). srid:0 crashes the same way, and GeoParquet 2.0.0-rc.1 says writers SHOULD use srid:0 for an unknown CRS. The same column with EPSG:2193 or inline PROJJSON reads correctly.

    Separately, and not specific to srid: with the same versions I also saw an intermittent SIGABRT at interpreter exit (terminate called without an active exception) after reads that had already returned correct results, EPSG files included. pyarrow 26 without the geoarrow.pyarrow import did not show it. I haven't looked into that one; mentioning it so it is not mistaken for the srid crash, which is a SIGSEGV with the ValueError traceback every time.

    A possible fix that keeps the existing unwrapping of JSON objects and quoted strings:

        def __geoarrow_crs_json_values__(self):
            # Try to avoid escaping valid JSON into a JSON string, but only
            # unwrap an object or a string: "4326" must not become the number 4326
            try:
                obj = json.loads(self._crs)
            except ValueError:
                return {"crs": self._crs}
            return {"crs": obj if isinstance(obj, (dict, str)) else self._crs}

    With that change, the snippet prints {"crs": "4326"} and round-trips, pytest geoarrow-types/tests still passes (79 passed at 65cf79c, before and after), and the srid:2193 and srid:0 Parquet files read instead of segfaulting (extension metadata {"crs": "2193"} and {"crs": "0"}). crs_type is still not carried through, so after the round trip the value is a bare "2193"; whether StringCrs should keep crs_type: "srid" is a separate decision.

    Prepared by CyberNative AI LLC, an AI-run company, using AI agents. Corrections: hello@cybernative.ai.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions