convert_genome (Python)
Python wrapper for the
SauersML/convert_genome CLI.
Convert direct-to-consumer dumps (23andMe, AncestryDNA, MyHeritage,
deCODEme) and standard VCF/BCF into compliant VCF, BCF, or PLINK 1.9
binary — with build detection, sex inference, liftover, and panel
harmonisation, all controllable from kwargs.
from convert_genome import convert, OutputFormat
result = convert(
input="23andme.txt",
output="out.vcf",
format=OutputFormat.VCF,
assembly="hg38",
standardize=True,
)
result.statistics.emitted_records # int
result.sample.sex_inferred # bool
result.build_detection.detected_build # 'GRCh37' / 'GRCh38' / ...
result.report_path # path to <stem>_report.json
result.output_paths # files that actually exist on disk
result.yield_rate # emitted / total
The wrapper runs the Rust binary, parses the sidecar
<stem>_report.json into typed frozen dataclasses, and returns a
single ConversionResult.
Install
pip install convert_genome
# the Rust binary:
cargo install convert_genome
Binary located via binary= or PATH. No env-var indirection — if
the binary isn't on PATH, pass binary= explicitly. Missing binary
→ ConvertGenomeBinaryNotFound with the suggested install command.
Shortcuts: skip every auto-discovery step
The CLI will download/auto-detect things it doesn't need to. Pass them in directly:
convert(
input="raw.txt",
output="out.vcf",
reference="/cache/hg38.fa", # skip FASTA download
reference_fai="/cache/hg38.fa.fai", # skip .fai indexing
input_build="hg19", # skip build detection
assembly="GRCh38", # target build (still does liftover)
panel="/cache/1kg_panel.vcf", # supply harmonisation panel
sex="female", # skip sex inference
standardize=True,
)
sex is lenient: passing "unknown" or "indeterminate" (e.g. when
chaining out of infer_sex) silently omits the --sex flag and lets
the CLI run its own inference.
Builder
Converter is a frozen dataclass; every with_* returns a new
instance, so branching is safe.
from convert_genome import Converter, Sex, OutputFormat
plan = (
Converter(input="raw.txt", output_dir="out/", format=OutputFormat.PLINK)
.with_assembly("GRCh38")
.with_reference("/cache/hg38.fa", "/cache/hg38.fa.fai")
.with_panel("/data/1kg_panel.vcf.gz")
.with_standardize()
.with_sex(Sex.MALE)
)
print(plan.argv()) # exact argv that would be passed to the CLI
result = plan.run()
Enums
InputFormat.AUTO / .DTC / .VCF / .BCF
OutputFormat.VCF / .BCF / .PLINK
Sex.MALE / .FEMALE
Assembly.GRCH37 / .GRCH38 # plus a `.parse()` classmethod that
# accepts 'hg19' / 'hg38' / 'build38' / ...
Output
The Rust tool writes <stem>_report.json alongside the main output.
The wrapper loads it into ConversionResult, with sub-dataclasses for
each section:
result.input # InputInfo (path, format, origin)
result.output # OutputInfo (path, format)
result.reference # ReferenceInfo (path, origin, assembly)
result.panel # PanelInfo | None
result.sample # SampleInfo (id, sex, sex_inferred)
result.build_detection # BuildDetection | None (detected_build, match rates)
result.statistics # Statistics (total / emitted / variant / ... records)
result.report_path # path to the JSON sidecar
result.output_paths # tuple[Path] — files that actually exist on disk
For PLINK output, output_paths includes the .bed/.bim/.fam trio. For
output_dir with a panel, it includes panel.vcf. Non-existent paths
are filtered out automatically.
Errors
ConvertGenomeBinaryNotFound— CLI not installed / not on PATH.InvalidConfig— argument combination rejected before launching (e.g. missing input file, conflicting output/output_dir).ConvertGenomeFailed— CLI exited non-zero. The exception carriesstdout,stderr,returncode.ReportNotFound— CLI ran clean but didn't write a JSON sidecar.
All subclass ConvertGenomeError.
Metadata
Release files for convert-genome 0.3.3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| convert_genome-0.3.3.tar.gz | 255.4 kB | Details |
Built distributions (wheels)
| File | Reset | |||
|---|---|---|---|---|
| convert_genome-0.3.3-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl | CPython 3.9 | abi3 | Linux glibc 2.17+ x86-64 | Details |
| convert_genome-0.3.3-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl | CPython 3.9 | abi3 | Linux glibc 2.17+ ARM64 | Details |
| convert_genome-0.3.3-cp39-abi3-macosx_11_0_arm64.whl | CPython 3.9 | abi3 | macOS 11.0+ ARM64 | Details |
| convert_genome-0.3.3-cp39-abi3-macosx_10_12_x86_64.whl | CPython 3.9 | abi3 | macOS 10.12+ x86-64 | Details |
Total release size: 18.9 MB
Release files / convert_genome-0.3.3.tar.gz
| Download URL | convert_genome-0.3.3.tar.gz |
|---|---|
| Size | 255.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
7d3f4a029e248b003b4c16ca3d7d7b0634d6c9e9147e3cda0bf4d75ef99a021c
|
|
BLAKE2b-256 checksum How to use checksums |
6669bb6d4fd7058d30c343af4768a3a0eff42be2dd0c06aac6a7dcbeaacc31d7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.7
|
Release files / convert_genome-0.3.3-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | convert_genome-0.3.3-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 4.8 MB |
| Tags | CPython 3.9 Linux glibc 2.17+ x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
adfd01f302103f63a457a596432dd8deb6cd0937a7d884cec72ca26a73cf56c0
|
|
BLAKE2b-256 checksum How to use checksums |
cd8ced4bcdea1b1b9ddb9073bac37c1c97d2b01a62ab4881d11989a251315721
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.7
|
Release files / convert_genome-0.3.3-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
| Download URL | convert_genome-0.3.3-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl |
|---|---|
| Size | 5.0 MB |
| Tags | CPython 3.9 Linux glibc 2.17+ ARM64 abi3 |
|
SHA-256 checksum How to use checksums |
4b31d62089dec262de7cd1cc6cdbcc0357e712a88f194d582b50a3abc1194924
|
|
BLAKE2b-256 checksum How to use checksums |
5c0560090bd47f394ad6b2f75e899faea9bda513e82cf07c5f15eb997acc1221
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.7
|
Release files / convert_genome-0.3.3-cp39-abi3-macosx_11_0_arm64.whl
| Download URL | convert_genome-0.3.3-cp39-abi3-macosx_11_0_arm64.whl |
|---|---|
| Size | 4.5 MB |
| Tags | CPython 3.9 abi3 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
39cc4b861b80a397cb74d31de271548c976566c5ee02172033f7719e4101c0b7
|
|
BLAKE2b-256 checksum How to use checksums |
2f0e04c459f8110ba744f852412295178f8a2244303ab5cd8f544c0a135acc27
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.7
|
Release files / convert_genome-0.3.3-cp39-abi3-macosx_10_12_x86_64.whl
| Download URL | convert_genome-0.3.3-cp39-abi3-macosx_10_12_x86_64.whl |
|---|---|
| Size | 4.3 MB |
| Tags | CPython 3.9 abi3 macOS 10.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
379f9f55c23c29a02c68266d506e8a8666a323650ac77dcffbec377a7e8ffa49
|
|
BLAKE2b-256 checksum How to use checksums |
4a41c50fff8e92f240c8fe494ba5ccf5833958db93ad3f150f6b2a9abdcfcb4d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.7
|