Metadata-Version: 2.4
Name: oxid-frame
Version: 0.1.0
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Rust
Classifier: Topic :: Scientific/Engineering
Summary: A small columnar frame: the same Rust engine under CPython, in a program oxid aot compiles, and in a page
Keywords: dataframe,oxid,pyo3
Home-Page: https://oxid.optersoft.com
Author-email: Optersoft <admin@optersoft.com>
License-Expression: Apache-2.0
Requires-Python: >=3.14
Description-Content-Type: text/markdown; charset=UTF-8; variant=GFM
Project-URL: Homepage, https://oxid.optersoft.com

# oxid-frame

A small columnar frame for [oxid](https://oxid.optersoft.com)'s rust projects. One engine,
three places: a program `oxid aot` compiles calls the crate directly, CPython imports it as a
PyO3 extension module (this wheel), and a page reaches it as WebAssembly (`oxid.frame`).

```python
from oxid_frame import read_csv

f = read_csv(text)
by = f.where_gt("temp_max", 25.0).group(["weather"]).mean("temp_max")
print(by.strings("weather"), by.floats("temp_max"))
```

- Three column types, each nullable: `f64`, `i64` and `str`. `read_csv` infers them (an
  empty field is null, a quoted `""` the empty string); `add_floats`/`add_ints`/`add_strings`
  build a frame from lists.
- `select`, `head`, `tail`, `sort` (stable, nulls last), `where_eq/ne/lt/le/gt/ge`,
  `where_among`, `where_is`, `where_in`: a selection shares the columns and copies no value.
- `group(keys)` then `count`, `sum`, `mean`, `min`, `max`: groups in the order their first
  row appears. A float sum is CPython's own `sum()` (compensated, in row order), so a result
  equals the plain-Python computation on every target.
- `floats/ints/strings(name)` read a column out; `to_csv()` writes floats as Python's `repr`.
- Every error is a `ValueError` naming the column. `free()` releases a frame in a page (which
  has no finaliser) and does nothing here.

Under CPython: `pip install oxid-frame` (Python 3.14+). In an oxid rust project:
`[tool.oxid.crates] oxid_frame = { version = "0.1", package = "oxid-frame", pypi = "oxid-frame" }`.

Apache-2.0, © Optersoft.

