def METHOD_NAME(
    cls,
    type: pa.DataType,
    shape: Sequence[Union[int, None]],
    create_options: TileDBCreateOptions,
    context: SOMATileDBContext,
    *,
    is_sparse: bool,
) -> tiledb.ArraySchema:
    _util.check_type("type", type, (pa.DataType,))
    if not pa.types.is_primitive(type):
        raise TypeError(
            f"Unsupported type {type} --"
            " SOMA NDArrays only support primtive Arrow types"
        )
    if not shape:
        raise ValueError("SOMA NDArrays must have a nonzero number of dimensions")
    dims = []
    for dim_idx, dim_shape in enumerate(shape):
        dim_name = f"soma_dim_{dim_idx}"
        dim_capacity, dim_extent = cls._dim_capacity_and_extent(
            dim_name, dim_shape, create_options
        )
        dim = tiledb.Dim(
            name=dim_name,
            domain=(0, dim_capacity - 1),
            tile=dim_extent,
            dtype=np.int64,
            filters=create_options.dim_filters_tiledb(
                dim_name,
                [
                    dict(
                        _type="ZstdFilter",
                        level=create_options.sparse_nd_array_dim_zstd_level,
                    )
                ],
            ),
        )
        dims.append(dim)
    dom = tiledb.Domain(dims, ctx=context.tiledb_ctx)
    attrs = [
        tiledb.Attr(
            name="soma_data",
            dtype=_arrow_types.tiledb_type_from_arrow_type(type),
            filters=create_options.attr_filters_tiledb("soma_data", ["ZstdFilter"]),
            ctx=context.tiledb_ctx,
        )
    ]
    cell_order, tile_order = create_options.cell_tile_orders()
    # TODO: accept more TileDB array-schema options from create_options
    # https://github.com/single-cell-data/TileDB-SOMA/issues/876
    return tiledb.ArraySchema(
        domain=dom,
        attrs=attrs,
        sparse=is_sparse,
        allows_duplicates=create_options.allows_duplicates,
        offsets_filters=create_options.offsets_filters_tiledb(),
        validity_filters=create_options.validity_filters_tiledb(),
        capacity=create_options.capacity,
        tile_order=tile_order,
        cell_order=cell_order,
        ctx=context.tiledb_ctx,
    )