Skip to content

feature

Functions:

build_arrow_runtime_feature

build_arrow_runtime_feature() -> RuntimeFeature
Source code in src/irx/runtime/arrow/feature.py
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
def build_arrow_runtime_feature() -> RuntimeFeature:
    """
    title: Build the Arrow runtime feature specification.
    returns:
      type: RuntimeFeature
    """
    runtime_root = Path(__file__).resolve().parent
    native_root = runtime_root / "native"
    compile_flags = ("-std=c99", "-DNANOARROW_NAMESPACE=IrxNanoarrow")
    nanoarrow_include_dir = get_include_dir()
    nanoarrow_sources = get_source_files()

    if not nanoarrow_sources:
        raise RuntimeError(
            "arx-nanoarrow-sources did not provide any nanoarrow C sources"
        )

    include_dirs = (native_root, nanoarrow_include_dir)
    artifacts = [
        NativeArtifact(
            kind="c_source",
            path=native_root / "irx_arrow_runtime.c",
            include_dirs=include_dirs,
            compile_flags=compile_flags,
        )
    ]
    artifacts.extend(
        NativeArtifact(
            kind="c_source",
            path=source_path,
            include_dirs=include_dirs,
            compile_flags=compile_flags,
        )
        for source_path in nanoarrow_sources
    )

    return RuntimeFeature(
        name="arrow",
        symbols={
            "irx_arrow_array_builder_int32_new": ExternalSymbolSpec(
                "irx_arrow_array_builder_int32_new",
                _declare_builder_int32_new,
            ),
            "irx_arrow_array_builder_append_int32": ExternalSymbolSpec(
                "irx_arrow_array_builder_append_int32",
                _declare_builder_append_int32,
            ),
            "irx_arrow_array_builder_finish": ExternalSymbolSpec(
                "irx_arrow_array_builder_finish",
                _declare_builder_finish,
            ),
            "irx_arrow_array_builder_release": ExternalSymbolSpec(
                "irx_arrow_array_builder_release",
                _declare_builder_release,
            ),
            "irx_arrow_array_length": ExternalSymbolSpec(
                "irx_arrow_array_length",
                _declare_array_length,
            ),
            "irx_arrow_array_null_count": ExternalSymbolSpec(
                "irx_arrow_array_null_count",
                _declare_array_null_count,
            ),
            "irx_arrow_array_type_id": ExternalSymbolSpec(
                "irx_arrow_array_type_id",
                _declare_array_type_id,
            ),
            "irx_arrow_array_export": ExternalSymbolSpec(
                "irx_arrow_array_export",
                _declare_array_export,
            ),
            "irx_arrow_array_import": ExternalSymbolSpec(
                "irx_arrow_array_import",
                _declare_array_import,
            ),
            "irx_arrow_array_release": ExternalSymbolSpec(
                "irx_arrow_array_release",
                _declare_array_release,
            ),
            "irx_arrow_last_error": ExternalSymbolSpec(
                "irx_arrow_last_error",
                _declare_last_error,
            ),
        },
        artifacts=tuple(artifacts),
        metadata={
            "type_ids": {"int32": IRX_ARROW_TYPE_INT32},
            "opaque_handles": {
                "array_builder": "irx_arrow_array_builder_handle",
                "array": "irx_arrow_array_handle",
            },
        },
    )