Metadata-Version: 2.4
Name: polaric
Version: 0.1.0
Summary: Validate you Generic polars dataframes
Author-email: gabriel <gabriel.g.robin@airbus.com>
Requires-Python: >=3.11
Requires-Dist: polars>=1.0
Description-Content-Type: text/markdown

# DataFrame Extension for Polars

This package provides a generic extension to Polars `DataFrame`, allowing schema validation and custom validation logic through class-based definitions.

## Features
- **Generic DataFrame**: Ensures type safety using Python's `TypedDict`.
- **Schema Validation**: Automatically checks that the DataFrame conforms to the expected schema.
- **Custom Validation Hooks**: Define additional validation methods prefixed with `check_`.
- **Improved Typing for Rows**: Provides better type safety for `rows(named=True)`.

## Installation
This package depends on `polars`. Install it with:

```sh
pip install polaric
```

## Usage

### Defining a Schema
Schemas are defined using Python's `TypedDict`:

```python
from typing import TypedDict
from polaric import DataFrame
import polars as pl

class BasicSchema(TypedDict):
    a: int

df = pl.DataFrame({"a": [0, 1]})
basic_df = DataFrame[BasicSchema](df)
basic_df.validate()  # Ensures schema correctness
```

### Adding Custom Validations
Extend `DataFrame` and define validation methods prefixed with `check_`:

```python
class BasicSchemaDataFrame(DataFrame[BasicSchema]):
    def check_a_is_positive(self) -> Self:
        assert self.select(pl.col("a").ge(0).all()).item(), "Column a contains negative values!"
        return self

# Example usage
df = pl.DataFrame({"a": [0, 1]})
basic_df = BasicSchemaDataFrame(df)
basic_df.validate()  # Passes validation

# This will raise an AssertionError
df_invalid = pl.DataFrame({"a": [-1, 1]})
BasicSchemaDataFrame(df_invalid).validate()
```

### Get typing goodies !
Ensure row retrieval maintains proper types:

```python
row = basic_df.rows(named=True)[0]
# row is a typedDict !
```


