Skip to content

feat(pyarrow): add first-class pyarrow.Table schema validation - #2427

Open
sravankumarkunadi wants to merge 2 commits into
unionai-oss:mainfrom
sravankumarkunadi:feature/pyarrow-table-support
Open

feat(pyarrow): add first-class pyarrow.Table schema validation#2427
sravankumarkunadi wants to merge 2 commits into
unionai-oss:mainfrom
sravankumarkunadi:feature/pyarrow-table-support

Conversation

@sravankumarkunadi

@sravankumarkunadi sravankumarkunadi commented Jul 26, 2026

Copy link
Copy Markdown

Closes #2264

Adds support for validating pyarrow.Table directly, so Arrow tables get dtype checks, value checks and class-based models instead of callers comparing Table.schema by hand.

import pyarrow
import pandera.pyarrow as pa
from pandera.typing.pyarrow import Table

class Schema(pa.DataFrameModel):
    state: str
    price: int = pa.Field(in_range={"min_value": 5, "max_value": 20})

@pa.check_types
def transform(t: Table[Schema]) -> Table[Schema]:
    return t

validate() returns a pyarrow.Table, so a schema can be dropped into an existing pipeline without changing types.

Approach

The narwhals backends are already frame-agnostic, so this reuses them rather than adding another validation engine. Most of the diff is the API layer and registry wiring:

New module Contents
pandera/api/pyarrow/ DataFrameSchema, Column, DataFrameModel, BaseConfig, PyArrowData, dtype/validation-depth helpers
pandera/pyarrow.py Entry point, following pandera/ibis.py
pandera/typing/pyarrow.py Table[Model] generic for check_types
pandera/backends/pyarrow/register.py Maps pyarrow.Table onto the narwhals backends

Changes to existing modules

Four modules outside the new package needed changes:

  • narwhals_engine.py — registers the builtins int, float, str and bool as dtype equivalents. They previously raised TypeError: data type not understood, which made pa.Column(int) unusable. polars_engine already registers all four, so this brings narwhals to parity.

  • backends/narwhals/checks.py — normalises pyarrow return values from native=True checks (Table, *Scalar, *Array/ChunkedArray), and hands single-argument check functions a PyArrowData, matching how polars gets PolarsData and ibis gets IbisData.

  • backends/narwhals/base.py — the eager failure-case builder round-trips through polars, which a polars-free install cannot do, and the concat step dispatches on .union(), which pyarrow.Table does not have. Adds pyarrow builders for the eager and scalar paths plus a pyarrow branch in the concat. Routing is by Implementation.PYARROW rather than by whether polars is importable, so failure_cases comes back as a pyarrow.Table either way instead of changing type depending on what else is installed. Column layout and values match the polars output exactly.

  • backends/register_checks.pyregister_default_check_backends was eagerly registering the polars, ibis and pyspark backends for any narwhals.* check object. That primes each library's registration lru_cache, so a later wipe of the shared BACKEND_REGISTRY leaves those libraries unregistered for the rest of the process. It surfaced as 63 ibis failures once pyarrow started routing through narwhals. There is now a fast path that returns once a check backend for the narwhals type is registered.

Two details worth review

Validation depth. A pyarrow.Table is always fully materialised, unlike a pl.LazyFrame or an ibis.Table, so it defaults to SCHEMA_AND_DATA. Without that, Check.gt(0) on [1, -2, 3] passes silently, which is worse than erroring. See test_data_level_check_failure_is_raised.

Dtype translation. Only some pyarrow types stringify into something the narwhals engine resolves — pa.int64() renders as "int64" and works, but pa.float64() renders as "double" and pa.date32() as "date32[day]", which do not. pyarrow_dtype_to_narwhals round-trips a zero-length array through narwhals instead, which also covers parametrised types (timestamps, decimals, lists, structs).

Known limitation

coerce=True is a no-op: it emits a SchemaWarning and reports a WRONG_DATATYPE error. This is inherited rather than introduced — coercion isn't implemented in the narwhals backend at all (polars behaves the same way under it, and tests/narwhals/test_parity.py marks coerce xfail(strict=True) with "coerce is a v2 feature"). Since pyarrow is served only by narwhals, it ships without coercion for now. test_column_coerce_is_not_supported pins the current behaviour so it fails once coerce lands.

Tests

76 new tests in tests/pyarrow/, covering the container, dtypes, checks, the model API and backend registration.

Suite Result
tests/pyarrow tests/polars tests/ibis tests/base tests/core 750 passed
tests/narwhals with PANDERA_USE_NARWHALS_BACKEND=True 222 passed
tests/pandas tests/xarray tests/dask tests/geopandas 2987 passed
tests/pyarrow on a wheel-built venv with only the pyarrow extra 75 passed, 1 skipped

The two failures not listed above are pre-existing and behave identically on main: 5 pyspark tests needing PYSPARK_PYTHON, and test_ibis_backend_is_narwhals needing PANDERA_USE_NARWHALS_BACKEND=True.

That last row is a venv built from the wheel with narwhals and pyarrow only — no pandas, polars, ibis or numpy — to confirm the extra stands on its own. The single skip needs ibis.

prek run --all-files is clean, both new doctests run, and the docs build (sphinx -W -b=doctest) reports no warnings from the new page.

Packaging

Adds a pyarrow extra pinned to pyarrow >= 13, the floor already used in environment.yml and requirements.txt, so no new dependency is introduced. Also adds the extra to the noxfile's DATAFRAME_EXTRAS and to the CI matrix, plus a docs/source/pyarrow.md page.

Signed-off-by: Sravan Kumar Kunadi <96312788+sravankumarkunadi@users.noreply.github.com>
@sravankumarkunadi
sravankumarkunadi force-pushed the feature/pyarrow-table-support branch from 947ebbe to 760f5e2 Compare July 26, 2026 02:45
@sravankumarkunadi

Copy link
Copy Markdown
Author

@cosmicBboy kindly review the changes and let me know if anything should be adjusted

@cosmicBboy

Copy link
Copy Markdown
Collaborator

hi @sravankumarkunadi please resolve the conflict with main

@codecov

codecov Bot commented Jul 31, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 74.10256% with 101 lines in your changes missing coverage. Please review.
✅ Project coverage is 90.76%. Comparing base (0d685d2) to head (760f5e2).
⚠️ Report is 1 commits behind head on main.

Files with missing lines Patch % Lines
pandera/typing/pyarrow.py 23.17% 63 Missing ⚠️
pandera/api/pyarrow/model.py 80.55% 14 Missing ⚠️
pandera/backends/narwhals/base.py 81.96% 11 Missing ⚠️
pandera/backends/register_checks.py 58.33% 5 Missing ⚠️
pandera/api/pyarrow/components.py 91.48% 4 Missing ⚠️
pandera/api/pyarrow/container.py 92.85% 2 Missing ⚠️
pandera/api/pyarrow/utils.py 95.65% 1 Missing ⚠️
pandera/backends/narwhals/checks.py 94.11% 1 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main    #2427      +/-   ##
==========================================
- Coverage   91.23%   90.76%   -0.48%     
==========================================
  Files         193      202       +9     
  Lines       17134    17524     +390     
==========================================
+ Hits        15633    15906     +273     
- Misses       1501     1618     +117     
Flag Coverage Δ
unit-tests-base-Linux-py3.10 15.01% <0.00%> (-0.37%) ⬇️
unit-tests-base-Linux-py3.11 15.01% <0.00%> (-0.37%) ⬇️
unit-tests-base-Linux-py3.12 15.01% <0.00%> (-0.37%) ⬇️
unit-tests-base-Linux-py3.13 15.01% <0.00%> (-0.37%) ⬇️
unit-tests-base-Linux-py3.14 14.88% <0.00%> (-0.36%) ⬇️
unit-tests-base-Windows-py3.10 14.94% <0.00%> (-0.37%) ⬇️
unit-tests-base-Windows-py3.11 14.94% <0.00%> (-0.37%) ⬇️
unit-tests-base-Windows-py3.12 14.94% <0.00%> (-0.37%) ⬇️
unit-tests-base-Windows-py3.13 14.94% <0.00%> (-0.37%) ⬇️
unit-tests-base-Windows-py3.14 14.81% <0.00%> (-0.36%) ⬇️
unit-tests-base-macOS-py3.10 14.95% <0.00%> (-0.37%) ⬇️
unit-tests-base-macOS-py3.11 14.95% <0.00%> (-0.37%) ⬇️
unit-tests-base-macOS-py3.12 14.95% <0.00%> (-0.37%) ⬇️
unit-tests-base-macOS-py3.13 14.95% <0.00%> (-0.37%) ⬇️
unit-tests-base-macOS-py3.14 14.82% <0.00%> (-0.36%) ⬇️
unit-tests-dask-Linux-py3.10-pandas2.3.3-polars 23.65% <0.00%> (-0.58%) ⬇️
unit-tests-dask-Linux-py3.11-pandas2.3.3-polars 23.65% <0.00%> (-0.58%) ⬇️
unit-tests-dask-Linux-py3.12-pandas2.3.3-polars 23.65% <0.00%> (-0.58%) ⬇️
unit-tests-dask-Linux-py3.13-pandas2.3.3-polars 23.65% <0.00%> (-0.58%) ⬇️
unit-tests-dask-Linux-py3.14-pandas2.3.3-polars 23.58% <0.00%> (-0.57%) ⬇️
unit-tests-dask-Windows-py3.10-pandas2.3.3-polars 23.57% <0.00%> (-0.58%) ⬇️
unit-tests-dask-Windows-py3.11-pandas2.3.3-polars 23.57% <0.00%> (-0.58%) ⬇️
unit-tests-dask-Windows-py3.12-pandas2.3.3-polars 23.57% <0.00%> (-0.58%) ⬇️
unit-tests-dask-Windows-py3.13-pandas2.3.3-polars 23.57% <0.00%> (-0.58%) ⬇️
unit-tests-dask-Windows-py3.14-pandas2.3.3-polars 23.49% <0.00%> (-0.57%) ⬇️
unit-tests-dask-macOS-py3.10-pandas2.3.3-polars 23.59% <0.00%> (-0.58%) ⬇️
unit-tests-geopandas-Windows-py3.11-pandas2.3.3-pydantic2.12.3 29.23% <0.00%> (-0.75%) ⬇️
unit-tests-hypotheses-Linux-py3.10-pandas2.3.3-pydantic2.12.3 21.94% <0.00%> (-0.54%) ⬇️
unit-tests-hypotheses-Linux-py3.11-pandas3.0.0-pydantic2.12.3 21.98% <0.00%> (-0.54%) ⬇️
unit-tests-hypotheses-Linux-py3.12-pandas2.3.3-pydantic2.12.3 21.94% <0.00%> (-0.56%) ⬇️
unit-tests-hypotheses-Linux-py3.12-pandas3.0.0-pydantic2.12.3 21.98% <0.00%> (-0.56%) ⬇️
unit-tests-hypotheses-Linux-py3.14-pandas3.0.0-pydantic2.12.3 21.88% <0.00%> (-0.53%) ⬇️
unit-tests-hypotheses-Windows-py3.10-pandas2.3.3-pydantic2.12.3 21.87% <0.00%> (-0.54%) ⬇️
unit-tests-ibis-Linux-py3.10-pandas2.3.3-polars 28.17% <0.25%> (-0.68%) ⬇️
unit-tests-ibis-Linux-py3.11-pandas2.3.3-polars 28.17% <0.25%> (-0.68%) ⬇️
unit-tests-ibis-Linux-py3.12-pandas2.3.3-polars 28.17% <0.25%> (-0.68%) ⬇️
unit-tests-ibis-Linux-py3.13-pandas2.3.3-polars 28.17% <0.25%> (-0.68%) ⬇️
unit-tests-ibis-Linux-py3.14-pandas2.3.3-polars 27.99% <0.25%> (-0.67%) ⬇️
unit-tests-ibis-Windows-py3.10-pandas2.3.3-polars 28.10% <0.25%> (-0.68%) ⬇️
unit-tests-ibis-Windows-py3.11-pandas2.3.3-polars 28.10% <0.25%> (-0.68%) ⬇️
unit-tests-ibis-Windows-py3.12-pandas2.3.3-polars 28.10% <0.25%> (-0.68%) ⬇️
unit-tests-ibis-Windows-py3.13-pandas2.3.3-polars 28.10% <0.25%> (-0.68%) ⬇️
unit-tests-ibis-Windows-py3.14-pandas2.3.3-polars 27.92% <0.25%> (-0.67%) ⬇️
unit-tests-io-Linux-py3.11-pandas3.0.0-pydantic2.12.3 37.19% <0.00%> (-0.91%) ⬇️
unit-tests-io-Linux-py3.12-pandas2.3.3-pydantic2.12.3 37.22% <0.00%> (-0.91%) ⬇️
unit-tests-io-Linux-py3.13-pandas3.0.0-pydantic2.12.3 37.19% <0.00%> (?)
unit-tests-io-Linux-py3.14-pandas2.3.3-pydantic2.12.3 37.12% <0.00%> (-0.90%) ⬇️
unit-tests-modin-dask-Linux-py3.12-pandas2.3.3-polars 29.94% <0.00%> (-0.73%) ⬇️
unit-tests-modin-ray-Linux-py3.10-pandas2.3.3-polars 29.91% <0.00%> (-0.73%) ⬇️
unit-tests-modin-ray-Linux-py3.11-pandas2.3.3-polars 29.91% <0.00%> (-0.73%) ⬇️
unit-tests-modin-ray-Linux-py3.12-pandas2.3.3-polars 29.91% <0.00%> (-0.73%) ⬇️
unit-tests-narwhals-Linux-py3.10 27.68% <7.69%> (-0.59%) ⬇️
unit-tests-narwhals-Linux-py3.11 27.68% <7.69%> (-0.59%) ⬇️
unit-tests-narwhals-Linux-py3.12 27.68% <7.69%> (-0.59%) ⬇️
unit-tests-narwhals-Linux-py3.13 27.68% <7.69%> (-0.59%) ⬇️
unit-tests-narwhals-Linux-py3.14 27.47% <7.79%> (-0.57%) ⬇️
unit-tests-narwhals-backend-ibis-py3.10 30.58% <7.17%> (-1.23%) ⬇️
unit-tests-narwhals-backend-ibis-py3.11 30.47% <7.17%> (-1.23%) ⬇️
unit-tests-narwhals-backend-ibis-py3.12 30.47% <7.17%> (-1.23%) ⬇️
unit-tests-narwhals-backend-ibis-py3.13 30.47% <7.17%> (-1.23%) ⬇️
unit-tests-narwhals-backend-ibis-py3.14 30.27% <7.27%> (-1.22%) ⬇️
unit-tests-narwhals-backend-polars-py3.10 33.74% <6.92%> (-0.75%) ⬇️
unit-tests-narwhals-backend-polars-py3.11 33.73% <6.92%> (-0.75%) ⬇️
unit-tests-narwhals-backend-polars-py3.12 33.73% <6.92%> (-0.75%) ⬇️
unit-tests-narwhals-backend-polars-py3.13 33.73% <6.92%> (-0.75%) ⬇️
unit-tests-narwhals-backend-polars-py3.14 33.60% <7.01%> (-0.73%) ⬇️
unit-tests-narwhals-backend-pyspark-py3.10 40.56% <12.56%> (-2.91%) ⬇️
unit-tests-narwhals-backend-pyspark-py3.11 40.59% <12.56%> (-2.91%) ⬇️
unit-tests-pandas-Linux-py3.10-pandas2.3.3-pydantic1.10.11 41.75% <0.25%> (-1.02%) ⬇️
unit-tests-pandas-Linux-py3.10-pandas2.3.3-pydantic2.12.3 41.90% <0.25%> (-1.02%) ⬇️
unit-tests-pandas-Linux-py3.11-pandas2.3.3-pydantic1.10.11 41.75% <0.25%> (-1.02%) ⬇️
unit-tests-pandas-Linux-py3.11-pandas2.3.3-pydantic2.12.3 41.90% <0.25%> (-1.02%) ⬇️
unit-tests-pandas-Linux-py3.11-pandas3.0.0-pydantic1.10.11 41.76% <0.25%> (-1.02%) ⬇️
unit-tests-pandas-Linux-py3.11-pandas3.0.0-pydantic2.12.3 41.91% <0.25%> (-1.02%) ⬇️
unit-tests-pandas-Linux-py3.12-pandas2.3.3-pydantic1.10.11 41.73% <0.25%> (-1.02%) ⬇️
unit-tests-pandas-Linux-py3.12-pandas2.3.3-pydantic2.12.3 41.89% <0.25%> (-1.02%) ⬇️
unit-tests-pandas-Linux-py3.12-pandas3.0.0-pydantic1.10.11 41.75% <0.25%> (-1.02%) ⬇️
unit-tests-pandas-Linux-py3.12-pandas3.0.0-pydantic2.12.3 41.90% <0.25%> (-1.02%) ⬇️
unit-tests-pandas-Linux-py3.13-pandas2.3.3-pydantic1.10.11 41.73% <0.25%> (-1.02%) ⬇️
unit-tests-pandas-Linux-py3.13-pandas2.3.3-pydantic2.12.3 41.89% <0.25%> (-1.02%) ⬇️
unit-tests-pandas-Linux-py3.13-pandas3.0.0-pydantic1.10.11 41.75% <0.25%> (-1.02%) ⬇️
unit-tests-pandas-Linux-py3.13-pandas3.0.0-pydantic2.12.3 41.90% <0.25%> (-1.02%) ⬇️
unit-tests-pandas-Linux-py3.14-pandas2.3.3-pydantic2.12.3 41.88% <0.25%> (-1.01%) ⬇️
unit-tests-pandas-Linux-py3.14-pandas3.0.0-pydantic2.12.3 41.89% <0.25%> (-1.01%) ⬇️
unit-tests-pandas-Windows-py3.10-pandas2.3.3-pydantic1.10.11 41.66% <0.25%> (-1.01%) ⬇️
unit-tests-pandas-Windows-py3.10-pandas2.3.3-pydantic2.12.3 41.81% <0.25%> (-1.02%) ⬇️
unit-tests-pandas-Windows-py3.11-pandas2.3.3-pydantic1.10.11 41.66% <0.25%> (-1.01%) ⬇️
unit-tests-pandas-Windows-py3.11-pandas2.3.3-pydantic2.12.3 41.81% <0.25%> (-1.02%) ⬇️
unit-tests-pandas-Windows-py3.11-pandas3.0.0-pydantic1.10.11 41.67% <0.25%> (-1.01%) ⬇️
unit-tests-pandas-Windows-py3.11-pandas3.0.0-pydantic2.12.3 41.83% <0.25%> (-1.02%) ⬇️
unit-tests-pandas-Windows-py3.12-pandas2.3.3-pydantic1.10.11 41.65% <0.25%> (-1.01%) ⬇️
unit-tests-pandas-Windows-py3.12-pandas2.3.3-pydantic2.12.3 41.80% <0.25%> (-1.02%) ⬇️
unit-tests-pandas-Windows-py3.12-pandas3.0.0-pydantic1.10.11 41.66% <0.25%> (-1.01%) ⬇️
unit-tests-pandas-Windows-py3.12-pandas3.0.0-pydantic2.12.3 41.81% <0.25%> (-1.02%) ⬇️
unit-tests-pandas-Windows-py3.13-pandas2.3.3-pydantic1.10.11 41.65% <0.25%> (-1.01%) ⬇️
unit-tests-pandas-Windows-py3.13-pandas2.3.3-pydantic2.12.3 41.80% <0.25%> (-1.02%) ⬇️
unit-tests-pandas-Windows-py3.13-pandas3.0.0-pydantic1.10.11 41.66% <0.25%> (-1.01%) ⬇️
unit-tests-pandas-Windows-py3.13-pandas3.0.0-pydantic2.12.3 41.81% <0.25%> (-1.02%) ⬇️
unit-tests-pandas-Windows-py3.14-pandas2.3.3-pydantic2.12.3 41.79% <0.25%> (-1.01%) ⬇️
unit-tests-pandas-Windows-py3.14-pandas3.0.0-pydantic2.12.3 41.81% <0.25%> (-1.01%) ⬇️
unit-tests-pandas-macOS-py3.10-pandas2.3.3-pydantic1.10.11 41.69% <0.25%> (-1.01%) ⬇️
unit-tests-pandas-macOS-py3.10-pandas2.3.3-pydantic2.12.3 41.84% <0.25%> (-1.02%) ⬇️
unit-tests-pandas-macOS-py3.11-pandas2.3.3-pydantic1.10.11 41.69% <0.25%> (-1.01%) ⬇️
unit-tests-pandas-macOS-py3.11-pandas2.3.3-pydantic2.12.3 41.84% <0.25%> (-1.02%) ⬇️
unit-tests-pandas-macOS-py3.11-pandas3.0.0-pydantic1.10.11 41.70% <0.25%> (-1.01%) ⬇️
unit-tests-pandas-macOS-py3.11-pandas3.0.0-pydantic2.12.3 41.85% <0.25%> (-1.02%) ⬇️
unit-tests-pandas-macOS-py3.12-pandas2.3.3-pydantic1.10.11 41.67% <0.25%> (-1.01%) ⬇️
unit-tests-pandas-macOS-py3.12-pandas2.3.3-pydantic2.12.3 41.83% <0.25%> (-1.02%) ⬇️
unit-tests-pandas-macOS-py3.12-pandas3.0.0-pydantic1.10.11 41.69% <0.25%> (-1.01%) ⬇️
unit-tests-pandas-macOS-py3.12-pandas3.0.0-pydantic2.12.3 41.84% <0.25%> (-1.02%) ⬇️
unit-tests-pandas-macOS-py3.13-pandas2.3.3-pydantic1.10.11 41.67% <0.25%> (-1.01%) ⬇️
unit-tests-pandas-macOS-py3.13-pandas2.3.3-pydantic2.12.3 41.83% <0.25%> (-1.02%) ⬇️
unit-tests-pandas-macOS-py3.13-pandas3.0.0-pydantic1.10.11 41.69% <0.25%> (-1.01%) ⬇️
unit-tests-pandas-macOS-py3.13-pandas3.0.0-pydantic2.12.3 41.84% <0.25%> (-1.02%) ⬇️
unit-tests-pandas-macOS-py3.14-pandas2.3.3-pydantic2.12.3 41.82% <0.25%> (-1.01%) ⬇️
unit-tests-pandas-macOS-py3.14-pandas3.0.0-pydantic2.12.3 41.83% <0.25%> (-1.01%) ⬇️
unit-tests-polars-Linux-py3.10-pandas2.3.3-polars1.33.1 30.34% <0.00%> (-0.74%) ⬇️
unit-tests-polars-Linux-py3.11-pandas2.3.3-polars1.33.1 30.33% <0.00%> (-0.74%) ⬇️
unit-tests-polars-Linux-py3.12-pandas2.3.3-polars1.33.1 30.33% <0.00%> (-0.74%) ⬇️
unit-tests-polars-Linux-py3.13-pandas2.3.3-polars1.33.1 30.33% <0.00%> (-0.74%) ⬇️
unit-tests-polars-Linux-py3.14-pandas2.3.3-polars1.33.1 30.22% <0.00%> (-0.73%) ⬇️
unit-tests-polars-Windows-py3.10-pandas2.3.3-polars1.33.1 30.27% <0.00%> (-0.74%) ⬇️
unit-tests-polars-Windows-py3.11-pandas2.3.3-polars1.33.1 30.26% <0.00%> (-0.74%) ⬇️
unit-tests-polars-Windows-py3.12-pandas2.3.3-polars1.33.1 30.26% <0.00%> (-0.74%) ⬇️
unit-tests-polars-Windows-py3.13-pandas2.3.3-polars1.33.1 30.26% <0.00%> (-0.74%) ⬇️
unit-tests-polars-Windows-py3.14-pandas2.3.3-polars1.33.1 30.14% <0.00%> (-0.73%) ⬇️
unit-tests-polars-macOS-py3.10-pandas2.3.3-polars1.33.1 30.28% <0.00%> (-0.74%) ⬇️
unit-tests-polars-macOS-py3.11-pandas2.3.3-polars1.33.1 30.27% <0.00%> (-0.74%) ⬇️
unit-tests-pyarrow-Linux-py3.10-pandas2.3.3-polars 24.15% <73.33%> (?)
unit-tests-pyarrow-Linux-py3.11-pandas2.3.3-polars 24.15% <73.33%> (?)
unit-tests-pyarrow-Linux-py3.12-pandas2.3.3-polars 24.15% <73.33%> (?)
unit-tests-pyarrow-Linux-py3.13-pandas2.3.3-polars 24.15% <73.33%> (?)
unit-tests-pyarrow-Linux-py3.14-pandas2.3.3-polars 24.00% <72.98%> (?)
unit-tests-pyarrow-Windows-py3.10-pandas2.3.3-polars 24.07% <73.33%> (?)
unit-tests-pyarrow-Windows-py3.11-pandas2.3.3-polars 24.07% <73.33%> (?)
unit-tests-pyarrow-Windows-py3.12-pandas2.3.3-polars 24.07% <73.33%> (?)
unit-tests-pyarrow-Windows-py3.13-pandas2.3.3-polars 24.07% <73.33%> (?)
unit-tests-pyarrow-Windows-py3.14-pandas2.3.3-polars 23.92% <72.98%> (?)
unit-tests-pyarrow-macOS-py3.10-pandas2.3.3-polars 24.09% <73.33%> (?)
unit-tests-pyspark-macOS-py3.10-pandas2.3.3-polars 37.99% <0.00%> (-0.89%) ⬇️
unit-tests-strategies-Linux-py3.13-pandas2.3.3-pydantic2.12.3 33.39% <0.25%> (-0.80%) ⬇️
unit-tests-xarray-Linux-py3.10-pandas2.3.3-polars 31.05% <0.25%> (-0.71%) ⬇️
unit-tests-xarray-Linux-py3.11-pandas2.3.3-polars 31.05% <0.25%> (-0.71%) ⬇️
unit-tests-xarray-Linux-py3.12-pandas2.3.3-polars 31.05% <0.25%> (-0.71%) ⬇️
unit-tests-xarray-Linux-py3.13-pandas2.3.3-polars 31.05% <0.25%> (-0.71%) ⬇️
unit-tests-xarray-Linux-py3.14-pandas2.3.3-polars 30.99% <0.25%> (-0.70%) ⬇️
unit-tests-xarray-Windows-py3.10-pandas2.3.3-polars 30.98% <0.25%> (-0.70%) ⬇️
unit-tests-xarray-Windows-py3.11-pandas2.3.3-polars 30.98% <0.25%> (-0.70%) ⬇️
unit-tests-xarray-Windows-py3.12-pandas2.3.3-polars 30.98% <0.25%> (-0.70%) ⬇️
unit-tests-xarray-Windows-py3.13-pandas2.3.3-polars 30.98% <0.25%> (-0.70%) ⬇️
unit-tests-xarray-Windows-py3.14-pandas2.3.3-polars 30.92% <0.25%> (-0.70%) ⬇️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

Signed-off-by: Sravan Kumar Kunadi <96312788+sravankumarkunadi@users.noreply.github.com>
@sravankumarkunadi

Copy link
Copy Markdown
Author

Conflict resolved. Kindly review when you get a chance.

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Support pyarrow Table

2 participants