bed-reader 1.1.0__tar.gz → 1.2.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.
- bed_reader-1.2.0/.github/dependabot.yml +16 -0
- bed_reader-1.2.0/.github/workflows/ci.yml +371 -0
- bed_reader-1.2.0/.github/workflows/docs.yml +55 -0
- bed_reader-1.2.0/.github/workflows/release.yml +56 -0
- {bed_reader-1.1.0 → bed_reader-1.2.0}/.gitignore +0 -1
- {bed_reader-1.1.0 → bed_reader-1.2.0}/CHANGELOG.md +22 -0
- {bed_reader-1.1.0 → bed_reader-1.2.0}/Cargo.lock +1006 -644
- {bed_reader-1.1.0 → bed_reader-1.2.0}/Cargo.toml +10 -6
- {bed_reader-1.1.0 → bed_reader-1.2.0}/PKG-INFO +15 -9
- {bed_reader-1.1.0 → bed_reader-1.2.0}/README-rust.md +4 -2
- {bed_reader-1.1.0 → bed_reader-1.2.0}/README.md +4 -2
- bed_reader-1.2.0/RELEASING.md +64 -0
- {bed_reader-1.1.0 → bed_reader-1.2.0}/bed_reader/_open_bed.py +2 -1
- {bed_reader-1.1.0 → bed_reader-1.2.0}/bed_reader/tests/test_open_bed.py +16 -1
- {bed_reader-1.1.0 → bed_reader-1.2.0}/bed_reader/tests/test_open_bed_cloud.py +0 -1
- bed_reader-1.2.0/doc/Makefile +177 -0
- bed_reader-1.2.0/doc/make +0 -0
- bed_reader-1.2.0/doc/make.bat +230 -0
- bed_reader-1.2.0/doc/source/_static/placeholder.txt +0 -0
- bed_reader-1.2.0/doc/source/cloud_urls.rst +218 -0
- bed_reader-1.2.0/doc/source/conf.py +77 -0
- bed_reader-1.2.0/doc/source/index.rst +221 -0
- {bed_reader-1.1.0 → bed_reader-1.2.0}/pyproject.toml +13 -9
- bed_reader-1.2.0/scripts/verify_sdist_wheel.py +82 -0
- bed_reader-1.2.0/specs/PYTHON_3_15_WINDOWS_ARM64_SUPPORT_SPEC.md +482 -0
- {bed_reader-1.1.0 → bed_reader-1.2.0}/src/bed_cloud.rs +35 -10
- {bed_reader-1.1.0 → bed_reader-1.2.0}/src/lib.rs +1 -1
- {bed_reader-1.1.0 → bed_reader-1.2.0}/src/tests.rs +6 -1
- {bed_reader-1.1.0 → bed_reader-1.2.0}/useful.md +66 -22
- bed_reader-1.2.0/uv.lock +1902 -0
- bed_reader-1.1.0/.github/workflows/ci.yml +0 -234
- bed_reader-1.1.0/.github/workflows/docs.yml +0 -45
- bed_reader-1.1.0/_static/_sphinx_javascript_frameworks_compat.js +0 -123
- bed_reader-1.1.0/_static/basic.css +0 -903
- bed_reader-1.1.0/_static/doctools.js +0 -156
- bed_reader-1.1.0/_static/documentation_options.js +0 -14
- bed_reader-1.1.0/_static/file.png +0 -0
- bed_reader-1.1.0/_static/jquery-3.4.1.js +0 -10598
- bed_reader-1.1.0/_static/jquery-3.5.1.js +0 -10872
- bed_reader-1.1.0/_static/jquery-3.6.0.js +0 -10881
- bed_reader-1.1.0/_static/jquery.js +0 -2
- bed_reader-1.1.0/_static/js/badge_only.js +0 -1
- bed_reader-1.1.0/_static/js/html5shiv-printshiv.min.js +0 -4
- bed_reader-1.1.0/_static/js/html5shiv.min.js +0 -4
- bed_reader-1.1.0/_static/js/modernizr.min.js +0 -4
- bed_reader-1.1.0/_static/js/theme.js +0 -1
- bed_reader-1.1.0/_static/language_data.js +0 -199
- bed_reader-1.1.0/_static/minus.png +0 -0
- bed_reader-1.1.0/_static/plus.png +0 -0
- bed_reader-1.1.0/_static/pygments.css +0 -74
- bed_reader-1.1.0/_static/searchtools.js +0 -566
- bed_reader-1.1.0/_static/sphinx_highlight.js +0 -144
- bed_reader-1.1.0/_static/underscore-1.12.0.js +0 -2027
- bed_reader-1.1.0/_static/underscore-1.13.1.js +0 -2042
- bed_reader-1.1.0/_static/underscore-1.3.1.js +0 -999
- bed_reader-1.1.0/_static/underscore.js +0 -6
- {bed_reader-1.1.0 → bed_reader-1.2.0}/AUTHORS.txt +0 -0
- {bed_reader-1.1.0 → bed_reader-1.2.0}/LICENSE.md +0 -0
- {bed_reader-1.1.0 → bed_reader-1.2.0}/bed_reader/__init__.py +0 -0
- {bed_reader-1.1.0 → bed_reader-1.2.0}/bed_reader/_sample_data.py +0 -0
- {bed_reader-1.1.0 → bed_reader-1.2.0}/bed_reader/_to_bed.py +0 -0
- {bed_reader-1.1.0 → bed_reader-1.2.0}/bed_reader/tests/__init__.py +0 -0
- {bed_reader-1.1.0 → bed_reader-1.2.0}/bed_reader/tests/benchmark/bench2.ipynb +0 -0
- {bed_reader-1.1.0 → bed_reader-1.2.0}/bed_reader/tests/benchmark/benchmark.py +0 -0
- {bed_reader-1.1.0 → bed_reader-1.2.0}/bed_reader/tests/data/500x400_o640_array.memmap +0 -0
- {bed_reader-1.1.0 → bed_reader-1.2.0}/bed_reader/tests/data/badfile.bed +0 -0
- {bed_reader-1.1.0 → bed_reader-1.2.0}/bed_reader/tests/data/empty.bed +0 -0
- {bed_reader-1.1.0 → bed_reader-1.2.0}/bed_reader/tests/data/plink_sim_10s_100v_10pmiss.bed +0 -0
- {bed_reader-1.1.0 → bed_reader-1.2.0}/bed_reader/tests/data/plink_sim_10s_100v_10pmiss.bim +0 -0
- {bed_reader-1.1.0 → bed_reader-1.2.0}/bed_reader/tests/data/plink_sim_10s_100v_10pmiss.fam +0 -0
- {bed_reader-1.1.0 → bed_reader-1.2.0}/bed_reader/tests/data/small.bad_bim +0 -0
- {bed_reader-1.1.0 → bed_reader-1.2.0}/bed_reader/tests/data/small.bed +0 -0
- {bed_reader-1.1.0 → bed_reader-1.2.0}/bed_reader/tests/data/small.bim +0 -0
- {bed_reader-1.1.0 → bed_reader-1.2.0}/bed_reader/tests/data/small.bim_bad_positions.bim +0 -0
- {bed_reader-1.1.0 → bed_reader-1.2.0}/bed_reader/tests/data/small.deb +0 -0
- {bed_reader-1.1.0 → bed_reader-1.2.0}/bed_reader/tests/data/small.fam +0 -0
- {bed_reader-1.1.0 → bed_reader-1.2.0}/bed_reader/tests/data/small.fam_bad +0 -0
- {bed_reader-1.1.0 → bed_reader-1.2.0}/bed_reader/tests/data/small.maf +0 -0
- {bed_reader-1.1.0 → bed_reader-1.2.0}/bed_reader/tests/data/small.mib +0 -0
- {bed_reader-1.1.0 → bed_reader-1.2.0}/bed_reader/tests/data/small2_array.memmap +0 -0
- {bed_reader-1.1.0 → bed_reader-1.2.0}/bed_reader/tests/data/small_array.memmap +0 -0
- {bed_reader-1.1.0 → bed_reader-1.2.0}/bed_reader/tests/data/small_no_bim.bed +0 -0
- {bed_reader-1.1.0 → bed_reader-1.2.0}/bed_reader/tests/data/small_no_bim.fam +0 -0
- {bed_reader-1.1.0 → bed_reader-1.2.0}/bed_reader/tests/data/small_no_fam.bed +0 -0
- {bed_reader-1.1.0 → bed_reader-1.2.0}/bed_reader/tests/data/small_no_fam.bim +0 -0
- {bed_reader-1.1.0 → bed_reader-1.2.0}/bed_reader/tests/data/small_too_short.bed +0 -0
- {bed_reader-1.1.0 → bed_reader-1.2.0}/bed_reader/tests/data/small_too_short.bim +0 -0
- {bed_reader-1.1.0 → bed_reader-1.2.0}/bed_reader/tests/data/small_too_short.fam +0 -0
- {bed_reader-1.1.0 → bed_reader-1.2.0}/bed_reader/tests/data/smallmode0.bed +0 -0
- {bed_reader-1.1.0 → bed_reader-1.2.0}/bed_reader/tests/data/smallmode0.bim +0 -0
- {bed_reader-1.1.0 → bed_reader-1.2.0}/bed_reader/tests/data/smallmode0.fam +0 -0
- {bed_reader-1.1.0 → bed_reader-1.2.0}/bed_reader/tests/data/smallmodebad.bed +0 -0
- {bed_reader-1.1.0 → bed_reader-1.2.0}/bed_reader/tests/data/some_missing.bed +0 -0
- {bed_reader-1.1.0 → bed_reader-1.2.0}/bed_reader/tests/data/some_missing.bim +0 -0
- {bed_reader-1.1.0 → bed_reader-1.2.0}/bed_reader/tests/data/some_missing.fam +0 -0
- {bed_reader-1.1.0 → bed_reader-1.2.0}/bed_reader/tests/data/some_missing.properties.npz +0 -0
- {bed_reader-1.1.0 → bed_reader-1.2.0}/bed_reader/tests/data/some_missing.val.npy +0 -0
- {bed_reader-1.1.0 → bed_reader-1.2.0}/bed_reader/tests/data/sparse.bed +0 -0
- {bed_reader-1.1.0 → bed_reader-1.2.0}/bed_reader/tests/data/sparse.bim +0 -0
- {bed_reader-1.1.0 → bed_reader-1.2.0}/bed_reader/tests/data/sparse.fam +0 -0
- {bed_reader-1.1.0 → bed_reader-1.2.0}/bed_reader/tests/data/toydata.5chrom.bed +0 -0
- {bed_reader-1.1.0 → bed_reader-1.2.0}/bed_reader/tests/data/toydata.5chrom.bim +0 -0
- {bed_reader-1.1.0 → bed_reader-1.2.0}/bed_reader/tests/data/toydata.5chrom.fam +0 -0
- {bed_reader-1.1.0 → bed_reader-1.2.0}/bed_reader/tests/registry.txt +0 -0
- {bed_reader-1.1.0 → bed_reader-1.2.0}/bed_reader/tests/test_file_dot.py +0 -0
- {bed_reader-1.1.0 → bed_reader-1.2.0}/bed_reader/tests/test_opt_dep.py +0 -0
- {bed_reader-1.1.0 → bed_reader-1.2.0}/build.rs +0 -0
- {bed_reader-1.1.0 → bed_reader-1.2.0}/examples/cloud.rs +0 -0
- {bed_reader-1.1.0 → bed_reader-1.2.0}/examples/no_cloud.rs +0 -0
- {bed_reader-1.1.0 → bed_reader-1.2.0}/setpath.bat +0 -0
- {bed_reader-1.1.0 → bed_reader-1.2.0}/src/python_module.rs +0 -0
- {bed_reader-1.1.0 → bed_reader-1.2.0}/src/supplemental_documents/cloud_urls_etc.md +0 -0
- {bed_reader-1.1.0 → bed_reader-1.2.0}/src/supplemental_documents/options_etc.md +0 -0
- {bed_reader-1.1.0 → bed_reader-1.2.0}/tests/tests_api.rs +0 -0
- {bed_reader-1.1.0 → bed_reader-1.2.0}/tests/tests_api_cloud.rs +0 -0
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
version: 2
|
|
2
|
+
updates:
|
|
3
|
+
- package-ecosystem: github-actions
|
|
4
|
+
directory: "/"
|
|
5
|
+
schedule:
|
|
6
|
+
interval: monthly
|
|
7
|
+
open-pull-requests-limit: 1
|
|
8
|
+
# Version-specific refs hard-code a compiler and may not accept toolchain
|
|
9
|
+
# inputs. Review installer SHA changes manually to preserve MSRV/stable
|
|
10
|
+
# coverage. The `stable` compiler itself still updates on every CI run.
|
|
11
|
+
ignore:
|
|
12
|
+
- dependency-name: dtolnay/rust-toolchain
|
|
13
|
+
groups:
|
|
14
|
+
github-actions:
|
|
15
|
+
patterns:
|
|
16
|
+
- "*"
|
|
@@ -0,0 +1,371 @@
|
|
|
1
|
+
# This file was originally generated by maturin v0.14.17
|
|
2
|
+
|
|
3
|
+
name: CI3
|
|
4
|
+
|
|
5
|
+
# Full CI runs on pull requests, monthly, and for release tags (via
|
|
6
|
+
# workflow_call). Pushes to main are not retested: branch protection requires
|
|
7
|
+
# PRs to be up to date with main and to pass "CI result" before merging.
|
|
8
|
+
# Documentation deployment on main is handled by docs.yml.
|
|
9
|
+
on:
|
|
10
|
+
schedule:
|
|
11
|
+
- cron: '0 0 1 * *'
|
|
12
|
+
pull_request:
|
|
13
|
+
workflow_dispatch:
|
|
14
|
+
workflow_call:
|
|
15
|
+
|
|
16
|
+
env:
|
|
17
|
+
CARGO_TERM_COLOR: always
|
|
18
|
+
PYTHON_VERSIONS: |
|
|
19
|
+
3.11
|
|
20
|
+
3.12
|
|
21
|
+
3.13
|
|
22
|
+
3.14
|
|
23
|
+
3.15
|
|
24
|
+
PYTHON_VERSIONS_ARGS: "-i python3.11 -i python3.12 -i python3.13 -i python3.14 -i python3.15"
|
|
25
|
+
|
|
26
|
+
permissions:
|
|
27
|
+
contents: read
|
|
28
|
+
|
|
29
|
+
concurrency:
|
|
30
|
+
group: ci-${{ github.ref }}-${{ github.event_name }}
|
|
31
|
+
cancel-in-progress: true
|
|
32
|
+
|
|
33
|
+
jobs:
|
|
34
|
+
|
|
35
|
+
test_rust:
|
|
36
|
+
name: Test Rust
|
|
37
|
+
strategy:
|
|
38
|
+
fail-fast: false
|
|
39
|
+
matrix:
|
|
40
|
+
os: [ubuntu-latest, ubuntu-24.04-arm, windows-latest, windows-11-arm, macos-15, macos-15-intel]
|
|
41
|
+
runs-on: ${{ matrix.os }}
|
|
42
|
+
steps:
|
|
43
|
+
- name: Checkout
|
|
44
|
+
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
45
|
+
- name: Set up Rust (Pinned Version)
|
|
46
|
+
uses: dtolnay/rust-toolchain@cfcaf53ba4c621917ec7f78a66bff7a8848ddad4 # 1.85.0
|
|
47
|
+
with:
|
|
48
|
+
components: clippy, rustfmt, rust-src
|
|
49
|
+
- name: Run Clippy (strict for this pinned version of Rust)
|
|
50
|
+
run: cargo clippy --locked --all-targets --all-features -- -D warnings
|
|
51
|
+
- name: Set up Rust (Latest Stable)
|
|
52
|
+
uses: dtolnay/rust-toolchain@b725eda525362e7cf34af9a7243cac1e3f01a7ec # generic installer
|
|
53
|
+
with:
|
|
54
|
+
toolchain: stable
|
|
55
|
+
components: clippy, rustfmt, rust-src
|
|
56
|
+
- name: Run Clippy (lenient for latest version)
|
|
57
|
+
run: cargo clippy --locked --all-targets --all-features
|
|
58
|
+
- name: Test Rust no-default-features
|
|
59
|
+
run: cargo test --locked --verbose --no-default-features
|
|
60
|
+
- name: Test Rust default features
|
|
61
|
+
run: cargo test --locked --verbose
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
macos:
|
|
65
|
+
strategy:
|
|
66
|
+
fail-fast: false
|
|
67
|
+
matrix:
|
|
68
|
+
include:
|
|
69
|
+
- target: x86_64
|
|
70
|
+
os: macos-15-intel
|
|
71
|
+
deployment-target: "10.12"
|
|
72
|
+
- target: aarch64
|
|
73
|
+
os: macos-15
|
|
74
|
+
deployment-target: "11.0"
|
|
75
|
+
runs-on: ${{ matrix.os }}
|
|
76
|
+
steps:
|
|
77
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
78
|
+
- uses: actions/setup-python@6d4fd22b20465ccc0f7354476588e8df7c9ca0e0 # v7.1.0
|
|
79
|
+
with:
|
|
80
|
+
python-version: ${{ env.PYTHON_VERSIONS }}
|
|
81
|
+
- name: Build wheels
|
|
82
|
+
env:
|
|
83
|
+
MACOSX_DEPLOYMENT_TARGET: ${{ matrix.deployment-target }}
|
|
84
|
+
uses: PyO3/maturin-action@e83996d129638aa358a18fbd1dfb82f0b0fb5d3b # v1
|
|
85
|
+
with:
|
|
86
|
+
target: ${{ matrix.target }}
|
|
87
|
+
args: --release --locked --out dist ${{ env.PYTHON_VERSIONS_ARGS }}
|
|
88
|
+
- name: Upload wheels
|
|
89
|
+
uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2
|
|
90
|
+
with:
|
|
91
|
+
name: wheels-macos-${{ matrix.target }}
|
|
92
|
+
path: dist
|
|
93
|
+
|
|
94
|
+
linux:
|
|
95
|
+
# Native runners keep host build scripts and target C compilers aligned.
|
|
96
|
+
runs-on: ${{ matrix.os }}
|
|
97
|
+
strategy:
|
|
98
|
+
fail-fast: false
|
|
99
|
+
matrix:
|
|
100
|
+
include:
|
|
101
|
+
- target: x86_64
|
|
102
|
+
os: ubuntu-latest
|
|
103
|
+
- target: aarch64
|
|
104
|
+
os: ubuntu-24.04-arm
|
|
105
|
+
steps:
|
|
106
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
107
|
+
- uses: actions/setup-python@6d4fd22b20465ccc0f7354476588e8df7c9ca0e0 # v7.1.0
|
|
108
|
+
with:
|
|
109
|
+
python-version: ${{ env.PYTHON_VERSIONS }}
|
|
110
|
+
|
|
111
|
+
- name: Build wheels
|
|
112
|
+
uses: PyO3/maturin-action@e83996d129638aa358a18fbd1dfb82f0b0fb5d3b # v1
|
|
113
|
+
with:
|
|
114
|
+
target: ${{ matrix.target }}
|
|
115
|
+
args: --release --locked --out dist ${{ env.PYTHON_VERSIONS_ARGS }}
|
|
116
|
+
manylinux: auto
|
|
117
|
+
|
|
118
|
+
- name: Upload wheels
|
|
119
|
+
uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2
|
|
120
|
+
with:
|
|
121
|
+
name: wheels-linux-${{ matrix.target }}
|
|
122
|
+
path: dist
|
|
123
|
+
|
|
124
|
+
windows:
|
|
125
|
+
runs-on: ${{ matrix.os }}
|
|
126
|
+
strategy:
|
|
127
|
+
fail-fast: false
|
|
128
|
+
matrix:
|
|
129
|
+
include:
|
|
130
|
+
- os: windows-latest
|
|
131
|
+
target: x64
|
|
132
|
+
architecture: x64
|
|
133
|
+
- os: windows-11-arm
|
|
134
|
+
target: aarch64-pc-windows-msvc
|
|
135
|
+
architecture: arm64
|
|
136
|
+
steps:
|
|
137
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
138
|
+
- uses: actions/setup-python@6d4fd22b20465ccc0f7354476588e8df7c9ca0e0 # v7.1.0
|
|
139
|
+
with:
|
|
140
|
+
python-version: ${{ env.PYTHON_VERSIONS }}
|
|
141
|
+
architecture: ${{ matrix.architecture }}
|
|
142
|
+
- name: Build wheels
|
|
143
|
+
uses: PyO3/maturin-action@e83996d129638aa358a18fbd1dfb82f0b0fb5d3b # v1
|
|
144
|
+
with:
|
|
145
|
+
target: ${{ matrix.target }}
|
|
146
|
+
args: --release --locked --out dist ${{ env.PYTHON_VERSIONS_ARGS }}
|
|
147
|
+
- name: Upload wheels
|
|
148
|
+
uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2
|
|
149
|
+
with:
|
|
150
|
+
name: wheels-windows-${{ matrix.target }}
|
|
151
|
+
path: dist
|
|
152
|
+
|
|
153
|
+
sdist:
|
|
154
|
+
runs-on: ubuntu-latest
|
|
155
|
+
steps:
|
|
156
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
157
|
+
- name: Build sdist
|
|
158
|
+
uses: PyO3/maturin-action@e83996d129638aa358a18fbd1dfb82f0b0fb5d3b # v1
|
|
159
|
+
with:
|
|
160
|
+
command: sdist
|
|
161
|
+
args: --out dist
|
|
162
|
+
- name: Upload sdist
|
|
163
|
+
uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2
|
|
164
|
+
with:
|
|
165
|
+
name: wheels-sdist
|
|
166
|
+
path: dist
|
|
167
|
+
|
|
168
|
+
merge_artifacts:
|
|
169
|
+
name: Merge Artifacts
|
|
170
|
+
needs: [macos, linux, windows, sdist]
|
|
171
|
+
runs-on: ubuntu-latest
|
|
172
|
+
steps:
|
|
173
|
+
- name: Create merged directory
|
|
174
|
+
run: mkdir -p merged_dist
|
|
175
|
+
|
|
176
|
+
- name: Download all artifacts
|
|
177
|
+
uses: actions/download-artifact@9000827ccba6bdab643e8b6fd33ac0654aef8333 # v8.0.2
|
|
178
|
+
with:
|
|
179
|
+
path: artifacts
|
|
180
|
+
pattern: wheels-*
|
|
181
|
+
merge-multiple: true
|
|
182
|
+
|
|
183
|
+
- name: List downloaded artifacts
|
|
184
|
+
run: find artifacts -type f | sort
|
|
185
|
+
|
|
186
|
+
- name: Copy artifacts to merged directory
|
|
187
|
+
run: cp -r artifacts/* merged_dist/
|
|
188
|
+
|
|
189
|
+
- name: Install uv
|
|
190
|
+
uses: astral-sh/setup-uv@68559e99cc807c1eb7e9238fd43a15bba460eec2 # v10.3.3
|
|
191
|
+
with:
|
|
192
|
+
version: "0.12.24"
|
|
193
|
+
|
|
194
|
+
- name: Checkout package validation requirements
|
|
195
|
+
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
196
|
+
with:
|
|
197
|
+
path: source
|
|
198
|
+
|
|
199
|
+
- name: Validate distribution metadata
|
|
200
|
+
working-directory: source
|
|
201
|
+
run: |
|
|
202
|
+
uv sync --frozen --only-group dev --no-install-project --python 3.14
|
|
203
|
+
uv run --frozen --no-sync twine check --strict ../merged_dist/*
|
|
204
|
+
|
|
205
|
+
- name: Upload merged artifacts
|
|
206
|
+
uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2
|
|
207
|
+
with:
|
|
208
|
+
name: wheels-all
|
|
209
|
+
path: merged_dist
|
|
210
|
+
|
|
211
|
+
test_python:
|
|
212
|
+
name: Test Python
|
|
213
|
+
env:
|
|
214
|
+
UV_PYTHON: ${{ matrix.python-version }}
|
|
215
|
+
strategy:
|
|
216
|
+
fail-fast: false
|
|
217
|
+
matrix:
|
|
218
|
+
python-version: ["3.11", "3.12", "3.13", "3.14", "3.15"]
|
|
219
|
+
os: [ubuntu-latest, ubuntu-24.04-arm, windows-latest, windows-11-arm, macos-15, macos-15-intel]
|
|
220
|
+
runs-on: ${{ matrix.os }}
|
|
221
|
+
steps:
|
|
222
|
+
- name: Checkout
|
|
223
|
+
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
224
|
+
- name: Install Rust
|
|
225
|
+
uses: dtolnay/rust-toolchain@b725eda525362e7cf34af9a7243cac1e3f01a7ec # generic installer
|
|
226
|
+
with:
|
|
227
|
+
toolchain: stable
|
|
228
|
+
components: clippy, rustfmt, rust-src
|
|
229
|
+
- name: Install Python ${{ matrix.python-version }}
|
|
230
|
+
uses: actions/setup-python@6d4fd22b20465ccc0f7354476588e8df7c9ca0e0 # v7.1.0
|
|
231
|
+
with:
|
|
232
|
+
python-version: ${{ matrix.python-version }}
|
|
233
|
+
architecture: ${{ runner.arch == 'ARM64' && 'arm64' || 'x64' }}
|
|
234
|
+
- name: Install uv
|
|
235
|
+
uses: astral-sh/setup-uv@68559e99cc807c1eb7e9238fd43a15bba460eec2 # v10.3.3
|
|
236
|
+
with:
|
|
237
|
+
version: "0.12.24"
|
|
238
|
+
- name: Pinned Ruff
|
|
239
|
+
run: uvx ruff@0.17.5 check bed_reader
|
|
240
|
+
- name: Install minimal dependencies
|
|
241
|
+
run: uv sync --frozen --extra min_dev
|
|
242
|
+
- name: Run min tests
|
|
243
|
+
shell: bash
|
|
244
|
+
run: |
|
|
245
|
+
if [[ "$RUNNER_OS" != "Windows" ]]; then
|
|
246
|
+
source .venv/bin/activate
|
|
247
|
+
else
|
|
248
|
+
source .venv/Scripts/activate
|
|
249
|
+
fi
|
|
250
|
+
pytest bed_reader/tests/test_opt_dep.py
|
|
251
|
+
- name: Install all dependencies
|
|
252
|
+
run: uv sync --frozen --all-extras
|
|
253
|
+
- name: Run all tests
|
|
254
|
+
shell: bash
|
|
255
|
+
run: |
|
|
256
|
+
if [[ "$RUNNER_OS" != "Windows" ]]; then
|
|
257
|
+
source .venv/bin/activate
|
|
258
|
+
else
|
|
259
|
+
source .venv/Scripts/activate
|
|
260
|
+
fi
|
|
261
|
+
pytest .
|
|
262
|
+
|
|
263
|
+
|
|
264
|
+
artifact-test:
|
|
265
|
+
name: Installed wheel (${{ matrix.os }}, Python ${{ matrix.python-version }})
|
|
266
|
+
needs: merge_artifacts
|
|
267
|
+
runs-on: ${{ matrix.os }}
|
|
268
|
+
timeout-minutes: 30
|
|
269
|
+
strategy:
|
|
270
|
+
fail-fast: false
|
|
271
|
+
matrix:
|
|
272
|
+
os: [ubuntu-latest, ubuntu-24.04-arm, windows-latest, windows-11-arm, macos-15, macos-15-intel]
|
|
273
|
+
python-version: ["3.11", "3.15"]
|
|
274
|
+
steps:
|
|
275
|
+
- name: Checkout test sources
|
|
276
|
+
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
277
|
+
|
|
278
|
+
- name: Install stable Python
|
|
279
|
+
uses: actions/setup-python@6d4fd22b20465ccc0f7354476588e8df7c9ca0e0 # v7.1.0
|
|
280
|
+
with:
|
|
281
|
+
python-version: ${{ matrix.python-version }}
|
|
282
|
+
architecture: ${{ runner.arch == 'ARM64' && 'arm64' || 'x64' }}
|
|
283
|
+
|
|
284
|
+
- name: Install uv
|
|
285
|
+
uses: astral-sh/setup-uv@68559e99cc807c1eb7e9238fd43a15bba460eec2 # v10.3.3
|
|
286
|
+
with:
|
|
287
|
+
version: "0.12.24"
|
|
288
|
+
|
|
289
|
+
- name: Download built distributions
|
|
290
|
+
uses: actions/download-artifact@9000827ccba6bdab643e8b6fd33ac0654aef8333 # v8.0.2
|
|
291
|
+
with:
|
|
292
|
+
name: wheels-all
|
|
293
|
+
path: artifact
|
|
294
|
+
|
|
295
|
+
- name: Install an exact compatible wheel
|
|
296
|
+
run: |
|
|
297
|
+
uv venv --python ${{ matrix.python-version }} .artifact-venv
|
|
298
|
+
uv pip install --python .artifact-venv --no-index --no-deps --only-binary :all: --find-links artifact bed-reader
|
|
299
|
+
uv pip install --python .artifact-venv "bed-reader[samples,sparse,dev]"
|
|
300
|
+
|
|
301
|
+
- name: Test outside the source checkout
|
|
302
|
+
shell: bash
|
|
303
|
+
working-directory: ${{ runner.temp }}
|
|
304
|
+
run: |
|
|
305
|
+
python -c "import pathlib, shutil, sys; shutil.copytree(pathlib.Path(sys.argv[1]) / 'bed_reader' / 'tests', pathlib.Path(sys.argv[2]) / 'bed_reader_artifact_tests')" "$GITHUB_WORKSPACE" "$RUNNER_TEMP"
|
|
306
|
+
uv run --no-project --python "$GITHUB_WORKSPACE/.artifact-venv" python -c "import bed_reader; assert '.artifact-venv' in bed_reader.__file__; print(bed_reader.__file__)"
|
|
307
|
+
uv run --no-project --python "$GITHUB_WORKSPACE/.artifact-venv" python -m pytest --import-mode=importlib --doctest-modules "$RUNNER_TEMP/bed_reader_artifact_tests"
|
|
308
|
+
|
|
309
|
+
sdist-test:
|
|
310
|
+
name: Source distribution (Python ${{ matrix.python-version }})
|
|
311
|
+
needs: sdist
|
|
312
|
+
runs-on: ubuntu-latest
|
|
313
|
+
timeout-minutes: 30
|
|
314
|
+
strategy:
|
|
315
|
+
fail-fast: false
|
|
316
|
+
matrix:
|
|
317
|
+
python-version: ["3.11", "3.15"]
|
|
318
|
+
steps:
|
|
319
|
+
- name: Checkout test sources
|
|
320
|
+
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
321
|
+
|
|
322
|
+
- name: Install stable Python
|
|
323
|
+
uses: actions/setup-python@6d4fd22b20465ccc0f7354476588e8df7c9ca0e0 # v7.1.0
|
|
324
|
+
with:
|
|
325
|
+
python-version: ${{ matrix.python-version }}
|
|
326
|
+
architecture: ${{ runner.arch == 'ARM64' && 'arm64' || 'x64' }}
|
|
327
|
+
|
|
328
|
+
- name: Install uv
|
|
329
|
+
uses: astral-sh/setup-uv@68559e99cc807c1eb7e9238fd43a15bba460eec2 # v10.3.3
|
|
330
|
+
with:
|
|
331
|
+
version: "0.12.24"
|
|
332
|
+
|
|
333
|
+
- name: Download source distribution
|
|
334
|
+
uses: actions/download-artifact@9000827ccba6bdab643e8b6fd33ac0654aef8333 # v8.0.2
|
|
335
|
+
with:
|
|
336
|
+
name: wheels-sdist
|
|
337
|
+
path: artifact
|
|
338
|
+
|
|
339
|
+
- name: Build and install from the source distribution
|
|
340
|
+
run: |
|
|
341
|
+
uv build --wheel --python ${{ matrix.python-version }} --no-sources --out-dir sdist-wheel artifact/*.tar.gz
|
|
342
|
+
uv venv --python ${{ matrix.python-version }} .artifact-venv
|
|
343
|
+
uv pip install --python .artifact-venv --no-index --no-deps --only-binary :all: --find-links sdist-wheel bed-reader
|
|
344
|
+
uv pip install --python .artifact-venv "bed-reader[samples,sparse,dev]"
|
|
345
|
+
|
|
346
|
+
- name: Compare complete direct and sdist-derived wheels
|
|
347
|
+
if: matrix.python-version == '3.11'
|
|
348
|
+
run: uv run --no-project --python 3.11 python scripts/verify_sdist_wheel.py artifact/*.tar.gz
|
|
349
|
+
|
|
350
|
+
- name: Test outside the source checkout
|
|
351
|
+
working-directory: ${{ runner.temp }}
|
|
352
|
+
run: |
|
|
353
|
+
python -c "import pathlib, shutil, sys; shutil.copytree(pathlib.Path(sys.argv[1]) / 'bed_reader' / 'tests', pathlib.Path(sys.argv[2]) / 'bed_reader_artifact_tests')" "$GITHUB_WORKSPACE" "$RUNNER_TEMP"
|
|
354
|
+
uv run --no-project --python "$GITHUB_WORKSPACE/.artifact-venv" python -c "import bed_reader; assert '.artifact-venv' in bed_reader.__file__; print(bed_reader.__file__)"
|
|
355
|
+
uv run --no-project --python "$GITHUB_WORKSPACE/.artifact-venv" python -m pytest --import-mode=importlib --doctest-modules "$RUNNER_TEMP/bed_reader_artifact_tests"
|
|
356
|
+
|
|
357
|
+
ci-result:
|
|
358
|
+
# The single required status check for branch protection. It runs even
|
|
359
|
+
# when other jobs fail, so a failure can never appear as a passing skip.
|
|
360
|
+
name: CI result
|
|
361
|
+
if: always()
|
|
362
|
+
needs: [test_rust, macos, linux, windows, sdist, merge_artifacts, test_python, artifact-test, sdist-test]
|
|
363
|
+
runs-on: ubuntu-latest
|
|
364
|
+
timeout-minutes: 5
|
|
365
|
+
steps:
|
|
366
|
+
- name: Require every CI job to succeed
|
|
367
|
+
env:
|
|
368
|
+
RESULTS: ${{ toJSON(needs.*.result) }}
|
|
369
|
+
run: |
|
|
370
|
+
echo "$RESULTS"
|
|
371
|
+
jq -e 'all(.[]; . == "success")' <<< "$RESULTS"
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
name: Build and Deploy Documentation
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches:
|
|
6
|
+
- main
|
|
7
|
+
workflow_dispatch: # This allows manual triggering of the workflow
|
|
8
|
+
|
|
9
|
+
permissions:
|
|
10
|
+
contents: read
|
|
11
|
+
|
|
12
|
+
jobs:
|
|
13
|
+
build-and-deploy:
|
|
14
|
+
runs-on: ubuntu-latest
|
|
15
|
+
timeout-minutes: 20
|
|
16
|
+
permissions:
|
|
17
|
+
contents: write
|
|
18
|
+
|
|
19
|
+
steps:
|
|
20
|
+
- name: Checkout the code
|
|
21
|
+
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
22
|
+
|
|
23
|
+
- name: Install stable Python
|
|
24
|
+
uses: actions/setup-python@6d4fd22b20465ccc0f7354476588e8df7c9ca0e0 # v7.1.0
|
|
25
|
+
with:
|
|
26
|
+
python-version: "3.14"
|
|
27
|
+
|
|
28
|
+
- name: Install uv
|
|
29
|
+
uses: astral-sh/setup-uv@68559e99cc807c1eb7e9238fd43a15bba460eec2 # v10.3.3
|
|
30
|
+
with:
|
|
31
|
+
version: "0.12.24"
|
|
32
|
+
|
|
33
|
+
- name: Install Rust
|
|
34
|
+
uses: dtolnay/rust-toolchain@b725eda525362e7cf34af9a7243cac1e3f01a7ec # generic installer
|
|
35
|
+
with:
|
|
36
|
+
toolchain: stable
|
|
37
|
+
components: rust-src
|
|
38
|
+
|
|
39
|
+
- name: Setup, Lint, and Test Python
|
|
40
|
+
run: |
|
|
41
|
+
uv sync --frozen --all-extras
|
|
42
|
+
source .venv/bin/activate
|
|
43
|
+
sphinx-build --version # Verify Sphinx is installed
|
|
44
|
+
|
|
45
|
+
- name: Build the Sphinx documentation
|
|
46
|
+
working-directory: ./doc
|
|
47
|
+
run: |
|
|
48
|
+
source ../.venv/bin/activate
|
|
49
|
+
make html SPHINXOPTS="-W --keep-going -E -a"
|
|
50
|
+
|
|
51
|
+
- name: Deploy to GitHub Pages
|
|
52
|
+
uses: peaceiris/actions-gh-pages@84c30a85c19949d7eee79c4ff27748b70285e453 # v4
|
|
53
|
+
with:
|
|
54
|
+
github_token: ${{ secrets.GITHUB_TOKEN }}
|
|
55
|
+
publish_dir: doc/build/html
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
name: Release
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
tags: ["v*"]
|
|
6
|
+
|
|
7
|
+
permissions:
|
|
8
|
+
contents: read
|
|
9
|
+
|
|
10
|
+
concurrency:
|
|
11
|
+
group: release-${{ github.ref }}
|
|
12
|
+
cancel-in-progress: false
|
|
13
|
+
|
|
14
|
+
jobs:
|
|
15
|
+
validate-tag:
|
|
16
|
+
runs-on: ubuntu-latest
|
|
17
|
+
steps:
|
|
18
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
19
|
+
- uses: actions/setup-python@6d4fd22b20465ccc0f7354476588e8df7c9ca0e0 # v7.1.0
|
|
20
|
+
with:
|
|
21
|
+
python-version: "3.14"
|
|
22
|
+
- name: Verify Python, Rust, and tag versions agree
|
|
23
|
+
env:
|
|
24
|
+
RELEASE_TAG: ${{ github.ref_name }}
|
|
25
|
+
run: |
|
|
26
|
+
python - <<'PY'
|
|
27
|
+
import os
|
|
28
|
+
from pathlib import Path
|
|
29
|
+
import tomllib
|
|
30
|
+
|
|
31
|
+
python_version = tomllib.loads(Path("pyproject.toml").read_text())["project"]["version"]
|
|
32
|
+
rust_version = tomllib.loads(Path("Cargo.toml").read_text())["package"]["version"]
|
|
33
|
+
assert python_version == rust_version, (python_version, rust_version)
|
|
34
|
+
assert os.environ["RELEASE_TAG"] == f"v{python_version}", os.environ["RELEASE_TAG"]
|
|
35
|
+
PY
|
|
36
|
+
|
|
37
|
+
qualify:
|
|
38
|
+
needs: validate-tag
|
|
39
|
+
uses: ./.github/workflows/ci.yml
|
|
40
|
+
|
|
41
|
+
publish:
|
|
42
|
+
needs: qualify
|
|
43
|
+
runs-on: ubuntu-latest
|
|
44
|
+
environment:
|
|
45
|
+
name: pypi
|
|
46
|
+
url: https://pypi.org/p/bed-reader
|
|
47
|
+
permissions:
|
|
48
|
+
id-token: write
|
|
49
|
+
steps:
|
|
50
|
+
- name: Download the qualified distributions
|
|
51
|
+
uses: actions/download-artifact@9000827ccba6bdab643e8b6fd33ac0654aef8333 # v8.0.2
|
|
52
|
+
with:
|
|
53
|
+
name: wheels-all
|
|
54
|
+
path: dist
|
|
55
|
+
- name: Publish to PyPI
|
|
56
|
+
uses: pypa/gh-action-pypi-publish@7245906fb61fa33a13554f9d5fb856fe61758086 # v1.14.3
|
|
@@ -5,6 +5,28 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [1.2.0] - 2026-11-13
|
|
9
|
+
|
|
10
|
+
- Require Python 3.11 or later and prepare Python 3.15 wheels with PyO3 0.30.1,
|
|
11
|
+
Rust NumPy 0.30, and maturin 1.16.
|
|
12
|
+
- Require Rust 1.85 or later. Upgrade cloud-file to 0.3.1 and use its u64 byte
|
|
13
|
+
ranges without narrowing file offsets. Rust callers supplying a CloudFile
|
|
14
|
+
must use cloud-file 0.3.
|
|
15
|
+
- Refresh compatible dependencies and remove the vulnerable quick-xml chain.
|
|
16
|
+
Retain shared ndarray 0.16 and compiler-compatible psm/crc-fast versions in
|
|
17
|
+
the lockfile.
|
|
18
|
+
- Track the uv lockfile, pin CI actions, and test installed wheels and source
|
|
19
|
+
distributions on boundary Python versions, including Linux and Windows ARM64.
|
|
20
|
+
- Preserve caller arrays when replacing missing integer metadata, including
|
|
21
|
+
read-only arrays, and avoid NumPy's invalid NaN-to-integer conversion warning.
|
|
22
|
+
- Prepare a tag-triggered PyPI release workflow that reuses the full CI suite,
|
|
23
|
+
validates metadata, and publishes the qualified artifacts with trusted publishing.
|
|
24
|
+
Compare complete direct and source-derived wheels without ignoring native code.
|
|
25
|
+
|
|
26
|
+
## [1.1.1] - 2026-06-05
|
|
27
|
+
|
|
28
|
+
- Fix Rust README CI badge.
|
|
29
|
+
|
|
8
30
|
## [1.1.0] - 2026-06-04
|
|
9
31
|
|
|
10
32
|
- Add support for Python 3.14.
|