ferromic 0.1.3__cp314-cp314-win_amd64.whl
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.
Potentially problematic release.
This version of ferromic might be problematic. Click here for more details.
ferromic/__init__.py
ADDED
|
Binary file
|
|
@@ -0,0 +1,341 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: ferromic
|
|
3
|
+
Version: 0.1.3
|
|
4
|
+
Classifier: Development Status :: 4 - Beta
|
|
5
|
+
Classifier: Intended Audience :: Science/Research
|
|
6
|
+
Classifier: License :: Other/Proprietary License
|
|
7
|
+
Classifier: Programming Language :: Python
|
|
8
|
+
Classifier: Programming Language :: Python :: 3
|
|
9
|
+
Classifier: Programming Language :: Rust
|
|
10
|
+
Classifier: Topic :: Scientific/Engineering :: Bio-Informatics
|
|
11
|
+
Requires-Dist: numpy>=1.23
|
|
12
|
+
Requires-Dist: pytest ; extra == 'test'
|
|
13
|
+
Requires-Dist: numpy ; extra == 'test'
|
|
14
|
+
Requires-Dist: scikit-allel ; extra == 'test'
|
|
15
|
+
Requires-Dist: scipy ; extra == 'test'
|
|
16
|
+
Requires-Dist: pandas ; extra == 'test'
|
|
17
|
+
Requires-Dist: statsmodels ; extra == 'test'
|
|
18
|
+
Requires-Dist: pyarrow ; extra == 'test'
|
|
19
|
+
Requires-Dist: pytest-benchmark ; extra == 'test'
|
|
20
|
+
Requires-Dist: patchelf ; platform_system == 'Linux' and extra == 'test'
|
|
21
|
+
Provides-Extra: test
|
|
22
|
+
License-File: LICENSE.md
|
|
23
|
+
Summary: Rust-accelerated population genetics toolkit with ergonomic Python bindings
|
|
24
|
+
Keywords: population-genetics,bioinformatics,rust,pyo3,numpy
|
|
25
|
+
Home-Page: https://github.com/SauersML/ferromic
|
|
26
|
+
Author: SauersML
|
|
27
|
+
Requires-Python: >=3.9
|
|
28
|
+
Description-Content-Type: text/markdown; charset=UTF-8; variant=GFM
|
|
29
|
+
|
|
30
|
+
# Ferromic
|
|
31
|
+
|
|
32
|
+
Ferromic is a Rust-accelerated population genetics toolkit built for haplotype-aware studies on large variant cohorts. It offers batteries-included CLI workflows alongside polished Python bindings so the same core algorithms can be reused in notebooks and scripted pipelines.
|
|
33
|
+
|
|
34
|
+
## Table of contents
|
|
35
|
+
|
|
36
|
+
- [Highlights](#highlights)
|
|
37
|
+
- [Quick start](#quick-start)
|
|
38
|
+
- [Rust command-line pipeline](#rust-command-line-pipeline)
|
|
39
|
+
- [Python API](#python-api)
|
|
40
|
+
- [Installation](#installation)
|
|
41
|
+
- [Use the prebuilt binaries](#use-the-prebuilt-binaries)
|
|
42
|
+
- [Build from source](#build-from-source)
|
|
43
|
+
- [Install the Python wheel](#install-the-python-wheel)
|
|
44
|
+
- [Input requirements](#input-requirements)
|
|
45
|
+
- [Regional configuration file](#regional-configuration-file)
|
|
46
|
+
- [Optional masks and group definitions](#optional-masks-and-group-definitions)
|
|
47
|
+
- [Running analyses with `run_vcf`](#running-analyses-with-run_vcf)
|
|
48
|
+
- [CLI options](#cli-options)
|
|
49
|
+
- [Example end-to-end run](#example-end-to-end-run)
|
|
50
|
+
- [Principal components and FST outputs](#principal-components-and-fst-outputs)
|
|
51
|
+
- [Output artefacts](#output-artefacts)
|
|
52
|
+
- [Additional binaries](#additional-binaries)
|
|
53
|
+
- [Phenome-wide association (PheWAS) pipeline](#phenome-wide-association-phewas-pipeline)
|
|
54
|
+
- [Project layout and helper scripts](#project-layout-and-helper-scripts)
|
|
55
|
+
- [Development](#development)
|
|
56
|
+
- [License](#license)
|
|
57
|
+
|
|
58
|
+
## Highlights
|
|
59
|
+
|
|
60
|
+
- **Purpose built for haplotype-aware studies.** Separates per-haplotype diversity metrics, supports inversion-aware sample groupings, and ships with Hudson and Weir & Cockerham FST estimators.
|
|
61
|
+
- **Designed for big cohorts.** Rayon-powered multithreading, streaming VCF readers, progress bars, and resumable temporary directories keep terabyte-scale runs responsive.
|
|
62
|
+
- **Rich output surface.** Generates region summaries, per-base FASTA-style tracks, PCA tables, PHYLIP files, and optional Hudson TSV exports ready for downstream notebooks.
|
|
63
|
+
- **First-class Python ergonomics.** A PyO3-powered module exposes the same core statistics to Python, NumPy, and pandas workflows without sacrificing performance.
|
|
64
|
+
- **Operationally friendly.** Ships with helper scripts, resumable temporary workspaces, and informative logging so long-running analyses can be monitored and resumed with confidence.
|
|
65
|
+
|
|
66
|
+
## Quick start
|
|
67
|
+
|
|
68
|
+
### Rust command-line pipeline
|
|
69
|
+
|
|
70
|
+
1. **Prepare inputs**
|
|
71
|
+
- Place bgzipped or plain-text VCFs for each chromosome in a directory.
|
|
72
|
+
- Supply a reference FASTA and matching GTF/GFF annotation.
|
|
73
|
+
- Describe regions of interest in a TSV file (see [Regional configuration file](#regional-configuration-file)).
|
|
74
|
+
- (Optional) Prepare mask or allow BEDs and an FST population map if you plan to enable `--fst`.
|
|
75
|
+
2. **Invoke the main driver**
|
|
76
|
+
|
|
77
|
+
```bash
|
|
78
|
+
cargo run --release --bin run_vcf -- \
|
|
79
|
+
--vcf_folder ./vcfs \
|
|
80
|
+
--reference ./reference/hg38.no_alt.fa \
|
|
81
|
+
--gtf ./reference/hg38.knownGene.gtf \
|
|
82
|
+
--config_file ./regions.tsv \
|
|
83
|
+
--mask_file ./hardmask.bed \
|
|
84
|
+
--pca --fst
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
The command streams each region, honours mask/allow lists, writes a CSV summary, and (with `--pca` or `--fst`) emits additional PCA and FST artefacts.
|
|
88
|
+
3. **Review results**
|
|
89
|
+
- `output.csv` captures haplotype-specific diversity statistics.
|
|
90
|
+
- `per_site_diversity_output.falsta` and `per_site_fst_output.falsta` contain base-wise tracks for plotting or heatmaps.
|
|
91
|
+
- Optional PCA and Hudson tables land next to the main CSV.
|
|
92
|
+
|
|
93
|
+
### Python API
|
|
94
|
+
|
|
95
|
+
Install the wheel with `pip install ferromic`, then compute diversity statistics in-memory:
|
|
96
|
+
|
|
97
|
+
```python
|
|
98
|
+
import numpy as np
|
|
99
|
+
import ferromic as fm
|
|
100
|
+
|
|
101
|
+
genotypes = np.array([
|
|
102
|
+
[[0, 0], [0, 1], [1, 1]],
|
|
103
|
+
[[0, 1], [0, 0], [1, 1]],
|
|
104
|
+
], dtype=np.uint8)
|
|
105
|
+
|
|
106
|
+
population = fm.Population.from_numpy(
|
|
107
|
+
"demo",
|
|
108
|
+
genotypes=genotypes,
|
|
109
|
+
positions=[101, 202],
|
|
110
|
+
haplotypes=[(0, 0), (0, 1), (1, 0), (1, 1), (2, 0), (2, 1)],
|
|
111
|
+
sequence_length=1000,
|
|
112
|
+
sample_names=["sampleA", "sampleB", "sampleC"],
|
|
113
|
+
)
|
|
114
|
+
|
|
115
|
+
print("Segregating sites:", population.segregating_sites())
|
|
116
|
+
print("Nucleotide diversity:", population.nucleotide_diversity())
|
|
117
|
+
|
|
118
|
+
pca = fm.chromosome_pca(
|
|
119
|
+
variants=[
|
|
120
|
+
{"position": 101, "genotypes": [[0, 0], [0, 1], [1, 1]]},
|
|
121
|
+
{"position": 202, "genotypes": [[0, 1], [0, 0], [1, 1]]},
|
|
122
|
+
],
|
|
123
|
+
sample_names=["sampleA", "sampleB", "sampleC"],
|
|
124
|
+
)
|
|
125
|
+
|
|
126
|
+
print("PCA components shape:", pca.coordinates.shape)
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
The Python surface mirrors the Rust crate: Hudson-style populations, per-site diversity iterators, PCA utilities, and sequence-length helpers are available under the top-level `ferromic` namespace. The bindings favour "plain" Python collections—variants can be dictionaries, dataclasses, or any object exposing `position` and `genotypes`, while haplotypes accept tuples such as `(sample_index, "L")` or `(sample_index, 1)`. All heavy lifting happens in Rust, so interactive workflows retain native performance.
|
|
130
|
+
|
|
131
|
+
#### High-level API surface
|
|
132
|
+
|
|
133
|
+
| Object | Description |
|
|
134
|
+
| --- | --- |
|
|
135
|
+
| `ferromic.Population` | Container with cached diversity metrics for a haplotype group; backs Hudson-style comparisons. |
|
|
136
|
+
| `ferromic.segregating_sites(variants)` | Count polymorphic sites for a cohort or region. |
|
|
137
|
+
| `ferromic.nucleotide_diversity(variants, haplotypes, sequence_length)` | Compute π with optional BED-style masks. |
|
|
138
|
+
| `ferromic.watterson_theta(segregating_sites, sample_count, sequence_length)` | Closed-form θ estimator mirroring the CLI output. |
|
|
139
|
+
| `ferromic.per_site_diversity(variants, haplotypes, region=None)` | Iterator over per-position π/θ values that underpins `per_site_diversity_output.falsta`. |
|
|
140
|
+
| `ferromic.wc_fst(...)` | Weir & Cockerham FST estimates with per-site and aggregate components. |
|
|
141
|
+
| `ferromic.hudson_fst(pop1, pop2)` / `hudson_dxy` | Hudson-style FST and D<sub>xy</sub> between arbitrary `Population` objects. |
|
|
142
|
+
| `ferromic.chromosome_pca(...)` family | Memory-aware PCA helpers that stream per-chromosome loadings, matching the CLI `--pca` artefacts. |
|
|
143
|
+
| Utility helpers | Functions such as `adjusted_sequence_length` and `inversion_allele_frequency` mirror CLI adjustments for masked bases and inversion calls. |
|
|
144
|
+
|
|
145
|
+
Consult `src/pytests` for end-to-end regression suites that exercise PCA, Hudson, and Weir & Cockerham pipelines directly from Python.
|
|
146
|
+
|
|
147
|
+
## Installation
|
|
148
|
+
|
|
149
|
+
### Use the prebuilt binaries
|
|
150
|
+
|
|
151
|
+
Download the latest release assets or run the helper script:
|
|
152
|
+
|
|
153
|
+
```bash
|
|
154
|
+
curl -fsSL https://raw.githubusercontent.com/SauersML/ferromic/main/install.sh | bash
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
The script pulls platform-appropriate tarballs for `ferromic`, `vcf_stats`, and `vcf_merge`, expands them in-place, marks them executable, and prints `--help` summaries for each tool.
|
|
158
|
+
|
|
159
|
+
### Build from source
|
|
160
|
+
|
|
161
|
+
1. Install Rust nightly (Ferromic targets edition 2024 features):
|
|
162
|
+
|
|
163
|
+
```bash
|
|
164
|
+
rustup toolchain install nightly
|
|
165
|
+
rustup override set nightly
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
2. Clone and build the project:
|
|
169
|
+
|
|
170
|
+
```bash
|
|
171
|
+
git clone https://github.com/SauersML/ferromic.git
|
|
172
|
+
cd ferromic
|
|
173
|
+
cargo build --release
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
The compiled binaries live under `target/release/`.
|
|
177
|
+
|
|
178
|
+
Use `cargo run --bin run_vcf -- --help` to confirm the toolchain is set up correctly.
|
|
179
|
+
|
|
180
|
+
Environment variable `RAMDISK_PATH` can be set to redirect temporary directories to a specific high-speed volume (defaults to `/dev/shm`).
|
|
181
|
+
|
|
182
|
+
### Install the Python wheel
|
|
183
|
+
|
|
184
|
+
```bash
|
|
185
|
+
pip install ferromic
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
To develop against the local checkout use [maturin](https://github.com/PyO3/maturin):
|
|
189
|
+
|
|
190
|
+
```bash
|
|
191
|
+
python -m pip install "maturin[patchelf]"
|
|
192
|
+
maturin develop --release
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
Set `PYO3_PYTHON` or pass `--python` to target a specific interpreter.
|
|
196
|
+
|
|
197
|
+
When the wheel is installed via `pip`, the Rust extensions are compiled in release mode by default. During development the `maturin develop` workflow above produces editable installs that stay in sync with local code changes.
|
|
198
|
+
|
|
199
|
+
## Input requirements
|
|
200
|
+
|
|
201
|
+
- **VCF folder (`--vcf_folder`)** – one file per chromosome (plain or gzipped). Header validation enforces matching sample layouts across files.
|
|
202
|
+
- **Reference FASTA (`--reference`)** – used to reconstruct PHYLIP sequences and to mask non-callable positions.
|
|
203
|
+
- **GTF/GFF (`--gtf`)** – provides CDS definitions; overlapping transcripts trigger PHYLIP exports for both haplotype groups.
|
|
204
|
+
- **Region definition** – either a single `--region` (`chr:start-end`) or a multi-region TSV via `--config_file`.
|
|
205
|
+
|
|
206
|
+
### Regional configuration file
|
|
207
|
+
|
|
208
|
+
Tab-delimited TSV with a header containing seven metadata columns followed by one column per haplotype sample:
|
|
209
|
+
|
|
210
|
+
| Column | Description |
|
|
211
|
+
| --- | --- |
|
|
212
|
+
| `seqnames` | Chromosome identifier (with or without `chr`). |
|
|
213
|
+
| `start` / `end` | 1-based inclusive coordinates for the region window. |
|
|
214
|
+
| `POS` | Representative variant used for provenance. |
|
|
215
|
+
| `orig_ID` | Region identifier carried into outputs. |
|
|
216
|
+
| `verdict` | Manual or automated verdict flag. |
|
|
217
|
+
| `categ` | Category label for stratified summaries. |
|
|
218
|
+
| `sample…` | One column per sample containing phased genotypes such as `0|0`, `0|1`, or `1|1`. |
|
|
219
|
+
|
|
220
|
+
Values to the left/right of the `|` assign each haplotype to group 0 or 1. Suffixes like `_lowconf` persist in unfiltered counts but are removed from filtered analyses.
|
|
221
|
+
|
|
222
|
+
#### Coordinate conventions
|
|
223
|
+
|
|
224
|
+
Ferromic consumes several genomics formats and keeps their native coordinate systems:
|
|
225
|
+
|
|
226
|
+
- VCF positions are treated as **1-based inclusive**.
|
|
227
|
+
- BED masks/allow lists are **0-based half-open** intervals.
|
|
228
|
+
- TSV configuration files expect **1-based inclusive** coordinates.
|
|
229
|
+
- GTF/GFF annotations are interpreted as **1-based inclusive** when extracting CDS spans.
|
|
230
|
+
|
|
231
|
+
### Optional masks and group definitions
|
|
232
|
+
|
|
233
|
+
- **Mask BED (`--mask_file`)** – 0-based half-open intervals to exclude.
|
|
234
|
+
- **Allow BED (`--allow_file`)** – 0-based half-open intervals to whitelist.
|
|
235
|
+
- **FST populations (`--fst_populations`)** – CSV where each row names a population followed by sample identifiers for Weir & Cockerham contrasts.
|
|
236
|
+
|
|
237
|
+
## Running analyses with `run_vcf`
|
|
238
|
+
|
|
239
|
+
### CLI options
|
|
240
|
+
|
|
241
|
+
| Flag | Required | Description |
|
|
242
|
+
| --- | --- | --- |
|
|
243
|
+
| `--vcf_folder <path>` | ✓ | Directory containing chromosome VCFs. |
|
|
244
|
+
| `--reference <path>` | ✓ | Reference genome FASTA. |
|
|
245
|
+
| `--gtf <path>` | ✓ | Gene annotation GTF/GFF. |
|
|
246
|
+
| `--chr <id>` | | Restrict processing to a single chromosome. |
|
|
247
|
+
| `--region <start-end>` | | Analyse one region instead of a TSV batch. |
|
|
248
|
+
| `--config_file <file>` | | TSV of regions/haplotypes (see above). |
|
|
249
|
+
| `--output_file <file>` | | Override the default `output.csv`. |
|
|
250
|
+
| `--min_gq <int>` | | Genotype quality threshold (default 30). |
|
|
251
|
+
| `--mask_file <bed>` | | Exclude intervals from all statistics. |
|
|
252
|
+
| `--allow_file <bed>` | | Only consider variants inside these intervals. |
|
|
253
|
+
| `--pca` | | Emit chromosome-level PCA TSVs for filtered haplotypes. |
|
|
254
|
+
| `--pca_components <int>` | | Number of principal components (default 10). |
|
|
255
|
+
| `--pca_output <file>` | | Combined PCA summary filename (default `pca_results.tsv`). |
|
|
256
|
+
| `--fst` | | Enable Hudson and Weir & Cockerham FST outputs. |
|
|
257
|
+
| `--fst_populations <file>` | | Optional CSV describing named populations for FST. |
|
|
258
|
+
|
|
259
|
+
### Example end-to-end run
|
|
260
|
+
|
|
261
|
+
```bash
|
|
262
|
+
run_vcf \
|
|
263
|
+
--vcf_folder ./vcfs \
|
|
264
|
+
--reference ./reference/hg38.no_alt.fa \
|
|
265
|
+
--gtf ./reference/hg38.knownGene.gtf \
|
|
266
|
+
--config_file ./regions.tsv \
|
|
267
|
+
--mask_file ./hardmask.bed \
|
|
268
|
+
--allow_file ./accessibility.bed \
|
|
269
|
+
--output_file diversity_summary.csv \
|
|
270
|
+
--min_gq 35 \
|
|
271
|
+
--pca \
|
|
272
|
+
--fst
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
On startup Ferromic prints a status box summarising version, CPU threads, and timestamps, then streams variants chromosome-by-chromosome. Temporary FASTA slices and PHYLIP files are staged in a RAM-backed directory when available.
|
|
276
|
+
|
|
277
|
+
### Principal components and FST outputs
|
|
278
|
+
|
|
279
|
+
- **PCA** – `pca_per_chr_outputs/chr_<id>.tsv` hold per-chromosome coordinates with haplotype labels; `pca_results.tsv` aggregates global PCA.
|
|
280
|
+
- **Weir & Cockerham** – CSV columns prefixed with `haplotype_` cover overall FST, between/within population variance, and informative site counts.
|
|
281
|
+
- **Hudson** – Summary columns `hudson_fst_hap_group_0v1`, `hudson_dxy_hap_group_0v1`, and per-group π values are produced, with an optional `hudson_fst_results.tsv` listing every pairwise comparison.
|
|
282
|
+
|
|
283
|
+
## Output artefacts
|
|
284
|
+
|
|
285
|
+
- **Main CSV** – per-region statistics: raw/adjusted sequence lengths, segregating site counts, Watterson’s θ, nucleotide diversity π, inversion allele frequencies, and haplotype counts for both filtered and unfiltered tracks.
|
|
286
|
+
- **Per-site FASTA-style files** – `per_site_diversity_output.falsta` exposes site-level π/θ arrays, while `per_site_fst_output.falsta` stores Weir & Cockerham and Hudson components per base.
|
|
287
|
+
- **Hudson TSV (optional)** – When `--fst` is active, `hudson_fst_results.tsv` lists 0-based coordinates and FST components for each population comparison.
|
|
288
|
+
- **PHYLIP alignments** – For every transcript overlapping a region Ferromic writes `group_{0|1}_{transcript_id}_chr_<chr>_start_<start>_end_<end>_combined.phy` containing reference-adjusted CDS sequences with `_L`/`_R` haplotype suffixes.
|
|
289
|
+
|
|
290
|
+
## Additional binaries
|
|
291
|
+
|
|
292
|
+
| Binary | Purpose |
|
|
293
|
+
| --- | --- |
|
|
294
|
+
| `ferromic` | High-throughput VCF concatenator with chromosome-aware ordering, async writers, and Rayon chunking controls. |
|
|
295
|
+
| `vcf_merge` | Memory-aware VCF merge utility with optional RAM ceilings, mmap-assisted buffering, and per-chromosome progress readouts. |
|
|
296
|
+
| `run_vcf` | Primary Ferromic CLI that streams regions, emits diversity/FST summaries, PCA tables, per-base FASTA tracks, and PHYLIP CDS exports. |
|
|
297
|
+
|
|
298
|
+
The concatenation and merge utilities (`ferromic`, `vcf_merge`) share `--input <dir>` and `--output <file>` flags and are optimised for large cohorts through Rayon parallelism and Tokio-based async writers. The analysis driver `run_vcf` exposes the richer CLI documented in [Running analyses with `run_vcf`](#running-analyses-with-run_vcf).
|
|
299
|
+
|
|
300
|
+
## Phenome-wide association (PheWAS) pipeline
|
|
301
|
+
|
|
302
|
+
The `phewas/` directory ships a batteries-included association testing stack that mirrors the production workflow used to scan inversion calls against thousands of phenotypes:
|
|
303
|
+
|
|
304
|
+
- **Orchestration (`run.py`)** – coordinates Google BigQuery cohort pulls (optional), phenotype preprocessing, and stage-1 logistic score/LRT tests. A system monitor thread reports container CPU/RAM budgets while a global exception hook surfaces worker crashes immediately.
|
|
305
|
+
- **Resource governance (`pipes.py`)** – manages shared-memory budgets across multiprocessing pools, honours cgroup limits, exposes progress snapshots, and caches intermediate fit metadata to avoid redundant recalculations.
|
|
306
|
+
- **Modelling (`models.py`)** – implements penalised logistic and linear models with automatic fallbacks (ridge, Firth bias correction, bootstrap score tests) plus sequential stopping rules for rare traits.
|
|
307
|
+
- **Phenotype engineering (`pheno.py`, `categories.py`)** – loads callset metadata, derives case/control cohorts, and encodes ancestry-aware covariates and phenotype groupings.
|
|
308
|
+
- **Automation utilities (`run.py`, `testing.py`, `tests.py`, `test_setup.sh`)** – provide harnesses for dry-run validation, regression testing, and continuous-integration smoke checks.
|
|
309
|
+
|
|
310
|
+
Configuration is driven by a context dictionary (`ctx`) that records cache directories, population filters, minimum case/control thresholds per ancestry, and bootstrap budgets. Cached JSON manifests ensure that stale intermediate results are automatically invalidated when the cohort, cache tag, or inversion target changes.
|
|
311
|
+
|
|
312
|
+
## Project layout and helper scripts
|
|
313
|
+
|
|
314
|
+
- `src/` – Rust crate providing parsing, progress reporting, statistics, transcript handling, and CLI entry points.
|
|
315
|
+
- `scripts/` – Python utilities for downstream tasks (e.g., deduplication, dN/dS calculations, PHYLIP conversions).
|
|
316
|
+
- `stats/` – Exploratory analysis notebooks and plotting scripts for diversity, FST, PCA, and inversion studies.
|
|
317
|
+
- `data/` – Example metadata including `callset.tsv`, significant phenotypes, and support files for tutorials.
|
|
318
|
+
- `phewas/` – PheWAS modelling pipeline with helper modules and automation scripts.
|
|
319
|
+
|
|
320
|
+
## Development
|
|
321
|
+
|
|
322
|
+
1. Format and lint Rust code with `cargo fmt --all` and `cargo clippy --all-targets`.
|
|
323
|
+
2. Run the test suite:
|
|
324
|
+
|
|
325
|
+
```bash
|
|
326
|
+
cargo test
|
|
327
|
+
```
|
|
328
|
+
|
|
329
|
+
3. Validate the Python bindings (optional):
|
|
330
|
+
|
|
331
|
+
```bash
|
|
332
|
+
maturin develop --release
|
|
333
|
+
pytest -q
|
|
334
|
+
```
|
|
335
|
+
|
|
336
|
+
Benchmarks such as `cargo bench --bench pca` quantify PCA throughput. Contributions are welcome via pull requests; please include reproducible commands and a short description of data requirements.
|
|
337
|
+
|
|
338
|
+
## License
|
|
339
|
+
|
|
340
|
+
Ferromic is released under the MIT License. See [LICENSE.md](LICENSE.md) for details.
|
|
341
|
+
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
ferromic-0.1.3.dist-info/METADATA,sha256=hDApd53tw2cIgr7M-z4TAhTOpiNQGSSTRMt-P1oUO9Q,18084
|
|
2
|
+
ferromic-0.1.3.dist-info/WHEEL,sha256=tZ3VAZ5HuUzziFCJ2lDsDJnJO-xy4omAQIa7TJCFCZk,96
|
|
3
|
+
ferromic-0.1.3.dist-info/licenses/LICENSE.md,sha256=2YHbMdChncJn0KzmeLvrPLP2cRRXDlGBemUgPN7Sj9Q,173
|
|
4
|
+
ferromic/__init__.py,sha256=aNX1Ggsg2XdYFZ-hNIAQzCzjz7dGwk9BCdmrwwYZKh0,115
|
|
5
|
+
ferromic/ferromic.cp314-win_amd64.pyd,sha256=s2kaF89JlZ3IGAbT_stS8Q--jMzj6GO2pkUoyxiZKr8,3947008
|
|
6
|
+
ferromic-0.1.3.dist-info/RECORD,,
|