oxihipo 0.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- oxihipo-0.1.0/.github/workflows/ci.yml +38 -0
- oxihipo-0.1.0/.github/workflows/docs.yml +69 -0
- oxihipo-0.1.0/.github/workflows/wheels.yml +181 -0
- oxihipo-0.1.0/.gitignore +37 -0
- oxihipo-0.1.0/CHANGELOG.md +46 -0
- oxihipo-0.1.0/Cargo.lock +634 -0
- oxihipo-0.1.0/Cargo.toml +75 -0
- oxihipo-0.1.0/LICENSE +21 -0
- oxihipo-0.1.0/PKG-INFO +295 -0
- oxihipo-0.1.0/README.md +389 -0
- oxihipo-0.1.0/RELEASING.md +75 -0
- oxihipo-0.1.0/docs/compression-benchmark.typ +508 -0
- oxihipo-0.1.0/examples/bench_columns.rs +60 -0
- oxihipo-0.1.0/examples/bench_decoders.rs +271 -0
- oxihipo-0.1.0/examples/bench_event_tags.rs +170 -0
- oxihipo-0.1.0/examples/bench_par.rs +87 -0
- oxihipo-0.1.0/examples/bench_read_compression.rs +407 -0
- oxihipo-0.1.0/examples/bench_scan.rs +71 -0
- oxihipo-0.1.0/examples/clas12.rs +86 -0
- oxihipo-0.1.0/examples/columns.rs +69 -0
- oxihipo-0.1.0/examples/list_populated_banks.rs +96 -0
- oxihipo-0.1.0/examples/parallel.rs +70 -0
- oxihipo-0.1.0/examples/read.rs +71 -0
- oxihipo-0.1.0/examples/recook_by_bank.rs +327 -0
- oxihipo-0.1.0/examples/skim.rs +69 -0
- oxihipo-0.1.0/examples/tag_and_skim.rs +134 -0
- oxihipo-0.1.0/examples/write.rs +75 -0
- oxihipo-0.1.0/examples/write_array.rs +102 -0
- oxihipo-0.1.0/proptest-regressions/compress.txt +7 -0
- oxihipo-0.1.0/py/.gitignore +14 -0
- oxihipo-0.1.0/py/Cargo.lock +458 -0
- oxihipo-0.1.0/py/Cargo.toml +48 -0
- oxihipo-0.1.0/py/README.md +256 -0
- oxihipo-0.1.0/py/build.rs +18 -0
- oxihipo-0.1.0/py/examples/analysis.py +42 -0
- oxihipo-0.1.0/py/examples/bench_columns.py +51 -0
- oxihipo-0.1.0/py/examples/bench_compression.py +120 -0
- oxihipo-0.1.0/py/examples/bench_rdataframe.py +164 -0
- oxihipo-0.1.0/py/examples/parallel.py +56 -0
- oxihipo-0.1.0/py/examples/quickstart.py +40 -0
- oxihipo-0.1.0/py/examples/rdataframe.py +58 -0
- oxihipo-0.1.0/py/examples/streaming.py +36 -0
- oxihipo-0.1.0/py/src/bin/gen_sample.rs +81 -0
- oxihipo-0.1.0/py/src/error.rs +63 -0
- oxihipo-0.1.0/py/src/lib.rs +808 -0
- oxihipo-0.1.0/py/tests/data/sample.hipo +0 -0
- oxihipo-0.1.0/py/tests/data/sample_none.hipo +0 -0
- oxihipo-0.1.0/py/tests/test_oxihipo.py +825 -0
- oxihipo-0.1.0/pyproject.toml +61 -0
- oxihipo-0.1.0/python/oxihipo/__init__.py +1321 -0
- oxihipo-0.1.0/python/oxihipo/_oxihipo.pyi +88 -0
- oxihipo-0.1.0/python/oxihipo/_parallel.py +161 -0
- oxihipo-0.1.0/python/oxihipo/py.typed +0 -0
- oxihipo-0.1.0/rust-toolchain.toml +4 -0
- oxihipo-0.1.0/rustfmt.toml +2 -0
- oxihipo-0.1.0/src/compress.rs +538 -0
- oxihipo-0.1.0/src/error.rs +113 -0
- oxihipo-0.1.0/src/event/bank.rs +653 -0
- oxihipo-0.1.0/src/event/build.rs +566 -0
- oxihipo-0.1.0/src/event/composite.rs +308 -0
- oxihipo-0.1.0/src/event/ctx.rs +507 -0
- oxihipo-0.1.0/src/event/event.rs +292 -0
- oxihipo-0.1.0/src/event/mod.rs +27 -0
- oxihipo-0.1.0/src/event/owned.rs +821 -0
- oxihipo-0.1.0/src/event/row_typed.rs +166 -0
- oxihipo-0.1.0/src/lib.rs +197 -0
- oxihipo-0.1.0/src/prelude.rs +12 -0
- oxihipo-0.1.0/src/read/chain.rs +1158 -0
- oxihipo-0.1.0/src/read/columns.rs +786 -0
- oxihipo-0.1.0/src/read/filter.rs +294 -0
- oxihipo-0.1.0/src/read/inner.rs +347 -0
- oxihipo-0.1.0/src/read/iter.rs +369 -0
- oxihipo-0.1.0/src/read/mod.rs +17 -0
- oxihipo-0.1.0/src/read/source.rs +146 -0
- oxihipo-0.1.0/src/schema/dict.rs +196 -0
- oxihipo-0.1.0/src/schema/handle.rs +333 -0
- oxihipo-0.1.0/src/schema/mod.rs +10 -0
- oxihipo-0.1.0/src/schema/parse.rs +292 -0
- oxihipo-0.1.0/src/schema/types.rs +394 -0
- oxihipo-0.1.0/src/tag.rs +440 -0
- oxihipo-0.1.0/src/wire/by_bank.rs +672 -0
- oxihipo-0.1.0/src/wire/bytes.rs +117 -0
- oxihipo-0.1.0/src/wire/constants.rs +177 -0
- oxihipo-0.1.0/src/wire/event_index.rs +148 -0
- oxihipo-0.1.0/src/wire/file_header.rs +193 -0
- oxihipo-0.1.0/src/wire/mod.rs +17 -0
- oxihipo-0.1.0/src/wire/per_column.rs +653 -0
- oxihipo-0.1.0/src/wire/record.rs +404 -0
- oxihipo-0.1.0/src/wire/record_header.rs +250 -0
- oxihipo-0.1.0/src/write/bank.rs +56 -0
- oxihipo-0.1.0/src/write/mod.rs +11 -0
- oxihipo-0.1.0/src/write/record.rs +790 -0
- oxihipo-0.1.0/src/write/row.rs +26 -0
- oxihipo-0.1.0/src/write/writer.rs +767 -0
- oxihipo-0.1.0/tests/all_formats.rs +216 -0
- oxihipo-0.1.0/tests/chain.rs +242 -0
- oxihipo-0.1.0/tests/chain_parallel.rs +227 -0
- oxihipo-0.1.0/tests/columns.rs +451 -0
- oxihipo-0.1.0/tests/corruption.rs +125 -0
- oxihipo-0.1.0/tests/end_to_end.rs +366 -0
- oxihipo-0.1.0/tests/event_tag.rs +519 -0
- oxihipo-0.1.0/tests/macros.rs +249 -0
- oxihipo-0.1.0/tests/no_alloc.rs +188 -0
- oxihipo-0.1.0/tests/per_column.rs +225 -0
- oxihipo-0.1.0/tests/round_trip.rs +748 -0
- oxihipo-0.1.0/tests/skim.rs +124 -0
- oxihipo-0.1.0/website/.gitignore +20 -0
- oxihipo-0.1.0/website/docs/design/event-tagging.md +127 -0
- oxihipo-0.1.0/website/docs/design/python-binding.md +482 -0
- oxihipo-0.1.0/website/docs/design/python-vs-rust-benchmark.md +68 -0
- oxihipo-0.1.0/website/docs/getting-started/python.md +88 -0
- oxihipo-0.1.0/website/docs/getting-started/rust.md +82 -0
- oxihipo-0.1.0/website/docs/intro.md +76 -0
- oxihipo-0.1.0/website/docs/performance/benchmarks.md +172 -0
- oxihipo-0.1.0/website/docs/performance/compression.md +244 -0
- oxihipo-0.1.0/website/docs/performance/shared-filesystems.md +82 -0
- oxihipo-0.1.0/website/docs/python/how-it-works.md +96 -0
- oxihipo-0.1.0/website/docs/python/parallel.md +82 -0
- oxihipo-0.1.0/website/docs/python/rdataframe.md +172 -0
- oxihipo-0.1.0/website/docs/python/reading.md +212 -0
- oxihipo-0.1.0/website/docs/python/streaming.md +73 -0
- oxihipo-0.1.0/website/docs/python/writing.md +75 -0
- oxihipo-0.1.0/website/docs/rust/design.md +86 -0
- oxihipo-0.1.0/website/docs/rust/reading.md +182 -0
- oxihipo-0.1.0/website/docs/rust/writing.md +218 -0
- oxihipo-0.1.0/website/docusaurus.config.js +119 -0
- oxihipo-0.1.0/website/package-lock.json +19533 -0
- oxihipo-0.1.0/website/package.json +46 -0
- oxihipo-0.1.0/website/sidebars.js +51 -0
- oxihipo-0.1.0/website/src/components/HomepageFeatures/index.js +100 -0
- oxihipo-0.1.0/website/src/components/HomepageFeatures/styles.module.css +36 -0
- oxihipo-0.1.0/website/src/css/custom.css +42 -0
- oxihipo-0.1.0/website/src/pages/index.js +144 -0
- oxihipo-0.1.0/website/src/pages/index.module.css +110 -0
- oxihipo-0.1.0/website/static/.nojekyll +0 -0
- oxihipo-0.1.0/website/static/img/favicon.ico +0 -0
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
name: ci
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [master, main]
|
|
6
|
+
pull_request:
|
|
7
|
+
|
|
8
|
+
env:
|
|
9
|
+
CARGO_TERM_COLOR: always
|
|
10
|
+
RUSTFLAGS: -D warnings
|
|
11
|
+
|
|
12
|
+
jobs:
|
|
13
|
+
test:
|
|
14
|
+
runs-on: ubuntu-latest
|
|
15
|
+
steps:
|
|
16
|
+
- uses: actions/checkout@v5
|
|
17
|
+
- uses: dtolnay/rust-toolchain@stable
|
|
18
|
+
with:
|
|
19
|
+
components: rustfmt, clippy
|
|
20
|
+
- uses: Swatinem/rust-cache@v2
|
|
21
|
+
- run: cargo fmt --check
|
|
22
|
+
- run: cargo clippy --all-targets -- -D warnings
|
|
23
|
+
- run: cargo test --all-targets
|
|
24
|
+
# High-level smoke test: `cargo test` compiles the examples but never runs
|
|
25
|
+
# them, so a runtime break (panic, bad logic) ships silently. Drive the
|
|
26
|
+
# core examples end-to-end — write → read → recook to Lz4PerBank → read
|
|
27
|
+
# back, tag-and-skim round-trip, plus a small all-format encode/read sweep.
|
|
28
|
+
- name: Smoke-run examples
|
|
29
|
+
run: |
|
|
30
|
+
cargo run --example write -- /tmp/demo.hipo
|
|
31
|
+
cargo run --example read -- /tmp/demo.hipo
|
|
32
|
+
cargo run --example recook_by_bank -- /tmp/demo.hipo /tmp/demo_bybank.hipo
|
|
33
|
+
cargo run --example read -- /tmp/demo_bybank.hipo
|
|
34
|
+
cargo run --example tag_and_skim -- /tmp/tagdemo
|
|
35
|
+
cargo run --example bench_read_compression -- 3000 1
|
|
36
|
+
- run: cargo doc --no-deps
|
|
37
|
+
env:
|
|
38
|
+
RUSTDOCFLAGS: -D warnings
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
name: docs
|
|
2
|
+
|
|
3
|
+
# Build the Docusaurus site on every PR (so a broken link or bad MDX fails
|
|
4
|
+
# review, not main), and deploy to GitHub Pages on push to main.
|
|
5
|
+
#
|
|
6
|
+
# ONE-TIME SETUP: GitHub Pages must be enabled for the repo with its source set
|
|
7
|
+
# to "GitHub Actions" (Settings → Pages → Build and deployment → Source).
|
|
8
|
+
# This workflow deliberately does not use `configure-pages`' `enablement: true`,
|
|
9
|
+
# because that input requires a token with `administration:write` (a PAT or App
|
|
10
|
+
# token) — the default GITHUB_TOKEN cannot enable Pages.
|
|
11
|
+
on:
|
|
12
|
+
push:
|
|
13
|
+
branches: [main]
|
|
14
|
+
paths:
|
|
15
|
+
- 'website/**'
|
|
16
|
+
- '.github/workflows/docs.yml'
|
|
17
|
+
pull_request:
|
|
18
|
+
paths:
|
|
19
|
+
- 'website/**'
|
|
20
|
+
- '.github/workflows/docs.yml'
|
|
21
|
+
workflow_dispatch:
|
|
22
|
+
|
|
23
|
+
permissions:
|
|
24
|
+
contents: read
|
|
25
|
+
|
|
26
|
+
concurrency:
|
|
27
|
+
group: docs-${{ github.ref }}
|
|
28
|
+
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
|
|
29
|
+
|
|
30
|
+
defaults:
|
|
31
|
+
run:
|
|
32
|
+
working-directory: website
|
|
33
|
+
|
|
34
|
+
jobs:
|
|
35
|
+
build:
|
|
36
|
+
name: build
|
|
37
|
+
runs-on: ubuntu-latest
|
|
38
|
+
steps:
|
|
39
|
+
- uses: actions/checkout@v5
|
|
40
|
+
- uses: actions/setup-node@v7
|
|
41
|
+
with:
|
|
42
|
+
node-version: 22
|
|
43
|
+
cache: npm
|
|
44
|
+
cache-dependency-path: website/package-lock.json
|
|
45
|
+
- name: Install dependencies
|
|
46
|
+
run: npm ci
|
|
47
|
+
# `onBrokenLinks: 'throw'` means a dead cross-reference fails here.
|
|
48
|
+
- name: Build
|
|
49
|
+
run: npm run build
|
|
50
|
+
- name: Upload Pages artifact
|
|
51
|
+
if: github.event_name != 'pull_request'
|
|
52
|
+
uses: actions/upload-pages-artifact@v5
|
|
53
|
+
with:
|
|
54
|
+
path: website/build
|
|
55
|
+
|
|
56
|
+
deploy:
|
|
57
|
+
name: deploy
|
|
58
|
+
if: github.event_name != 'pull_request'
|
|
59
|
+
needs: build
|
|
60
|
+
runs-on: ubuntu-latest
|
|
61
|
+
environment:
|
|
62
|
+
name: github-pages
|
|
63
|
+
url: ${{ steps.deployment.outputs.page_url }}
|
|
64
|
+
permissions:
|
|
65
|
+
pages: write # to deploy
|
|
66
|
+
id-token: write # to verify the deployment origin
|
|
67
|
+
steps:
|
|
68
|
+
- id: deployment
|
|
69
|
+
uses: actions/deploy-pages@v5
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
name: wheels
|
|
2
|
+
|
|
3
|
+
# Build (and, on a tag, publish) the `oxihipo` Python wheels. The extension is
|
|
4
|
+
# abi3 (one wheel per OS/arch works on CPython >= 3.13) and pure-Rust
|
|
5
|
+
# (default-features = false), so the aarch64 / cross builds need no C toolchain.
|
|
6
|
+
on:
|
|
7
|
+
push:
|
|
8
|
+
branches: [main, master]
|
|
9
|
+
tags: ["v*"]
|
|
10
|
+
pull_request:
|
|
11
|
+
workflow_dispatch:
|
|
12
|
+
|
|
13
|
+
permissions:
|
|
14
|
+
contents: read
|
|
15
|
+
|
|
16
|
+
concurrency:
|
|
17
|
+
group: wheels-${{ github.ref }}
|
|
18
|
+
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
|
|
19
|
+
|
|
20
|
+
defaults:
|
|
21
|
+
run:
|
|
22
|
+
shell: bash
|
|
23
|
+
|
|
24
|
+
jobs:
|
|
25
|
+
# Native build + the full pytest suite on each OS — fast confidence that the
|
|
26
|
+
# binding imports and behaves, before spending time on the cross wheels.
|
|
27
|
+
test:
|
|
28
|
+
name: test (${{ matrix.os }})
|
|
29
|
+
runs-on: ${{ matrix.os }}
|
|
30
|
+
strategy:
|
|
31
|
+
fail-fast: false
|
|
32
|
+
matrix:
|
|
33
|
+
os: [ubuntu-latest, macos-14, windows-latest]
|
|
34
|
+
steps:
|
|
35
|
+
- uses: actions/checkout@v5
|
|
36
|
+
- uses: actions/setup-python@v6
|
|
37
|
+
with:
|
|
38
|
+
python-version: "3.13"
|
|
39
|
+
- uses: dtolnay/rust-toolchain@stable
|
|
40
|
+
- uses: Swatinem/rust-cache@v2
|
|
41
|
+
with:
|
|
42
|
+
workspaces: py
|
|
43
|
+
- name: Build the extension (native)
|
|
44
|
+
working-directory: py
|
|
45
|
+
run: |
|
|
46
|
+
python -m pip install --upgrade pip maturin
|
|
47
|
+
maturin build --release --out dist -i python
|
|
48
|
+
- name: Install wheel + test dependencies
|
|
49
|
+
run: |
|
|
50
|
+
python -m pip install numpy awkward pandas pyarrow pytest "mypy~=2.3"
|
|
51
|
+
python -m pip install --no-index --find-links py/dist oxihipo --no-deps
|
|
52
|
+
- name: Run the binding's test suite
|
|
53
|
+
run: python -m pytest py/tests -q
|
|
54
|
+
- name: Type-check the pure-Python package (mypy)
|
|
55
|
+
working-directory: py
|
|
56
|
+
run: python -m mypy
|
|
57
|
+
- name: Check the compiled stub matches the extension (stubtest)
|
|
58
|
+
working-directory: py
|
|
59
|
+
run: python -m mypy.stubtest oxihipo._oxihipo
|
|
60
|
+
- name: Assert the py.typed marker ships in the wheel (PEP 561)
|
|
61
|
+
run: |
|
|
62
|
+
python - <<'PY'
|
|
63
|
+
import glob, zipfile
|
|
64
|
+
whl = sorted(glob.glob("py/dist/*.whl"))[-1]
|
|
65
|
+
names = zipfile.ZipFile(whl).namelist()
|
|
66
|
+
assert any(n.endswith("oxihipo/py.typed") for n in names), \
|
|
67
|
+
f"py.typed missing from {whl}: {names}"
|
|
68
|
+
print("py.typed present in", whl)
|
|
69
|
+
PY
|
|
70
|
+
|
|
71
|
+
linux:
|
|
72
|
+
name: wheels linux ${{ matrix.target }}
|
|
73
|
+
runs-on: ubuntu-latest
|
|
74
|
+
strategy:
|
|
75
|
+
fail-fast: false
|
|
76
|
+
matrix:
|
|
77
|
+
target: [x86_64, aarch64]
|
|
78
|
+
steps:
|
|
79
|
+
- uses: actions/checkout@v5
|
|
80
|
+
- uses: PyO3/maturin-action@v1
|
|
81
|
+
with:
|
|
82
|
+
working-directory: py
|
|
83
|
+
target: ${{ matrix.target }}
|
|
84
|
+
manylinux: auto
|
|
85
|
+
args: --release --out dist
|
|
86
|
+
sccache: "true"
|
|
87
|
+
- uses: actions/upload-artifact@v5
|
|
88
|
+
with:
|
|
89
|
+
name: wheels-linux-${{ matrix.target }}
|
|
90
|
+
path: py/dist
|
|
91
|
+
|
|
92
|
+
macos:
|
|
93
|
+
name: wheels macos ${{ matrix.target }}
|
|
94
|
+
runs-on: macos-14
|
|
95
|
+
strategy:
|
|
96
|
+
fail-fast: false
|
|
97
|
+
matrix:
|
|
98
|
+
target: [x86_64, aarch64]
|
|
99
|
+
steps:
|
|
100
|
+
- uses: actions/checkout@v5
|
|
101
|
+
- uses: PyO3/maturin-action@v1
|
|
102
|
+
with:
|
|
103
|
+
working-directory: py
|
|
104
|
+
target: ${{ matrix.target }}
|
|
105
|
+
args: --release --out dist
|
|
106
|
+
sccache: "true"
|
|
107
|
+
- uses: actions/upload-artifact@v5
|
|
108
|
+
with:
|
|
109
|
+
name: wheels-macos-${{ matrix.target }}
|
|
110
|
+
path: py/dist
|
|
111
|
+
|
|
112
|
+
windows:
|
|
113
|
+
name: wheels windows
|
|
114
|
+
runs-on: windows-latest
|
|
115
|
+
steps:
|
|
116
|
+
- uses: actions/checkout@v5
|
|
117
|
+
- uses: PyO3/maturin-action@v1
|
|
118
|
+
with:
|
|
119
|
+
working-directory: py
|
|
120
|
+
target: x64
|
|
121
|
+
args: --release --out dist
|
|
122
|
+
sccache: "true"
|
|
123
|
+
- uses: actions/upload-artifact@v5
|
|
124
|
+
with:
|
|
125
|
+
name: wheels-windows-x64
|
|
126
|
+
path: py/dist
|
|
127
|
+
|
|
128
|
+
sdist:
|
|
129
|
+
name: sdist
|
|
130
|
+
runs-on: ubuntu-latest
|
|
131
|
+
steps:
|
|
132
|
+
- uses: actions/checkout@v5
|
|
133
|
+
- uses: PyO3/maturin-action@v1
|
|
134
|
+
with:
|
|
135
|
+
working-directory: py
|
|
136
|
+
command: sdist
|
|
137
|
+
args: --out dist
|
|
138
|
+
- uses: actions/upload-artifact@v5
|
|
139
|
+
with:
|
|
140
|
+
name: wheels-sdist
|
|
141
|
+
path: py/dist
|
|
142
|
+
|
|
143
|
+
# Fail fast if the pushed tag doesn't match the packaged version, before the
|
|
144
|
+
# (irreversible) publish. `v0.1.0` must match `version` in py/pyproject.toml.
|
|
145
|
+
tag-check:
|
|
146
|
+
name: tag matches version
|
|
147
|
+
if: startsWith(github.ref, 'refs/tags/v')
|
|
148
|
+
runs-on: ubuntu-latest
|
|
149
|
+
steps:
|
|
150
|
+
- uses: actions/checkout@v5
|
|
151
|
+
- name: Assert tag == pyproject version
|
|
152
|
+
run: |
|
|
153
|
+
tag="${GITHUB_REF_NAME#v}"
|
|
154
|
+
proj=$(grep -m1 '^version' py/pyproject.toml | sed -E 's/.*"([^"]+)".*/\1/')
|
|
155
|
+
echo "tag=$tag pyproject=$proj"
|
|
156
|
+
test "$tag" = "$proj" || { echo "::error::tag v$tag does not match py/pyproject.toml version $proj"; exit 1; }
|
|
157
|
+
|
|
158
|
+
# Publish to PyPI on a version tag via Trusted Publishing (OIDC) — no stored
|
|
159
|
+
# token. One-time setup: on PyPI add a "pending publisher" for project
|
|
160
|
+
# `oxihipo`, repo `mathieuouillon/oxihipo`, workflow `wheels.yml`, environment
|
|
161
|
+
# `pypi`. The OIDC `id-token` below is exchanged for a short-lived upload
|
|
162
|
+
# credential; PEP 740 attestations are generated automatically.
|
|
163
|
+
release:
|
|
164
|
+
name: publish to PyPI
|
|
165
|
+
runs-on: ubuntu-latest
|
|
166
|
+
if: startsWith(github.ref, 'refs/tags/v')
|
|
167
|
+
needs: [tag-check, test, linux, macos, windows, sdist]
|
|
168
|
+
environment:
|
|
169
|
+
name: pypi
|
|
170
|
+
url: https://pypi.org/p/oxihipo
|
|
171
|
+
permissions:
|
|
172
|
+
id-token: write # mint the OIDC token Trusted Publishing verifies
|
|
173
|
+
steps:
|
|
174
|
+
- uses: actions/download-artifact@v5
|
|
175
|
+
with:
|
|
176
|
+
pattern: wheels-*
|
|
177
|
+
path: dist
|
|
178
|
+
merge-multiple: true # flatten every artifact into dist/
|
|
179
|
+
- uses: pypa/gh-action-pypi-publish@release/v1
|
|
180
|
+
with:
|
|
181
|
+
packages-dir: dist
|
oxihipo-0.1.0/.gitignore
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# Build artifacts
|
|
2
|
+
/target
|
|
3
|
+
**/*.rs.bk
|
|
4
|
+
|
|
5
|
+
# Profiling
|
|
6
|
+
*.profraw
|
|
7
|
+
*.profdata
|
|
8
|
+
perf.data*
|
|
9
|
+
flamegraph.svg
|
|
10
|
+
|
|
11
|
+
# Editor backups & swap files
|
|
12
|
+
*~
|
|
13
|
+
*.swp
|
|
14
|
+
*.swo
|
|
15
|
+
|
|
16
|
+
# IDE state
|
|
17
|
+
.idea/
|
|
18
|
+
|
|
19
|
+
# OS metadata
|
|
20
|
+
.DS_Store
|
|
21
|
+
Thumbs.db
|
|
22
|
+
|
|
23
|
+
# Local fixtures (large data files kept outside the repo)
|
|
24
|
+
fixtures/large/
|
|
25
|
+
|
|
26
|
+
# Analysis / example output artifacts
|
|
27
|
+
/out
|
|
28
|
+
|
|
29
|
+
# Generated docs (build from the .typ source with `typst compile`)
|
|
30
|
+
/docs/*.pdf
|
|
31
|
+
|
|
32
|
+
# Local env / secrets
|
|
33
|
+
.env
|
|
34
|
+
.env.local
|
|
35
|
+
|
|
36
|
+
# Local tooling
|
|
37
|
+
.claude/
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to this project are documented here. The format follows
|
|
4
|
+
[Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and the project
|
|
5
|
+
adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). While the
|
|
6
|
+
version is below `1.0.0`, minor releases may contain breaking changes.
|
|
7
|
+
|
|
8
|
+
## [Unreleased]
|
|
9
|
+
|
|
10
|
+
## [0.1.0] - 2026-07-20
|
|
11
|
+
|
|
12
|
+
First public release: a pure-Rust HIPO (CLAS12) v6 reader and writer, with a
|
|
13
|
+
columnar, [uproot](https://uproot.readthedocs.io)-shaped Python binding whose
|
|
14
|
+
columns come back as zero-copy [Awkward](https://awkward-array.org) arrays.
|
|
15
|
+
|
|
16
|
+
### Added
|
|
17
|
+
|
|
18
|
+
- **Python reading** — `open` a file / directory / glob / list; `arrays`,
|
|
19
|
+
`array`, and a raw-NumPy `numpy` accessor; `library=` backends `ak` (default),
|
|
20
|
+
`np`, `pd` (pandas), and `arrow` (pyarrow); bank proxies (`f["REC::Particle"]`),
|
|
21
|
+
`filter_name` globs, `entry_start`/`entry_stop`, and discovery (`keys`,
|
|
22
|
+
`typenames`, `show`).
|
|
23
|
+
- **Bounded-memory streaming** — `iterate(step_size=…)` in event- or byte-sized,
|
|
24
|
+
record/file-aligned chunks; multi-process reading with `workers=N` for
|
|
25
|
+
I/O-bound parallel filesystems.
|
|
26
|
+
- **Python writing** — `create` a new file or `recreate` to *decorate* an
|
|
27
|
+
existing one with a derived bank (verbatim event copy); columnar `new_bank` /
|
|
28
|
+
`extend` from NumPy or Awkward, scalar and fixed-length `T#N` array columns.
|
|
29
|
+
- **Event tags** — pushdown `filtered(event_tag=…/event_tag_any=…)`, the
|
|
30
|
+
`event_tags()` column, a persisted name↔bit registry (`tag_names`, filter by
|
|
31
|
+
name), tag-and-skim (`skim(tags=…, tag_names=…)`), and in-place
|
|
32
|
+
`set_event_tag` / `set_event_tags` for uncompressed files.
|
|
33
|
+
- **ROOT RDataFrame bridge** — `rdataframe` / `iterate_rdataframe` feed a
|
|
34
|
+
selection to ROOT's RDataFrame through Awkward's generated (no-copy)
|
|
35
|
+
`RDataSource`; optional `oxihipo[root]` extra.
|
|
36
|
+
- **Compression** — six formats (`none`, `lz4`, `lz4best`, `gzip`, `lz4perbank`,
|
|
37
|
+
`lz4percolumn`); `skim` re-compresses and defaults to `lz4percolumn`.
|
|
38
|
+
- **Rust core** — HIPO v6 reader/writer, `Chain` with pushdown filters, typed
|
|
39
|
+
bank rows and the `bank_row!` / `clas12` helpers, and a columnar `read_columns`
|
|
40
|
+
materializer behind a released GIL.
|
|
41
|
+
- **Packaging** — `abi3` wheels (one per OS/arch, CPython ≥ 3.13) for Linux
|
|
42
|
+
(x86_64/aarch64), macOS (x86_64/aarch64), and Windows (x64), plus an sdist;
|
|
43
|
+
PEP 561 typed (`py.typed`, checked stub).
|
|
44
|
+
|
|
45
|
+
[Unreleased]: https://github.com/mathieuouillon/oxihipo/compare/v0.1.0...HEAD
|
|
46
|
+
[0.1.0]: https://github.com/mathieuouillon/oxihipo/releases/tag/v0.1.0
|