Prepare for public release on Gitea: simurgarray package names, community files, Gitea templates, pseudonymised P6 probe names
ci / test (3.13) (push) Successful in 4m23s
ci / test (3.12) (push) Successful in 4m26s

This commit is contained in:
kemal committed 2026-09-30 12:09:13 +01:00
1 parent 1be6a913a4
commit da61c7b9fd
27 files changed
+511 -227

No files matched your search

+66
View File
@@ -0,0 +1,66 @@
name: Bug report
about: A crash, an error message, or a result that looks wrong
title: "[bug] "
labels: []
body:
- type: markdown
attributes:
value: |
Thank you for reporting. Please do **not** attach vendor files (IDAT, BPM, CSV, EGT, GTC) or any genetic data of real people.
- type: input
id: version
attributes:
label: SimurgArray version
description: Output of `simurg --version`
validations:
required: true
- type: dropdown
id: platform
attributes:
label: Platform
options:
- Linux x86_64
- Linux aarch64 (for example Raspberry Pi)
- Docker
- conda
- other
validations:
required: true
- type: input
id: backend
attributes:
label: Backend
description: Output of `python -c "from simurg._core import backend; print(backend())"`
- type: textarea
id: command
attributes:
label: Command
description: The exact command you ran
render: shell
validations:
required: true
- type: textarea
id: what
attributes:
label: What happened, and what you expected
validations:
required: true
- type: textarea
id: log
attributes:
label: Error message or log
description: Add `--debug` for a traceback. Error codes look like `E_...` or `W_...`.
render: text
- type: textarea
id: manifest
attributes:
label: run_manifest.json
description: Paste or attach the run manifest of the run; it lists versions, options and input checksums.
render: json
- type: checkboxes
id: privacy
attributes:
label: Privacy
options:
- label: I did not attach vendor files or genetic data of real people.
required: true
+1
View File
@@ -0,0 +1 @@
blank_issues_enabled: false
@@ -0,0 +1,24 @@
name: Feature request
about: Suggest a new capability or a change in behaviour
title: "[feature] "
labels: []
body:
- type: textarea
id: problem
attributes:
label: What are you trying to do?
description: The research task or workflow, and where SimurgArray gets in the way.
validations:
required: true
- type: textarea
id: proposal
attributes:
label: What would help?
description: Describe the behaviour you would like. Mention spec items (for example CLI-021) if you know them.
validations:
required: true
- type: textarea
id: validation
attributes:
label: How could it be validated?
description: A public dataset, a reference tool or a paper the result could be checked against.
+16
View File
@@ -0,0 +1,16 @@
## What changes
## Spec items touched
<!-- for example CLI-021, OUT-031; update the spec in the same pull request if behaviour changes -->
## How it was validated
<!-- unit tests, oracle tests you ran, datasets, numbers -->
## Checklist
* [ ] `ruff`, `mypy` and `pytest tests/unit` pass
* [ ] `CHANGELOG.md` updated (Unreleased) if users would notice
* [ ] differences from reference tools recorded in `docs/known_unknowns.md`
* [ ] no vendor data, no genetic data of real people, no credentials
@@ -1,4 +1,4 @@
# Runs on Gitea Actions (reads .github/workflows) and GitHub Actions. # Gitea Actions workflow: lint, types, secret scan and unit tests with and without the compiled kernels.
name: ci name: ci
on: on:
push: push:
+8
View File
@@ -2,6 +2,14 @@
## Unreleased ## Unreleased
**Packaging.** The distributions are now `simurgarray` and `simurgarray-core` (the name `simurg` is taken on
PyPI); the `simurg` command and the `simurg` / `simurg_core` import names are unchanged. The conda recipe no longer pins
the kernel package to the Python package's version (it required `simurg-core == 2.0.0` while the kernels are 1.1.0).
Project URLs in the package metadata.
**Community.** `CONTRIBUTING.md`, `SECURITY.md`, `CODE_OF_CONDUCT.md`, `CITATION.cff`, Gitea issue and pull request
templates; CI moved to `.gitea/workflows/`. Probe names in the P6 oracle examples are replaced by stable pseudonyms.
**Repository tidy-up.** Removed the Phase-0 research notes (`docs/research/`), the P9 benchmark scripts (`bench/`, **Repository tidy-up.** Removed the Phase-0 research notes (`docs/research/`), the P9 benchmark scripts (`bench/`,
`scripts/cloud/tasks/p9*.sh`) and a vendor probe-name list that should never have been committed (also purged from `scripts/cloud/tasks/p9*.sh`) and a vendor probe-name list that should never have been committed (also purged from
the git history). the git history).
+26
View File
@@ -0,0 +1,26 @@
cff-version: 1.2.0
message: "If you use SimurgArray in your research, please cite it as below."
title: "SimurgArray: open analysis of Illumina Infinium genotyping arrays"
type: software
authors:
- family-names: "Yaylali"
given-names: "Kemal"
version: "2.0.0"
date-released: "2026-09-30"
license: MIT
repository-code: "https://gitea.yaylali.uk/kemal/SimurgArray"
url: "https://gitea.yaylali.uk/kemal/SimurgArray"
abstract: >-
SimurgArray takes Illumina Infinium BeadChip scans (IDAT files) to genotype calls, quality control reports,
VCF and PLINK files, and on to copy number, loss of heterozygosity and mosaicism, pharmacogenomics, cluster file
training and methylation control QC. Its genotype calling reproduces the vendor's GTC files byte for byte on
public data, and every difference from reference tools is documented. Research use only.
keywords:
- genotyping
- microarray
- Infinium
- IDAT
- VCF
- copy number
- pharmacogenomics
- bioinformatics
+30
View File
@@ -0,0 +1,30 @@
# Code of conduct
SimurgArray is a small scientific project. People who use it or contribute to it come from many fields, countries
and levels of experience. This page says how we treat each other here.
## Expected
* Be kind and assume good faith. Most disagreements are about evidence, so bring evidence.
* Criticise code, results and ideas, never people.
* Be patient with newcomers; everyone met their first cluster file once.
* Credit other people's work, including open source projects and papers.
* Respect privacy. Never post genetic data, sample identifiers of real people, or anyone's personal information.
## Not accepted
* Harassment, insults, threats, or discriminatory jokes and language, in any form.
* Sexualised language or imagery.
* Publishing someone else's private information without permission.
* Repeatedly derailing discussions or ignoring a request to stop.
## Scope
This applies to issues, pull requests, commit messages, documentation and any other space of the project, and to
anyone representing the project elsewhere.
## Enforcement
Report problems privately to the maintainer through the contact details on https://gitea.yaylali.uk/kemal. Reports
are handled confidentially. The maintainer may edit or remove contributions and may block people who do not follow
this code, starting with a private warning where that is reasonable.
+64
View File
@@ -0,0 +1,64 @@
# Contributing to SimurgArray
Thank you for looking. SimurgArray is a small research project with strict habits, because its main promise is that
every number can be checked. The rules below keep that promise.
## Before you start
* Read the item in `SIMURGARRAY_FUNCTIONAL_SPEC.md` that your change touches. Behaviour is defined there item by item
(IDs such as `CLI-021` or `OUT-031`); algorithms and their sources are in `SIMURGARRAY_MASTER_PLAN.md`.
* For anything larger than a small fix, open an issue first and describe the change and how you will validate it.
## Setting up
```bash
git clone https://gitea.yaylali.uk/kemal/SimurgArray.git && cd SimurgArray
uv venv && uv pip install -e ".[dev]"
uv pip install ./rust/simurg-core # optional compiled kernels (needs Rust and a C compiler)
uv run pytest tests/unit
```
## The checks every change must pass
```bash
uv run ruff check . && uv run ruff format --check .
uv run mypy
uv run pytest tests/unit
```
CI runs the same checks, a secret scan, and the unit tests with and without the compiled kernels on Python 3.12
and 3.13. If your change touches file formats, calling, QC or outputs, also run the oracle tests
(`uv run pytest tests/oracle`, see the README for the data they need) and say which ones you ran.
## Rules of the house
1. **Cite the spec.** Commit messages and tests name the spec items they implement or change. If behaviour changes,
change the spec item in the same commit.
2. **Science modules are pure.** Code under `signal/`, `genotype/`, `cn/`, `qc/`, `pgx/` and `train/` has no file or
network access; the `pipeline/` layer does the I/O.
3. **Every algorithm names its source** in its docstring: a paper, a public technical note, an expired patent, or an
open source project with a compatible licence.
4. **Licences.** Code from MIT, BSD, Apache 2.0 or Unlicense projects may be adapted with attribution in
`THIRD_PARTY_NOTICES.md`. GPL tools are used only as separate programs for comparison; their code is never copied.
5. **Exact by default.** Default mode stays bit exact with the reference outputs. A cleaner numerical choice goes
behind an explicit option.
6. **Never hide a difference.** When SimurgArray and a reference tool disagree, record it in `docs/known_unknowns.md`
with the date, the evidence and what was decided.
7. **No vendor data and no secrets in the repository.** No IDAT, BPM, CSV, EGT or GTC files from a vendor, no
probe name lists derived from them, no patient or participant data, and no credentials of any kind. Test fixtures
are synthetic or openly licensed. `.gitignore` and the CI secret scan help, but the responsibility is yours.
8. **Plain writing.** Documentation follows the voice in `branding/README.md`: short sentences, numbers instead of
adjectives, and every claim next to its limitation.
## Pull requests
* One topic per pull request, with tests.
* Describe what changed, which spec items it touches, how you validated it, and any new entry in
`docs/known_unknowns.md`.
* Add a line to the `Unreleased` section of `CHANGELOG.md` for anything a user would notice.
## Reporting problems
Use the issue templates. For a wrong or unexpected result, attach the `run_manifest.json` of the run and the exact
command; it records every version, option and input checksum. Please do not attach vendor files or any genetic data
of real people. For security issues see `SECURITY.md`.
+11 -3
View File
@@ -40,6 +40,7 @@ It runs on anything from a Raspberry Pi to a cloud server.
* [Development](#development) * [Development](#development)
* [Repository layout](#repository-layout) * [Repository layout](#repository-layout)
* [Documentation](#documentation) * [Documentation](#documentation)
* [Citing](#citing)
* [Licence, data and trademarks](#licence-data-and-trademarks) * [Licence, data and trademarks](#licence-data-and-trademarks)
## Features ## Features
@@ -76,6 +77,7 @@ Each phase has its own report in `docs/validation/`.
* **Python 3.12 or 3.13** on 64 bit Linux (x86_64 or aarch64). Tested on Ubuntu 24.04 and Raspberry Pi OS. * **Python 3.12 or 3.13** on 64 bit Linux (x86_64 or aarch64). Tested on Ubuntu 24.04 and Raspberry Pi OS.
* **Memory:** about 2 to 3 GB per worker process for GSA or Omni sized arrays. 8 GB is enough for a Pi with two workers. * **Memory:** about 2 to 3 GB per worker process for GSA or Omni sized arrays. 8 GB is enough for a Pi with two workers.
* **Optional:** Rust and a C compiler for the compiled kernels; Docker or conda for those installs. * **Optional:** Rust and a C compiler for the compiled kernels; Docker or conda for those installs.
* The Python package is called `simurgarray`; the command and the import name are `simurg`.
* Only pure Python dependencies are needed (numpy, pyarrow, typer, rich, pyyaml, openpyxl). bcftools and plink2 * Only pure Python dependencies are needed (numpy, pyarrow, typer, rich, pyyaml, openpyxl). bcftools and plink2
are **not** required; SimurgArray writes VCF, BCF, indexes and PLINK files itself. They are used only as test oracles. are **not** required; SimurgArray writes VCF, BCF, indexes and PLINK files itself. They are used only as test oracles.
@@ -118,8 +120,8 @@ aarch64 (glibc 2.28 or newer) to `dist/`:
```bash ```bash
python3 -m venv simurg-env python3 -m venv simurg-env
simurg-env/bin/pip install simurg-2.0.0-py3-none-any.whl \ simurg-env/bin/pip install simurgarray-2.0.0-py3-none-any.whl \
simurg_core-1.1.0-cp312-abi3-manylinux_2_28_$(uname -m).whl # the kernel wheel is optional simurgarray_core-1.1.0-cp312-abi3-manylinux_2_28_$(uname -m).whl # the kernel wheel is optional
``` ```
### Docker ### Docker
@@ -136,7 +138,7 @@ docker run --rm --user "$(id -u):$(id -g)" -v "$PWD":/work simurg:2.0.0 \
```bash ```bash
conda build -c conda-forge --output-folder conda-bld packaging/conda/simurg-core packaging/conda/simurg conda build -c conda-forge --output-folder conda-bld packaging/conda/simurg-core packaging/conda/simurg
conda create -n simurg -c ./conda-bld -c conda-forge simurg simurg-core conda create -n simurgarray -c ./conda-bld -c conda-forge simurgarray simurgarray-core
``` ```
All installs give identical results on x86_64 and aarch64 (`docs/validation/P10.md`). All installs give identical results on x86_64 and aarch64 (`docs/validation/P10.md`).
@@ -340,6 +342,7 @@ examples/ end to end demo
branding/ logo, icons, templates and the brand guide branding/ logo, icons, templates and the brand guide
blog/ five posts about the project, with featured images blog/ five posts about the project, with featured images
packaging/ conda recipes (plus Dockerfile at the root) packaging/ conda recipes (plus Dockerfile at the root)
.gitea/ CI workflow, issue and pull request templates
``` ```
## Documentation ## Documentation
@@ -350,8 +353,13 @@ packaging/ conda recipes (plus Dockerfile at the root)
* [`docs/validation/`](docs/validation/): one report per phase and module * [`docs/validation/`](docs/validation/): one report per phase and module
* [`docs/known_unknowns.md`](docs/known_unknowns.md): every difference from reference tools, with dates and explanations * [`docs/known_unknowns.md`](docs/known_unknowns.md): every difference from reference tools, with dates and explanations
* [`docs/messages.md`](docs/messages.md): all error and warning codes * [`docs/messages.md`](docs/messages.md): all error and warning codes
* [`CONTRIBUTING.md`](CONTRIBUTING.md), [`SECURITY.md`](SECURITY.md), [`CODE_OF_CONDUCT.md`](CODE_OF_CONDUCT.md)
* [`branding/README.md`](branding/README.md) and [`blog/`](blog/) * [`branding/README.md`](branding/README.md) and [`blog/`](blog/)
## Citing
If SimurgArray helps your research, please cite it using [`CITATION.cff`](CITATION.cff) (version 2.0.0, 2026).
## Licence, data and trademarks ## Licence, data and trademarks
SimurgArray is released under the [MIT licence](LICENSE). Code adapted from MIT, BSD and Apache licensed projects SimurgArray is released under the [MIT licence](LICENSE). Code adapted from MIT, BSD and Apache licensed projects
+33
View File
@@ -0,0 +1,33 @@
# Security policy
## Supported versions
Security fixes go into the latest release. Older releases are not patched; upgrade to the newest version.
## Reporting a vulnerability
Please do not open a public issue for a security problem. Contact the maintainer privately through the contact
details on the maintainer's profile page, https://gitea.yaylali.uk/kemal, and include:
* the SimurgArray version (`simurg --version`),
* what an attacker could do and under which conditions,
* the smallest input or command that shows the problem, without real genetic data.
You will get an answer within a week. Once a fix is released, the report is credited in `CHANGELOG.md` unless you
prefer otherwise.
## What counts
SimurgArray reads files that users download from third parties. Problems worth reporting include:
* crafted IDAT, BPM, CSV, EGT, GTC, VCF or sample sheet files that crash the reader in an unsafe way, write outside
the output folder, or execute code;
* HTML reports that run script from their input data (reports are meant to be safe to open and share);
* anything that could leak sample sheet metadata or genetic data beyond what the user chose to include.
## Handling genetic data
Genotype data are personal data. SimurgArray never sends data anywhere: it has no network access at run time and
its reports embed everything they need. Users are responsible for storing and sharing outputs according to their
consent and data protection rules. The QC report offers `--no-metadata`, `--drop-metadata` and `--keep-metadata` to
control what it contains.
+1 -3
View File
@@ -136,8 +136,6 @@ curl -LsSf https://astral.sh/uv/install.sh | sh
uv python install 3.12 uv python install 3.12
# Rust (Phase 9) # Rust (Phase 9)
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
# GitHub CLI (authenticate to avoid API rate limits)
sudo apt install -y gh && gh auth login
# Reference/oracle tools (subprocess only) # Reference/oracle tools (subprocess only)
# gtc2vcf plugins for bcftools: build from https://github.com/freeseek/gtc2vcf (instructions in its README) # gtc2vcf plugins for bcftools: build from https://github.com/freeseek/gtc2vcf (instructions in its README)
# plink2: https://www.cog-genomics.org/plink/2.0/ # plink2: https://www.cog-genomics.org/plink/2.0/
@@ -162,7 +160,7 @@ sudo apt install -y gh && gh auth login
| maturin + PyO3 (Phase 9) | Rust extension | | maturin + PyO3 (Phase 9) | Rust extension |
### 3.5 Moving the project ### 3.5 Moving the project
The canonical repository is the private Gitea repo **https://gitea.yaylali.uk/kemal/SimurgArray**. The canonical repository is the Gitea repo **https://gitea.yaylali.uk/kemal/SimurgArray**.
```bash ```bash
# on the new machine # on the new machine
git clone https://gitea.yaylali.uk/kemal/SimurgArray.git && cd SimurgArray git clone https://gitea.yaylali.uk/kemal/SimurgArray.git && cd SimurgArray
+4 -4
View File
@@ -10,7 +10,7 @@ Publishing code is easy. Publishing it responsibly is a checklist. This post is
By public I mean four things: By public I mean four things:
1. The source code on a public host, with issues and pull requests open. 1. The source code on my own Gitea server, open to everyone, with issues and pull requests open.
2. Installable packages: a Python wheel, the optional Rust kernel wheels, a container image and a conda recipe. 2. Installable packages: a Python wheel, the optional Rust kernel wheels, a container image and a conda recipe.
3. Documentation someone can follow without asking me anything. 3. Documentation someone can follow without asking me anything.
4. A citable record: a DOI for each release and a short preprint describing the methods and the validation. 4. A citable record: a DOI for each release and a short preprint describing the methods and the validation.
@@ -33,7 +33,7 @@ The same goes for secrets. The cloud scripts use credentials from the local envi
The software reads file formats defined by Illumina and reproduces the behaviour of Illumina's algorithms from public documents and expired patents. Illumina, Infinium, GenCall, GenTrain and GenomeStudio are their trademarks. The documentation will say clearly that SimurgArray is independent and not affiliated with or endorsed by the vendor, and it will use those names only to describe compatibility. The software reads file formats defined by Illumina and reproduces the behaviour of Illumina's algorithms from public documents and expired patents. Illumina, Infinium, GenCall, GenTrain and GenomeStudio are their trademarks. The documentation will say clearly that SimurgArray is independent and not affiliated with or endorsed by the vendor, and it will use those names only to describe compatibility.
The name SimurgArray itself needs a check on the Python package index, conda channels and container registries before anything is uploaded. If someone else has it, I will be sad for a day and then pick a variant. The name needed a check on the Python package index, conda channels and container registries before anything is uploaded. It turned out `simurg` on the Python package index already belongs to someone else, so the package is called `simurgarray` while the command stays `simurg`. I was sad for about an hour, which is less than I had budgeted.
### Third party data sources ### Third party data sources
@@ -51,7 +51,7 @@ Every README, report header and PGx output will state that the software is for r
### Engineering hygiene ### Engineering hygiene
* Continuous integration on public runners for x86_64 and aarch64: lint, type checks, unit tests. * Continuous integration on my own Gitea runner: lint, type checks, a secret scan, and unit tests with and without the compiled kernels.
* Oracle tests that need large public datasets stay opt in, with a script that downloads everything with checksums. * Oracle tests that need large public datasets stay opt in, with a script that downloads everything with checksums.
* Issue templates that ask for the command, the software version and the run manifest, because "it gave a wrong genotype" is hard to debug without them. * Issue templates that ask for the command, the software version and the run manifest, because "it gave a wrong genotype" is hard to debug without them.
* A contributing guide, a code of conduct and a security policy. * A contributing guide, a code of conduct and a security policy.
@@ -73,7 +73,7 @@ The weeks start on Mondays. Everything below costs nothing except time, apart fr
Full history scan for vendor files and secrets. Credential rotation. Provenance pass over ported code. Trademark and disclaimer text in README, user guide and report templates. Full history scan for vendor files and secrets. Credential rotation. Provenance pass over ported code. Trademark and disclaimer text in README, user guide and report templates.
**Week of October 12: public repository** **Week of October 12: public repository**
Public mirror on a mainstream code host, continuous integration for both architectures, issue templates, contributing guide, code of conduct, security policy. The private Git server stays as my working copy. Open the repository to everyone on my own Gitea server, where it has lived since the first commit, with continuous integration, issue templates, a contributing guide, a code of conduct and a security policy. No mirror elsewhere: one home is easier to keep honest.
**Week of October 19: packages** **Week of October 19: packages**
Check name availability. Upload version 2.0.0 wheels to the Python package index, the image to a public container registry, and submit the conda recipe for review. Check name availability. Upload version 2.0.0 wheels to the Python package index, the image to a public container registry, and submit the conda recipe for review.
@@ -11,7 +11,7 @@ One small note first. The command examples below use the usual command line opti
On any Linux or macOS machine with Python 3.12: On any Linux or macOS machine with Python 3.12:
```bash ```bash
uv venv && uv pip install simurg-2.0.0-py3-none-any.whl uv venv && uv pip install simurgarray-2.0.0-py3-none-any.whl
simurg --help simurg --help
``` ```
+3 -3
View File
@@ -37,8 +37,8 @@ Without them the same code runs in pure Python/NumPy; `SIMURG_PURE_PYTHON=1` for
`manylinux_2_28` kernel wheels for x86_64 and aarch64, glibc ≥ 2.28): `manylinux_2_28` kernel wheels for x86_64 and aarch64, glibc ≥ 2.28):
```bash ```bash
python3 -m venv simurg-env && simurg-env/bin/pip install simurg-2.0.0-py3-none-any.whl \ python3 -m venv simurg-env && simurg-env/bin/pip install simurgarray-2.0.0-py3-none-any.whl \
simurg_core-1.1.0-cp312-abi3-manylinux_2_28_$(uname -m).whl # the second wheel is optional simurgarray_core-1.1.0-cp312-abi3-manylinux_2_28_$(uname -m).whl # the second wheel is optional
``` ```
**Docker** (image ≈ 550 MB, kernels included, runs as a non-root user; data stay in the mounted folder): **Docker** (image ≈ 550 MB, kernels included, runs as a non-root user; data stay in the mounted folder):
@@ -53,7 +53,7 @@ docker run --rm --user "$(id -u):$(id -g)" -v "$PWD":/work simurg:2.0.0 \
```bash ```bash
conda build -c conda-forge --output-folder conda-bld packaging/conda/simurg-core packaging/conda/simurg conda build -c conda-forge --output-folder conda-bld packaging/conda/simurg-core packaging/conda/simurg
conda create -n simurg -c ./conda-bld -c conda-forge simurg simurg-core conda create -n simurgarray -c ./conda-bld -c conda-forge simurgarray simurgarray-core
``` ```
All four installs give identical results on x86_64 and aarch64 (`docs/validation/P10.md`). All four installs give identical results on x86_64 and aarch64 (`docs/validation/P10.md`).
+4 -1
View File
@@ -50,7 +50,7 @@ GTCtoVCF 1.2.1 run under Python 3 with two local compatibility patches (K-022),
|---|---|---| |---|---|---|
| identical calls | 23 656 575 | | | identical calls | 23 656 575 | |
| identical no-calls | 109 760 | | | identical no-calls | 109 760 | |
| `oracle_site_includes_probes_we_skip` | 2 917 | GTCtoVCF merges intensity-only CNV probes (e.g. `ilmnseq_CYP2C8_…_CNV`) into SNV sites; their alleles make its call ambiguous. SimurgArray skips intensity-only loci (OUT-019) | | `oracle_site_includes_probes_we_skip` | 2 917 | GTCtoVCF merges intensity-only CNV probes into SNV sites; their alleles make its call ambiguous. SimurgArray skips intensity-only loci (OUT-019) |
| `oracle_opposite_strand_indel_bug` | 177 | `[I/D]` and `[D/I]` duplicate indel probes all heterozygous: we write `0/1`, GTCtoVCF 1.2.1 `./.` — the reference bug named in OUT-020/EDGE-012 | | `oracle_opposite_strand_indel_bug` | 177 | `[I/D]` and `[D/I]` duplicate indel probes all heterozygous: we write `0/1`, GTCtoVCF 1.2.1 `./.` — the reference bug named in OUT-020/EDGE-012 |
| `grouping_differs` | 155 | indel probes designed 1–3 bp apart normalise to the same variant: we merge them (OUT-030), GTCtoVCF groups by manifest position; the probes disagree, so the merged site is missing | | `grouping_differs` | 155 | indel probes designed 1–3 bp apart normalise to the same variant: we merge them (OUT-030), GTCtoVCF groups by manifest position; the probes disagree, so the merged site is missing |
| `ours_missing_het_in_haploid` | 17 | OUT-018 | | `ours_missing_het_in_haploid` | 17 | OUT-018 |
@@ -84,3 +84,6 @@ has the dash on the right (patched to skip instead of crash), which SimurgArray
| `--merge-snv-indel` (OUT-021, EDGE-013) | 1 GSA sample; `bcftools norm -c e -f` | 677 SNV+indel positions merged (635 796 → 635 119 records), 0 REF mismatches; unit test of the combined genotypes | | `--merge-snv-indel` (OUT-021, EDGE-013) | 1 GSA sample; `bcftools norm -c e -f` | 677 SNV+indel positions merged (635 796 → 635 119 records), 0 REF mismatches; unit test of the combined genotypes |
| `--auxiliary-loci` (OUT-035, EDGE-015) | unit tests for every rule (a)–(e) and a minus-strand design; 3 real probes (plus and minus designs) redefined as MNVs | records replaced, genotypes preserved, 0 REF mismatches | | `--auxiliary-loci` (OUT-035, EDGE-015) | unit tests for every rule (a)–(e) and a minus-strand design; 3 real probes (plus and minus designs) redefined as MNVs | records replaced, genotypes preserved, 0 REF mismatches |
| `export plink --format pgen|both` (plan §8.4) | `plink2 --pfile` on our `.pgen` → `.bed` | byte-identical to our own `.bed` (637 397 variants), no plink2 warnings | | `export plink --format pgen|both` (plan §8.4) | `plink2 --pfile` on our `.pgen` → `.bed` | byte-identical to our own `.bed` (637 397 variants), no plink2 warnings |
The example rows in `P6_gsa36_vs_gtc2vcf.json` and `P6_gsa36_vs_gtctovcf.json` show probe names as stable
pseudonyms (`locus_NNNN`); sample IDs, positions, alleles and all counts are the original values.
+87 -86
View File
@@ -6,26 +6,26 @@
"probes_in_merged_records": 5000, "probes_in_merged_records": 5000,
"probes_only_in_oracle": 22449, "probes_only_in_oracle": 22449,
"only_in_oracle_examples": [ "only_in_oracle_examples": [
"10:135332149_CNV_CYP2E1", "locus_0001",
"10:135332539_CNV_CYP2E1", "locus_0002",
"10:135332749_CNV_CYP2E1", "locus_0003",
"10:135333169_CNV_CYP2E1", "locus_0004",
"10:135333379_CNV_CYP2E1", "locus_0005",
"10:135333589_CNV_CYP2E1", "locus_0006",
"10:135333799_CNV_CYP2E1", "locus_0007",
"10:135334009_CNV_CYP2E1", "locus_0008",
"10:135334009_CNV_CYP2E1_ilmndup1", "locus_0009",
"10:135334219_CNV_CYP2E1", "locus_0010",
"10:135334429_CNV_CYP2E1", "locus_0011",
"10:135334639_CNV_CYP2E1", "locus_0012",
"10:135334849_CNV_CYP2E1", "locus_0013",
"10:135335059_CNV_CYP2E1", "locus_0014",
"10:135335569_CNV_CYP2E1", "locus_0015",
"10:135335569_CNV_CYP2E1_ilmndup1", "locus_0016",
"10:135335869_CNV_CYP2E1", "locus_0017",
"10:135335869_CNV_CYP2E1_ilmndup1", "locus_0018",
"10:135336079_CNV_CYP2E1", "locus_0019",
"10:135336289_CNV_CYP2E1" "locus_0020"
], ],
"categories": { "categories": {
"grouping_differs": 6424, "grouping_differs": 6424,
@@ -39,7 +39,7 @@
"grouping_differs": [ "grouping_differs": [
[ [
"207895980019_R14C03", "207895980019_R14C03",
"ilmnseq_rs2013249.2_F2BT", "locus_0021",
[ [
"1", "1",
"19287570", "19287570",
@@ -57,7 +57,7 @@
], ],
[ [
"207895980019_R14C03", "207895980019_R14C03",
"ilmnseq_rs201615754.1_F2BT", "locus_0022",
[ [
"1", "1",
"97515784", "97515784",
@@ -75,7 +75,7 @@
], ],
[ [
"207895980019_R14C03", "207895980019_R14C03",
"ilmnseq_rs201615754.2_F2BT", "locus_0023",
[ [
"1", "1",
"97515784", "97515784",
@@ -93,7 +93,7 @@
], ],
[ [
"207895980019_R14C03", "207895980019_R14C03",
"rs201615754", "locus_0024",
[ [
"1", "1",
"97515784", "97515784",
@@ -111,7 +111,7 @@
], ],
[ [
"207895980019_R14C03", "207895980019_R14C03",
"ilmnseq_rs168107.1_ilmnrev_F2BT", "locus_0025",
[ [
"1", "1",
"108937356", "108937356",
@@ -129,7 +129,7 @@
], ],
[ [
"207895980019_R14C03", "207895980019_R14C03",
"ilmnseq_rs168107.2_ilmnfwd_F2BT", "locus_0026",
[ [
"1", "1",
"108937356", "108937356",
@@ -147,7 +147,7 @@
], ],
[ [
"207895980019_R14C03", "207895980019_R14C03",
"ilmnseq_rs168107.2_ilmnrev_F2BT", "locus_0027",
[ [
"1", "1",
"108937356", "108937356",
@@ -165,7 +165,7 @@
], ],
[ [
"207895980019_R14C03", "207895980019_R14C03",
"ilmnseq_rs4648276.2_F2BT", "locus_0028",
[ [
"1", "1",
"186676356", "186676356",
@@ -183,7 +183,7 @@
], ],
[ [
"207895980019_R14C03", "207895980019_R14C03",
"ilmnseq_rs4648276_ilmnfwd_F2BT", "locus_0029",
[ [
"1", "1",
"186676356", "186676356",
@@ -201,7 +201,7 @@
], ],
[ [
"207895980019_R14C03", "207895980019_R14C03",
"rs4648276", "locus_0030",
[ [
"1", "1",
"186676356", "186676356",
@@ -219,7 +219,7 @@
], ],
[ [
"207895980019_R14C03", "207895980019_R14C03",
"ilmnseq_rs1819741.1_F2BT", "locus_0031",
[ [
"1", "1",
"192815708", "192815708",
@@ -237,7 +237,7 @@
], ],
[ [
"207895980019_R14C03", "207895980019_R14C03",
"ilmnseq_rs2777511.1_ilmnfwd_F2BT", "locus_0032",
[ [
"10", "10",
"33785635", "33785635",
@@ -255,7 +255,7 @@
], ],
[ [
"207895980019_R14C03", "207895980019_R14C03",
"ilmnseq_rs2777511.1_ilmnrev_F2BT", "locus_0033",
[ [
"10", "10",
"33785635", "33785635",
@@ -273,7 +273,7 @@
], ],
[ [
"207895980019_R14C03", "207895980019_R14C03",
"ilmnseq_rs2777511.2_ilmnrev_F2BT", "locus_0034",
[ [
"10", "10",
"33785635", "33785635",
@@ -291,7 +291,7 @@
], ],
[ [
"207895980019_R14C03", "207895980019_R14C03",
"ilmnseq_rs11819745.2_F2BT", "locus_0035",
[ [
"10", "10",
"37501484", "37501484",
@@ -309,7 +309,7 @@
], ],
[ [
"207895980019_R14C03", "207895980019_R14C03",
"ilmnseq_rs7091672.2_F2BT", "locus_0036",
[ [
"10", "10",
"118836909", "118836909",
@@ -327,7 +327,7 @@
], ],
[ [
"207895980019_R14C03", "207895980019_R14C03",
"ilmnseq_rs7091672.3_F2BT", "locus_0037",
[ [
"10", "10",
"118836909", "118836909",
@@ -345,7 +345,7 @@
], ],
[ [
"207895980019_R14C03", "207895980019_R14C03",
"ilmnseq_rs7091672_ilmnfwd_F2BT", "locus_0038",
[ [
"10", "10",
"118836909", "118836909",
@@ -363,7 +363,7 @@
], ],
[ [
"207895980019_R14C03", "207895980019_R14C03",
"rs7091672", "locus_0039",
[ [
"10", "10",
"118836909", "118836909",
@@ -381,7 +381,7 @@
], ],
[ [
"207895980019_R14C03", "207895980019_R14C03",
"ilmnseq_rs1219648.2_F2BT", "locus_0040",
[ [
"10", "10",
"121586676", "121586676",
@@ -400,7 +400,7 @@
], ],
"representation_diff": [ "representation_diff": [
[ [
"IlmnSeq_rs3215400", "locus_0041",
[ [
"1", "1",
"20589096", "20589096",
@@ -415,7 +415,7 @@
] ]
], ],
[ [
"ilmnseq_rs3215400_ilmnrev", "locus_0042",
[ [
"1", "1",
"20589096", "20589096",
@@ -430,7 +430,7 @@
] ]
], ],
[ [
"rs3215400", "locus_0043",
[ [
"1", "1",
"20589096", "20589096",
@@ -445,7 +445,7 @@
] ]
], ],
[ [
"ilmnseq_rs61697860_ilmnfwd", "locus_0044",
[ [
"1", "1",
"78303099", "78303099",
@@ -460,7 +460,7 @@
] ]
], ],
[ [
"ilmnseq_rs35219756_ilmnrev_F2BTindel", "locus_0045",
[ [
"1", "1",
"78392093", "78392093",
@@ -475,7 +475,7 @@
] ]
], ],
[ [
"ilmnseq_rs35081652_ilmnfwd", "locus_0046",
[ [
"1", "1",
"78411336", "78411336",
@@ -490,7 +490,7 @@
] ]
], ],
[ [
"IlmnSeq_rs72549303_IlmnFWD", "locus_0047",
[ [
"1", "1",
"97450065", "97450065",
@@ -505,7 +505,7 @@
] ]
], ],
[ [
"IlmnSeq_rs72549303_IlmnREV", "locus_0048",
[ [
"1", "1",
"97450065", "97450065",
@@ -520,7 +520,7 @@
] ]
], ],
[ [
"ilmnseq_rs72549303", "locus_0049",
[ [
"1", "1",
"97450065", "97450065",
@@ -535,7 +535,7 @@
] ]
], ],
[ [
"ilmnseq_rs72549303_ilmndup1", "locus_0050",
[ [
"1", "1",
"97450065", "97450065",
@@ -550,7 +550,7 @@
] ]
], ],
[ [
"ilmnseq_rs72549303_ilmnfwd_deg3a2b0", "locus_0051",
[ [
"1", "1",
"97450065", "97450065",
@@ -565,7 +565,7 @@
] ]
], ],
[ [
"ilmnseq_rs72549303_ilmnrev_deg3a1b0", "locus_0052",
[ [
"1", "1",
"97450065", "97450065",
@@ -580,7 +580,7 @@
] ]
], ],
[ [
"ilmnseq_rs1184321568", "locus_0053",
[ [
"1", "1",
"97593250", "97593250",
@@ -595,7 +595,7 @@
] ]
], ],
[ [
"ilmnseq_rs1184321568_ilmnfwd", "locus_0054",
[ [
"1", "1",
"97593250", "97593250",
@@ -610,7 +610,7 @@
] ]
], ],
[ [
"ilmnseq_rs1184321568_ilmnfwd_deg3a1b0", "locus_0055",
[ [
"1", "1",
"97593250", "97593250",
@@ -625,7 +625,7 @@
] ]
], ],
[ [
"ilmnseq_rs1184321568_ilmnrev", "locus_0056",
[ [
"1", "1",
"97593250", "97593250",
@@ -640,7 +640,7 @@
] ]
], ],
[ [
"ilmnseq_rs1184321568_ilmnrev_deg3a1b0", "locus_0057",
[ [
"1", "1",
"97593250", "97593250",
@@ -655,7 +655,7 @@
] ]
], ],
[ [
"IlmnSeq_rs72549315_IlmnFWD", "locus_0058",
[ [
"1", "1",
"147208902", "147208902",
@@ -670,7 +670,7 @@
] ]
], ],
[ [
"ilmnseq_rs72549315_ilmnfwd_ilmndup1", "locus_0059",
[ [
"1", "1",
"147208902", "147208902",
@@ -685,7 +685,7 @@
] ]
], ],
[ [
"ilmnseq_rs72549315_ilmnfwd_ilmndup2", "locus_0060",
[ [
"1", "1",
"147208902", "147208902",
@@ -703,7 +703,7 @@
"ours_missing_haploid_Y": [ "ours_missing_haploid_Y": [
[ [
"207895980019_R11C02", "207895980019_R11C02",
"rs5018209", "locus_0061",
[ [
"Y", "Y",
"19428214", "19428214",
@@ -721,7 +721,7 @@
], ],
[ [
"207895980035_R10C01", "207895980035_R10C01",
"rs186564287", "locus_0062",
[ [
"Y", "Y",
"14081208", "14081208",
@@ -739,7 +739,7 @@
], ],
[ [
"207895980019_R12C01", "207895980019_R12C01",
"ilmnseq_rs538240449", "locus_0063",
[ [
"Y", "Y",
"12030916", "12030916",
@@ -757,7 +757,7 @@
], ],
[ [
"207895980019_R12C01", "207895980019_R12C01",
"ilmnseq_rs537620655", "locus_0064",
[ [
"Y", "Y",
"13331090", "13331090",
@@ -775,7 +775,7 @@
], ],
[ [
"207895980035_R04C03", "207895980035_R04C03",
"rs13304158", "locus_0065",
[ [
"Y", "Y",
"9957467", "9957467",
@@ -793,7 +793,7 @@
], ],
[ [
"207895980035_R04C03", "207895980035_R04C03",
"exm1667692", "locus_0066",
[ [
"Y", "Y",
"12816261", "12816261",
@@ -811,7 +811,7 @@
], ],
[ [
"207895980019_R03C01", "207895980019_R03C01",
"rs373082162", "locus_0067",
[ [
"Y", "Y",
"19466559", "19466559",
@@ -829,7 +829,7 @@
], ],
[ [
"207895980019_R04C01", "207895980019_R04C01",
"rs4020596", "locus_0068",
[ [
"Y", "Y",
"5680808", "5680808",
@@ -847,7 +847,7 @@
], ],
[ [
"207895980019_R03C02", "207895980019_R03C02",
"JHU_Y.14692226", "locus_0069",
[ [
"Y", "Y",
"12580293", "12580293",
@@ -867,7 +867,7 @@
"ours_missing_het_in_haploid": [ "ours_missing_het_in_haploid": [
[ [
"207895980035_R13C03", "207895980035_R13C03",
"rs5979572", "locus_0070",
[ [
"X", "X",
"7467632", "7467632",
@@ -885,7 +885,7 @@
], ],
[ [
"207895980035_R13C03", "207895980035_R13C03",
"rs7887088", "locus_0071",
[ [
"X", "X",
"7478861", "7478861",
@@ -903,7 +903,7 @@
], ],
[ [
"207895980035_R13C03", "207895980035_R13C03",
"rs146250304", "locus_0072",
[ [
"X", "X",
"68391913", "68391913",
@@ -921,7 +921,7 @@
], ],
[ [
"207895980019_R06C01", "207895980019_R06C01",
"rs138003892", "locus_0073",
[ [
"X", "X",
"33006670", "33006670",
@@ -939,7 +939,7 @@
], ],
[ [
"207895980035_R09C03", "207895980035_R09C03",
"rs28602676", "locus_0074",
[ [
"MT", "MT",
"2690", "2690",
@@ -957,7 +957,7 @@
], ],
[ [
"207895980019_R15C02", "207895980019_R15C02",
"rs1606778", "locus_0075",
[ [
"X", "X",
"79535086", "79535086",
@@ -975,7 +975,7 @@
], ],
[ [
"207895980035_R14C01", "207895980035_R14C01",
"rs104894858", "locus_0076",
[ [
"X", "X",
"120442599", "120442599",
@@ -993,7 +993,7 @@
], ],
[ [
"207895980035_R03C03", "207895980035_R03C03",
"JHU_X.22234615", "locus_0077",
[ [
"X", "X",
"22216499", "22216499",
@@ -1011,7 +1011,7 @@
], ],
[ [
"207895980019_R09C03", "207895980019_R09C03",
"rs9786566", "locus_0078",
[ [
"Y", "Y",
"7044951", "7044951",
@@ -1029,7 +1029,7 @@
], ],
[ [
"207895980035_R12C03", "207895980035_R12C03",
"rs148519285", "locus_0079",
[ [
"X", "X",
"20830034", "20830034",
@@ -1047,7 +1047,7 @@
], ],
[ [
"207895980035_R11C03", "207895980035_R11C03",
"ilmnseq_rs111298280", "locus_0080",
[ [
"X", "X",
"91616889", "91616889",
@@ -1065,7 +1065,7 @@
], ],
[ [
"207895980035_R11C03", "207895980035_R11C03",
"ilmnseq_chrX:154532408_ilmnfwd_ilmndup3", "locus_0081",
[ [
"X", "X",
"154532408", "154532408",
@@ -1083,7 +1083,7 @@
], ],
[ [
"207895980042_R15C02", "207895980042_R15C02",
"ilmnseq_rs553518378", "locus_0082",
[ [
"Y", "Y",
"15734824", "15734824",
@@ -1101,7 +1101,7 @@
], ],
[ [
"207895980035_R05C03", "207895980035_R05C03",
"rs12396137", "locus_0083",
[ [
"X", "X",
"7462384", "7462384",
@@ -1119,7 +1119,7 @@
], ],
[ [
"207895980035_R05C03", "207895980035_R05C03",
"rs4830772", "locus_0084",
[ [
"X", "X",
"7475195", "7475195",
@@ -1137,7 +1137,7 @@
], ],
[ [
"207895980035_R05C03", "207895980035_R05C03",
"rs146250304", "locus_0072",
[ [
"X", "X",
"68391913", "68391913",
@@ -1155,5 +1155,6 @@
] ]
] ]
}, },
"unexplained": 0 "unexplained": 0,
"note": "Probe names from the vendor manifest are replaced by stable pseudonyms (locus_NNNN, shared by both oracle files); sample IDs, positions, alleles and all counts are unchanged."
} }
+110 -109
View File
@@ -6,26 +6,26 @@
"probes_in_merged_records": 37785, "probes_in_merged_records": 37785,
"probes_only_in_oracle": 22400, "probes_only_in_oracle": 22400,
"only_in_oracle_examples": [ "only_in_oracle_examples": [
"10:135332149_CNV_CYP2E1", "locus_0001",
"10:135332539_CNV_CYP2E1", "locus_0002",
"10:135332749_CNV_CYP2E1", "locus_0003",
"10:135333169_CNV_CYP2E1", "locus_0004",
"10:135333379_CNV_CYP2E1", "locus_0005",
"10:135333589_CNV_CYP2E1", "locus_0006",
"10:135333799_CNV_CYP2E1", "locus_0007",
"10:135334009_CNV_CYP2E1", "locus_0008",
"10:135334009_CNV_CYP2E1_ilmndup1", "locus_0009",
"10:135334219_CNV_CYP2E1", "locus_0010",
"10:135334429_CNV_CYP2E1", "locus_0011",
"10:135334639_CNV_CYP2E1", "locus_0012",
"10:135334849_CNV_CYP2E1", "locus_0013",
"10:135335059_CNV_CYP2E1", "locus_0014",
"10:135335569_CNV_CYP2E1", "locus_0015",
"10:135335569_CNV_CYP2E1_ilmndup1", "locus_0016",
"10:135335869_CNV_CYP2E1", "locus_0017",
"10:135335869_CNV_CYP2E1_ilmndup1", "locus_0018",
"10:135336079_CNV_CYP2E1", "locus_0019",
"10:135336289_CNV_CYP2E1" "locus_0020"
], ],
"categories": { "categories": {
"grouping_differs": 155, "grouping_differs": 155,
@@ -42,7 +42,7 @@
"oracle_site_includes_probes_we_skip": [ "oracle_site_includes_probes_we_skip": [
[ [
"207895980019_R03C01", "207895980019_R03C01",
"ilmnseq_rs529038948_ilmnrev", "locus_0085",
[ [
"1", "1",
"201085496", "201085496",
@@ -60,7 +60,7 @@
], ],
[ [
"207895980019_R03C01", "207895980019_R03C01",
"ilmnseq_rs529038948_ilmnrev_F2BT", "locus_0086",
[ [
"1", "1",
"201085496", "201085496",
@@ -78,7 +78,7 @@
], ],
[ [
"207895980019_R03C01", "207895980019_R03C01",
"ilmnseq_rs578144976", "locus_0087",
[ [
"10", "10",
"94981305", "94981305",
@@ -96,7 +96,7 @@
], ],
[ [
"207895980019_R03C01", "207895980019_R03C01",
"ilmnseq_rs578144976_ilmnfwd_F2BT", "locus_0088",
[ [
"10", "10",
"94981305", "94981305",
@@ -114,7 +114,7 @@
], ],
[ [
"207895980019_R03C01", "207895980019_R03C01",
"ilmnseq_rs578144976_ilmnrev_F2BT", "locus_0089",
[ [
"10", "10",
"94981305", "94981305",
@@ -132,7 +132,7 @@
], ],
[ [
"207895980019_R03C01", "207895980019_R03C01",
"ilmnseq_rs2860977_ilmnfwd_F2BT", "locus_0090",
[ [
"10", "10",
"95063364", "95063364",
@@ -150,7 +150,7 @@
], ],
[ [
"207895980019_R03C01", "207895980019_R03C01",
"ilmnseq_rs11045893_ilmnfwd", "locus_0091",
[ [
"12", "12",
"21239885", "21239885",
@@ -168,7 +168,7 @@
], ],
[ [
"207895980019_R03C01", "207895980019_R03C01",
"ilmnseq_16:55856356", "locus_0092",
[ [
"16", "16",
"55822444", "55822444",
@@ -186,7 +186,7 @@
], ],
[ [
"207895980019_R03C01", "207895980019_R03C01",
"ilmnseq_rs9947507_ilmnfwd", "locus_0093",
[ [
"18", "18",
"657095", "657095",
@@ -204,7 +204,7 @@
], ],
[ [
"207895980019_R03C01", "207895980019_R03C01",
"ilmnseq_rs77654350_ilmnfwd", "locus_0094",
[ [
"18", "18",
"664286", "664286",
@@ -222,7 +222,7 @@
], ],
[ [
"207895980019_R03C01", "207895980019_R03C01",
"rs150569967", "locus_0095",
[ [
"19", "19",
"39244961", "39244961",
@@ -240,7 +240,7 @@
], ],
[ [
"207895980019_R03C01", "207895980019_R03C01",
"ilmnseq_rs28416813_ilmnfwd_F2BT", "locus_0096",
[ [
"19", "19",
"39245004", "39245004",
@@ -258,7 +258,7 @@
], ],
[ [
"207895980019_R03C01", "207895980019_R03C01",
"ilmnseq_rs28416813_ilmnfwd_F2BT_ilmndup1", "locus_0097",
[ [
"19", "19",
"39245004", "39245004",
@@ -276,7 +276,7 @@
], ],
[ [
"207895980019_R03C01", "207895980019_R03C01",
"ilmnseq_rs28416813_ilmnfwd_F2BT_ilmndup2", "locus_0098",
[ [
"19", "19",
"39245004", "39245004",
@@ -294,7 +294,7 @@
], ],
[ [
"207895980019_R03C01", "207895980019_R03C01",
"ilmnseq_rs28416813_ilmnrev_F2BT", "locus_0099",
[ [
"19", "19",
"39245004", "39245004",
@@ -312,7 +312,7 @@
], ],
[ [
"207895980019_R03C01", "207895980019_R03C01",
"19:41351926", "locus_0100",
[ [
"19", "19",
"40846021", "40846021",
@@ -330,7 +330,7 @@
], ],
[ [
"207895980019_R03C01", "207895980019_R03C01",
"ilmnseq_rs114114578_ilmnrev", "locus_0101",
[ [
"19", "19",
"40849103", "40849103",
@@ -348,7 +348,7 @@
], ],
[ [
"207895980019_R03C01", "207895980019_R03C01",
"rs121909682", "locus_0102",
[ [
"2", "2",
"85552428", "85552428",
@@ -366,7 +366,7 @@
], ],
[ [
"207895980019_R03C01", "207895980019_R03C01",
"seq-rs796053097", "locus_0103",
[ [
"2", "2",
"166073440", "166073440",
@@ -384,7 +384,7 @@
], ],
[ [
"207895980019_R03C01", "207895980019_R03C01",
"ilmnseq_rs574780348_ilmnfwd", "locus_0104",
[ [
"22", "22",
"42126481", "42126481",
@@ -404,7 +404,7 @@
"grouping_differs": [ "grouping_differs": [
[ [
"207895980019_R03C01", "207895980019_R03C01",
"ilmnseq_rs45460698", "locus_0105",
[ [
"11", "11",
"113904829", "113904829",
@@ -422,7 +422,7 @@
], ],
[ [
"207895980019_R03C01", "207895980019_R03C01",
"ilmnseq_rs11280056", "locus_0106",
[ [
"18", "18",
"673443", "673443",
@@ -440,7 +440,7 @@
], ],
[ [
"207895980019_R03C01", "207895980019_R03C01",
"rs16430", "locus_0107",
[ [
"18", "18",
"673443", "673443",
@@ -458,7 +458,7 @@
], ],
[ [
"207895980019_R03C02", "207895980019_R03C02",
"ilmnseq_rs45460698", "locus_0105",
[ [
"11", "11",
"113904829", "113904829",
@@ -476,7 +476,7 @@
], ],
[ [
"207895980019_R03C02", "207895980019_R03C02",
"ilmnseq_rs11280056", "locus_0106",
[ [
"18", "18",
"673443", "673443",
@@ -494,7 +494,7 @@
], ],
[ [
"207895980019_R03C02", "207895980019_R03C02",
"rs16430", "locus_0107",
[ [
"18", "18",
"673443", "673443",
@@ -512,7 +512,7 @@
], ],
[ [
"207895980019_R04C01", "207895980019_R04C01",
"ilmnseq_rs45460698", "locus_0105",
[ [
"11", "11",
"113904829", "113904829",
@@ -530,7 +530,7 @@
], ],
[ [
"207895980019_R04C01", "207895980019_R04C01",
"ilmnseq_rs11280056", "locus_0106",
[ [
"18", "18",
"673443", "673443",
@@ -548,7 +548,7 @@
], ],
[ [
"207895980019_R04C01", "207895980019_R04C01",
"rs16430", "locus_0107",
[ [
"18", "18",
"673443", "673443",
@@ -566,7 +566,7 @@
], ],
[ [
"207895980019_R05C01", "207895980019_R05C01",
"ilmnseq_rs45460698", "locus_0105",
[ [
"11", "11",
"113904829", "113904829",
@@ -584,7 +584,7 @@
], ],
[ [
"207895980019_R05C01", "207895980019_R05C01",
"ilmnseq_rs11280056", "locus_0106",
[ [
"18", "18",
"673443", "673443",
@@ -602,7 +602,7 @@
], ],
[ [
"207895980019_R05C01", "207895980019_R05C01",
"rs16430", "locus_0107",
[ [
"18", "18",
"673443", "673443",
@@ -620,7 +620,7 @@
], ],
[ [
"207895980019_R05C01", "207895980019_R05C01",
"ilmnseq_rs333_ilmnfwd", "locus_0108",
[ [
"3", "3",
"46373452", "46373452",
@@ -638,7 +638,7 @@
], ],
[ [
"207895980019_R05C01", "207895980019_R05C01",
"ilmnseq_rs333_ilmnfwd_F2BTindel", "locus_0109",
[ [
"3", "3",
"46373452", "46373452",
@@ -656,7 +656,7 @@
], ],
[ [
"207895980019_R05C01", "207895980019_R05C01",
"ilmnseq_rs333_ilmnrev", "locus_0110",
[ [
"3", "3",
"46373452", "46373452",
@@ -674,7 +674,7 @@
], ],
[ [
"207895980019_R05C01", "207895980019_R05C01",
"ilmnseq_rs333_ilmnrev_F2BTindel", "locus_0111",
[ [
"3", "3",
"46373452", "46373452",
@@ -692,7 +692,7 @@
], ],
[ [
"207895980019_R05C01", "207895980019_R05C01",
"ilmnseq_rs35854239_ilmnfwd", "locus_0112",
[ [
"6", "6",
"160139865", "160139865",
@@ -710,7 +710,7 @@
], ],
[ [
"207895980019_R05C01", "207895980019_R05C01",
"ilmnseq_rs36056065", "locus_0113",
[ [
"6", "6",
"160139865", "160139865",
@@ -728,7 +728,7 @@
], ],
[ [
"207895980019_R06C01", "207895980019_R06C01",
"ilmnseq_rs45460698", "locus_0105",
[ [
"11", "11",
"113904829", "113904829",
@@ -746,7 +746,7 @@
], ],
[ [
"207895980019_R06C01", "207895980019_R06C01",
"ilmnseq_rs333_ilmnfwd", "locus_0108",
[ [
"3", "3",
"46373452", "46373452",
@@ -766,7 +766,7 @@
"oracle_opposite_strand_indel_bug": [ "oracle_opposite_strand_indel_bug": [
[ [
"207895980019_R03C01", "207895980019_R03C01",
"ilmnseq_rs3834939", "locus_0114",
[ [
"12", "12",
"21334835", "21334835",
@@ -784,7 +784,7 @@
], ],
[ [
"207895980019_R03C01", "207895980019_R03C01",
"ilmnseq_rs3834939_ilmnfwd_F2BTindel", "locus_0115",
[ [
"12", "12",
"21334835", "21334835",
@@ -802,7 +802,7 @@
], ],
[ [
"207895980019_R03C01", "207895980019_R03C01",
"ilmnseq_rs3834939_ilmnrev", "locus_0116",
[ [
"12", "12",
"21334835", "21334835",
@@ -820,7 +820,7 @@
], ],
[ [
"207895980019_R03C01", "207895980019_R03C01",
"rs3834939", "locus_0117",
[ [
"12", "12",
"21334835", "21334835",
@@ -838,7 +838,7 @@
], ],
[ [
"207895980019_R03C01", "207895980019_R03C01",
"ilmnseq_rs540086241_ilmnfwd_F2BTindel", "locus_0118",
[ [
"6", "6",
"33087504", "33087504",
@@ -856,7 +856,7 @@
], ],
[ [
"207895980019_R03C01", "207895980019_R03C01",
"ilmnseq_rs540086241_ilmnrev_deg3a2b0", "locus_0119",
[ [
"6", "6",
"33087504", "33087504",
@@ -874,7 +874,7 @@
], ],
[ [
"207895980019_R03C01", "207895980019_R03C01",
"ilmnseq_rs59782580_ilmnrev_deg3a1b0", "locus_0120",
[ [
"7", "7",
"140836521", "140836521",
@@ -892,7 +892,7 @@
], ],
[ [
"207895980019_R03C01", "207895980019_R03C01",
"ilmnseq_rs59782580_ilmnrev_F2BTindel", "locus_0121",
[ [
"7", "7",
"140836521", "140836521",
@@ -910,7 +910,7 @@
], ],
[ [
"207895980019_R03C01", "207895980019_R03C01",
"ilmnseq_rs59782580_ilmnrev_F2BTindel_deg3a1b1", "locus_0122",
[ [
"7", "7",
"140836521", "140836521",
@@ -928,7 +928,7 @@
], ],
[ [
"207895980019_R03C02", "207895980019_R03C02",
"ilmnseq_rs3834939", "locus_0114",
[ [
"12", "12",
"21334835", "21334835",
@@ -946,7 +946,7 @@
], ],
[ [
"207895980019_R03C02", "207895980019_R03C02",
"ilmnseq_rs3834939_ilmnfwd_F2BTindel", "locus_0115",
[ [
"12", "12",
"21334835", "21334835",
@@ -964,7 +964,7 @@
], ],
[ [
"207895980019_R03C02", "207895980019_R03C02",
"ilmnseq_rs3834939_ilmnrev", "locus_0116",
[ [
"12", "12",
"21334835", "21334835",
@@ -982,7 +982,7 @@
], ],
[ [
"207895980019_R03C02", "207895980019_R03C02",
"rs3834939", "locus_0117",
[ [
"12", "12",
"21334835", "21334835",
@@ -1000,7 +1000,7 @@
], ],
[ [
"207895980019_R03C02", "207895980019_R03C02",
"ilmnseq_rs540086241_ilmnfwd_F2BTindel", "locus_0118",
[ [
"6", "6",
"33087504", "33087504",
@@ -1018,7 +1018,7 @@
], ],
[ [
"207895980019_R03C02", "207895980019_R03C02",
"ilmnseq_rs540086241_ilmnrev_deg3a2b0", "locus_0119",
[ [
"6", "6",
"33087504", "33087504",
@@ -1036,7 +1036,7 @@
], ],
[ [
"207895980019_R03C02", "207895980019_R03C02",
"ilmnseq_rs59782580_ilmnrev_deg3a1b0", "locus_0120",
[ [
"7", "7",
"140836521", "140836521",
@@ -1054,7 +1054,7 @@
], ],
[ [
"207895980019_R03C02", "207895980019_R03C02",
"ilmnseq_rs59782580_ilmnrev_F2BTindel", "locus_0121",
[ [
"7", "7",
"140836521", "140836521",
@@ -1072,7 +1072,7 @@
], ],
[ [
"207895980019_R03C02", "207895980019_R03C02",
"ilmnseq_rs59782580_ilmnrev_F2BTindel_deg3a1b1", "locus_0122",
[ [
"7", "7",
"140836521", "140836521",
@@ -1090,7 +1090,7 @@
], ],
[ [
"207895980019_R04C01", "207895980019_R04C01",
"ilmnseq_rs3834939", "locus_0114",
[ [
"12", "12",
"21334835", "21334835",
@@ -1108,7 +1108,7 @@
], ],
[ [
"207895980019_R04C01", "207895980019_R04C01",
"ilmnseq_rs3834939_ilmnfwd_F2BTindel", "locus_0115",
[ [
"12", "12",
"21334835", "21334835",
@@ -1128,7 +1128,7 @@
"ours_missing_haploid_Y": [ "ours_missing_haploid_Y": [
[ [
"207895980019_R03C01", "207895980019_R03C01",
"rs373082162", "locus_0067",
[ [
"Y", "Y",
"19466559", "19466559",
@@ -1146,7 +1146,7 @@
], ],
[ [
"207895980019_R03C02", "207895980019_R03C02",
"JHU_Y.14692226", "locus_0069",
[ [
"Y", "Y",
"12580293", "12580293",
@@ -1164,7 +1164,7 @@
], ],
[ [
"207895980019_R04C01", "207895980019_R04C01",
"rs4020596", "locus_0068",
[ [
"Y", "Y",
"5680808", "5680808",
@@ -1182,7 +1182,7 @@
], ],
[ [
"207895980019_R11C02", "207895980019_R11C02",
"rs5018209", "locus_0061",
[ [
"Y", "Y",
"19428214", "19428214",
@@ -1200,7 +1200,7 @@
], ],
[ [
"207895980019_R12C01", "207895980019_R12C01",
"ilmnseq_rs538240449", "locus_0063",
[ [
"Y", "Y",
"12030916", "12030916",
@@ -1218,7 +1218,7 @@
], ],
[ [
"207895980019_R12C01", "207895980019_R12C01",
"ilmnseq_rs537620655", "locus_0064",
[ [
"Y", "Y",
"13331090", "13331090",
@@ -1236,7 +1236,7 @@
], ],
[ [
"207895980035_R04C03", "207895980035_R04C03",
"rs13304158", "locus_0065",
[ [
"Y", "Y",
"9957467", "9957467",
@@ -1254,7 +1254,7 @@
], ],
[ [
"207895980035_R04C03", "207895980035_R04C03",
"exm1667692", "locus_0066",
[ [
"Y", "Y",
"12816261", "12816261",
@@ -1272,7 +1272,7 @@
], ],
[ [
"207895980035_R10C01", "207895980035_R10C01",
"rs186564287", "locus_0062",
[ [
"Y", "Y",
"14081208", "14081208",
@@ -1292,7 +1292,7 @@
"ours_missing_het_in_haploid": [ "ours_missing_het_in_haploid": [
[ [
"207895980019_R06C01", "207895980019_R06C01",
"rs138003892", "locus_0073",
[ [
"X", "X",
"33006670", "33006670",
@@ -1310,7 +1310,7 @@
], ],
[ [
"207895980019_R09C03", "207895980019_R09C03",
"JHU_Y.6912991", "locus_0123",
[ [
"Y", "Y",
"7044951", "7044951",
@@ -1328,7 +1328,7 @@
], ],
[ [
"207895980019_R09C03", "207895980019_R09C03",
"rs9786566", "locus_0078",
[ [
"Y", "Y",
"7044951", "7044951",
@@ -1346,7 +1346,7 @@
], ],
[ [
"207895980019_R15C02", "207895980019_R15C02",
"rs1606778", "locus_0075",
[ [
"X", "X",
"79535086", "79535086",
@@ -1364,7 +1364,7 @@
], ],
[ [
"207895980035_R03C03", "207895980035_R03C03",
"JHU_X.22234615", "locus_0077",
[ [
"X", "X",
"22216499", "22216499",
@@ -1382,7 +1382,7 @@
], ],
[ [
"207895980035_R05C03", "207895980035_R05C03",
"rs12396137", "locus_0083",
[ [
"X", "X",
"7462384", "7462384",
@@ -1400,7 +1400,7 @@
], ],
[ [
"207895980035_R05C03", "207895980035_R05C03",
"rs4830772", "locus_0084",
[ [
"X", "X",
"7475195", "7475195",
@@ -1418,7 +1418,7 @@
], ],
[ [
"207895980035_R05C03", "207895980035_R05C03",
"rs146250304", "locus_0072",
[ [
"X", "X",
"68391913", "68391913",
@@ -1436,7 +1436,7 @@
], ],
[ [
"207895980035_R09C03", "207895980035_R09C03",
"rs28602676", "locus_0074",
[ [
"MT", "MT",
"2690", "2690",
@@ -1454,7 +1454,7 @@
], ],
[ [
"207895980035_R11C03", "207895980035_R11C03",
"ilmnseq_rs111298280", "locus_0080",
[ [
"X", "X",
"91616889", "91616889",
@@ -1472,7 +1472,7 @@
], ],
[ [
"207895980035_R12C03", "207895980035_R12C03",
"rs148519285", "locus_0079",
[ [
"X", "X",
"20830034", "20830034",
@@ -1490,7 +1490,7 @@
], ],
[ [
"207895980035_R13C03", "207895980035_R13C03",
"rs5979572", "locus_0070",
[ [
"X", "X",
"7467632", "7467632",
@@ -1508,7 +1508,7 @@
], ],
[ [
"207895980035_R13C03", "207895980035_R13C03",
"exm2273083", "locus_0124",
[ [
"X", "X",
"7478861", "7478861",
@@ -1526,7 +1526,7 @@
], ],
[ [
"207895980035_R13C03", "207895980035_R13C03",
"rs7887088", "locus_0071",
[ [
"X", "X",
"7478861", "7478861",
@@ -1544,7 +1544,7 @@
], ],
[ [
"207895980035_R13C03", "207895980035_R13C03",
"rs146250304", "locus_0072",
[ [
"X", "X",
"68391913", "68391913",
@@ -1562,7 +1562,7 @@
], ],
[ [
"207895980035_R14C01", "207895980035_R14C01",
"rs104894858", "locus_0076",
[ [
"X", "X",
"120442599", "120442599",
@@ -1580,7 +1580,7 @@
], ],
[ [
"207895980042_R15C02", "207895980042_R15C02",
"ilmnseq_rs553518378", "locus_0082",
[ [
"Y", "Y",
"15734824", "15734824",
@@ -1600,7 +1600,7 @@
"oracle_diploid_candidates_in_haploid_context": [ "oracle_diploid_candidates_in_haploid_context": [
[ [
"207895980035_R11C03", "207895980035_R11C03",
"ilmnseq_rs144970500.1_F2BT", "locus_0125",
[ [
"X", "X",
"22890860", "22890860",
@@ -1618,7 +1618,7 @@
], ],
[ [
"207895980035_R11C03", "207895980035_R11C03",
"ilmnseq_rs144970500.2_F2BT", "locus_0126",
[ [
"X", "X",
"22890860", "22890860",
@@ -1636,5 +1636,6 @@
] ]
] ]
}, },
"unexplained": 0 "unexplained": 0,
"note": "Probe names from the vendor manifest are replaced by stable pseudonyms (locus_NNNN, shared by both oracle files); sample IDs, positions, alleles and all counts are unchanged."
} }
+1 -1
View File
@@ -79,4 +79,4 @@ Manifest loading: GSA 13 s → 3 s, Omni2.5 53 s → 13 s, GDA 40 s → 10 s (Pi
* Remaining per-sample time with the kernels (Pi, 1.1 s): normalization fit 0.53 s (many small robust fits per bin), * Remaining per-sample time with the kernels (Pi, 1.1 s): normalization fit 0.53 s (many small robust fits per bin),
calling 0.24 s, normalize/polar 0.08 s, raw X/Y 0.06 s. A full Rust normalization fit is the next step if needed. calling 0.24 s, normalize/polar 0.08 s, raw X/Y 0.06 s. A full Rust normalization fit is the next step if needed.
* Pi thread scaling is poor (36 samples, 3 workers ≈ 1.7× one core): the Pi 5's memory bandwidth, not the code. * Pi thread scaling is poor (36 samples, 3 workers ≈ 1.7× one core): the Pi 5's memory bandwidth, not the code.
* CI (`.github/workflows/ci.yml`) builds the extension and runs the unit tests with and without it. * CI (`.gitea/workflows/ci.yml`) builds the extension and runs the unit tests with and without it.
+1 -1
View File
@@ -39,7 +39,7 @@ A per-locus diagnosis on chr22 compared our trained clusters, the vendor cluster
- **2-cluster loci were the problem.** There, v1 made 1418 errors against the vendor's 186. - **2-cluster loci were the problem.** There, v1 made 1418 errors against the vendor's 186.
- **The cause was the fixed θ windows.** Many loci are compressed or asymmetric in θ; for example the vendor file - **The cause was the fixed θ windows.** Many loci are compressed or asymmetric in θ; for example the vendor file
has AA 0.05 / AB 0.27 / BB 0.45, or AA 0.37 / AB 0.68 / BB 0.96. With fixed windows such loci were mislabelled: has AA 0.05 / AB 0.27 / BB 0.45, or AA 0.37 / AB 0.68 / BB 0.96. With fixed windows such loci were mislabelled:
GSA-rs2003814 (truth 14 AB + 66 BB) was clustered as AA + AB. rs2003814 (truth 14 AB + 66 BB) was clustered as AA + AB.
v2 (`src/simurg/train/clusters.py`) replaces this with: v2 (`src/simurg/train/clusters.py`) replaces this with:
+1 -1
View File
@@ -3,7 +3,7 @@
{% set version = load_file_regex(load_file="Cargo.toml", regex_pattern='version = "([^"]+)"', from_recipe_dir=False).group(1) %} {% set version = load_file_regex(load_file="Cargo.toml", regex_pattern='version = "([^"]+)"', from_recipe_dir=False).group(1) %}
package: package:
name: simurg-core name: simurgarray-core
version: {{ version }} version: {{ version }}
source: source:
+2 -2
View File
@@ -3,7 +3,7 @@
{% set version = load_file_regex(load_file="src/simurg/__init__.py", regex_pattern='__version__ = "([^"]+)"', from_recipe_dir=False).group(1) %} {% set version = load_file_regex(load_file="src/simurg/__init__.py", regex_pattern='__version__ = "([^"]+)"', from_recipe_dir=False).group(1) %}
package: package:
name: simurg name: simurgarray
version: {{ version }} version: {{ version }}
source: source:
@@ -30,7 +30,7 @@ requirements:
- pyarrow >=15 - pyarrow >=15
- openpyxl >=3.1 - openpyxl >=3.1
run_constrained: run_constrained:
- simurg-core =={{ version }} - simurgarray-core >=1.1,<2
test: test:
imports: imports:
+7 -2
View File
@@ -3,7 +3,7 @@ requires = ["hatchling>=1.27"]
build-backend = "hatchling.build" build-backend = "hatchling.build"
[project] [project]
name = "simurg" name = "simurgarray"
description = "SimurgArray: open research toolkit for Illumina Infinium genotyping BeadChip data" description = "SimurgArray: open research toolkit for Illumina Infinium genotyping BeadChip data"
readme = "README.md" readme = "README.md"
license = "MIT" license = "MIT"
@@ -15,7 +15,6 @@ classifiers = [
"Development Status :: 5 - Production/Stable", "Development Status :: 5 - Production/Stable",
"Intended Audience :: Science/Research", "Intended Audience :: Science/Research",
"Operating System :: POSIX :: Linux", "Operating System :: POSIX :: Linux",
"Operating System :: MacOS",
"Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.13", "Programming Language :: Python :: 3.13",
"Topic :: Scientific/Engineering :: Bio-Informatics", "Topic :: Scientific/Engineering :: Bio-Informatics",
@@ -40,6 +39,12 @@ dev = [
"types-PyYAML", "types-PyYAML",
] ]
[project.urls]
Homepage = "https://gitea.yaylali.uk/kemal/SimurgArray"
Documentation = "https://gitea.yaylali.uk/kemal/SimurgArray/src/branch/main/docs/user_guide.md"
Changelog = "https://gitea.yaylali.uk/kemal/SimurgArray/src/branch/main/CHANGELOG.md"
Issues = "https://gitea.yaylali.uk/kemal/SimurgArray/issues"
[project.scripts] [project.scripts]
simurg = "simurg.cli.main:app" simurg = "simurg.cli.main:app"
+1 -1
View File
@@ -3,7 +3,7 @@ requires = ["maturin>=1.7,<2"]
build-backend = "maturin" build-backend = "maturin"
[project] [project]
name = "simurg-core" name = "simurgarray-core"
description = "Compiled kernels for SimurgArray (optional; the pure-Python paths give identical results)" description = "Compiled kernels for SimurgArray (optional; the pure-Python paths give identical results)"
requires-python = ">=3.12" requires-python = ">=3.12"
license = "MIT" license = "MIT"
+3 -3
View File
@@ -1,7 +1,7 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# Build the release artifacts into dist/: # Build the release artifacts into dist/:
# simurg-<v>-py3-none-any.whl + simurg-<v>.tar.gz (pure Python) # simurgarray-<v>-py3-none-any.whl + simurgarray-<v>.tar.gz (pure Python)
# simurg_core-<v>-cp312-abi3-manylinux_2_28_{aarch64,x86_64}.whl (compiled kernels, Python >= 3.12) # simurgarray_core-<v>-cp312-abi3-manylinux_2_28_{aarch64,x86_64}.whl (compiled kernels, Python >= 3.12)
# Portable Linux wheels are linked against glibc 2.28 with `maturin --zig` (cross-compiles the other architecture). # Portable Linux wheels are linked against glibc 2.28 with `maturin --zig` (cross-compiles the other architecture).
# Needs: uv, a Rust toolchain (rustup), ~60 MB for zig on first use. # Needs: uv, a Rust toolchain (rustup), ~60 MB for zig on first use.
# bash scripts/build_dist.sh [aarch64|x86_64|all] (default: all) # bash scripts/build_dist.sh [aarch64|x86_64|all] (default: all)
@@ -10,7 +10,7 @@ cd "$(dirname "$0")/.."
export PATH="$HOME/.cargo/bin:$PATH" export PATH="$HOME/.cargo/bin:$PATH"
WHICH=${1:-all} WHICH=${1:-all}
mkdir -p dist mkdir -p dist
uv build -o dist # sdist + pure wheel of simurg uv build -o dist # sdist + pure wheel of simurgarray
MATURIN="uvx --from maturin[zig]>=1.7,<2 maturin" MATURIN="uvx --from maturin[zig]>=1.7,<2 maturin"
for arch in aarch64 x86_64; do for arch in aarch64 x86_64; do
[[ $WHICH == all || $WHICH == "$arch" ]] || continue [[ $WHICH == all || $WHICH == "$arch" ]] || continue
+4 -4
View File
@@ -29,10 +29,10 @@ ls -la dist
echo "=== 2. pip install into fresh venvs $(date -u +%T) ===" echo "=== 2. pip install into fresh venvs $(date -u +%T) ==="
PY=/usr/bin/python3 PY=/usr/bin/python3
$PY --version $PY --version
CORE=$(ls dist/simurg_core-*manylinux_2_28_$ARCH.whl 2>/dev/null | head -1) CORE=$(ls dist/simurgarray_core-*manylinux_2_28_$ARCH.whl 2>/dev/null | head -1)
$PY -m venv $W/fresh && $W/fresh/bin/pip install -q dist/simurg-*-py3-none-any.whl "$CORE" \ $PY -m venv $W/fresh && $W/fresh/bin/pip install -q dist/simurgarray-*-py3-none-any.whl "$CORE" \
&& step pip_install ok || step pip_install FAILED && step pip_install ok || step pip_install FAILED
$PY -m venv $W/pure && $W/pure/bin/pip install -q dist/simurg-*-py3-none-any.whl \ $PY -m venv $W/pure && $W/pure/bin/pip install -q dist/simurgarray-*-py3-none-any.whl \
&& step pip_install_pure ok || step pip_install_pure FAILED && step pip_install_pure ok || step pip_install_pure FAILED
$W/fresh/bin/python -c "from simurg._core import backend; print('fresh:', backend())" $W/fresh/bin/python -c "from simurg._core import backend; print('fresh:', backend())"
$W/pure/bin/python -c "from simurg._core import backend; print('pure:', backend())" $W/pure/bin/python -c "from simurg._core import backend; print('pure:', backend())"
@@ -87,7 +87,7 @@ if $C/conda install -y -q -n base conda-build > $R/conda.log 2>&1 \
&& $C/conda build -c conda-forge --output-folder $W/condabld packaging/conda/simurg-core packaging/conda/simurg \ && $C/conda build -c conda-forge --output-folder $W/condabld packaging/conda/simurg-core packaging/conda/simurg \
>> $R/conda.log 2>&1; then >> $R/conda.log 2>&1; then
step conda_build ok step conda_build ok
$C/conda create -y -q -p $W/cenv -c $W/condabld -c conda-forge simurg simurg-core >> $R/conda.log 2>&1 \ $C/conda create -y -q -p $W/cenv -c $W/condabld -c conda-forge simurgarray simurgarray-core >> $R/conda.log 2>&1 \
&& $W/cenv/bin/simurg --version \ && $W/cenv/bin/simurg --version \
&& $W/cenv/bin/python -c "from simurg._core import backend; print('conda:', backend())" \ && $W/cenv/bin/python -c "from simurg._core import backend; print('conda:', backend())" \
&& $W/cenv/bin/simurg genotype --bpm $BPM --egt $EGT --idats $W/tut_fresh/idats --out $W/conda_run/gtc \ && $W/cenv/bin/simurg genotype --bpm $BPM --egt $EGT --idats $W/tut_fresh/idats --out $W/conda_run/gtc \
Generated
+1 -1
View File
@@ -656,7 +656,7 @@ wheels = [
] ]
[[package]] [[package]]
name = "simurg" name = "simurgarray"
source = { editable = "." } source = { editable = "." }
dependencies = [ dependencies = [
{ name = "numpy" }, { name = "numpy" },