pto-core 0.1.6__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- pto_core-0.1.6/.clang-format +30 -0
- pto_core-0.1.6/.dockerignore +48 -0
- pto_core-0.1.6/.gitignore +32 -0
- pto_core-0.1.6/.pre-commit-config.yaml +59 -0
- pto_core-0.1.6/CITATION.cff +30 -0
- pto_core-0.1.6/CLAUDE.md +606 -0
- pto_core-0.1.6/CMakeLists.txt +144 -0
- pto_core-0.1.6/CONTRIBUTING.md +212 -0
- pto_core-0.1.6/LICENSE +21 -0
- pto_core-0.1.6/PKG-INFO +283 -0
- pto_core-0.1.6/README.md +565 -0
- pto_core-0.1.6/SECURITY.md +92 -0
- pto_core-0.1.6/THIRD_PARTY_LICENSES.md +87 -0
- pto_core-0.1.6/cmake/PtoOpenMP.cmake +149 -0
- pto_core-0.1.6/deploy/Dockerfile +117 -0
- pto_core-0.1.6/deploy/README.md +111 -0
- pto_core-0.1.6/deploy/docker-compose.yml +76 -0
- pto_core-0.1.6/deploy/entrypoint.sh +64 -0
- pto_core-0.1.6/deploy/provision_aws.sh +171 -0
- pto_core-0.1.6/docker/Dockerfile.tsan +99 -0
- pto_core-0.1.6/docker/tsan.supp +165 -0
- pto_core-0.1.6/docker/ubsan.supp +88 -0
- pto_core-0.1.6/docs/AUDIT_2026-09-11_cuttag_profiler.md +196 -0
- pto_core-0.1.6/docs/AUDIT_2026-09-11_fastq_stream.md +297 -0
- pto_core-0.1.6/docs/AUDIT_2026-09-11_genomic_toolkit.md +277 -0
- pto_core-0.1.6/docs/AUDIT_2026-09-11_scrna_matrix.md +871 -0
- pto_core-0.1.6/docs/DEMO.md +283 -0
- pto_core-0.1.6/docs/DESIGN_EXTENSIONS_2026-08-16.md +1014 -0
- pto_core-0.1.6/docs/EXTERNAL_REVIEW_2026-08-21.md +129 -0
- pto_core-0.1.6/docs/OPTIMIZATION_REPORT_2026.md +416 -0
- pto_core-0.1.6/docs/PERFORMANCE_2026-08-15.md +291 -0
- pto_core-0.1.6/docs/PERFORMANCE_AUDIT_2026-08-17.json +444 -0
- pto_core-0.1.6/docs/PERFORMANCE_AUDIT_2026-08-17.md +108 -0
- pto_core-0.1.6/docs/REVIEW_2026-08-15.md +1367 -0
- pto_core-0.1.6/docs/SECURITY_HTTP_2026-08-15.md +1291 -0
- pto_core-0.1.6/docs/TORTURE_2026-08-17.md +350 -0
- pto_core-0.1.6/docs/TORTURE_2026-09-10.md +470 -0
- pto_core-0.1.6/manuscript/main.pdf +0 -0
- pto_core-0.1.6/manuscript/main.tex +1148 -0
- pto_core-0.1.6/manuscript/numbers.tex +265 -0
- pto_core-0.1.6/manuscript/table_audit_summary.tex +44 -0
- pto_core-0.1.6/manuscript/table_concordance_exactness.tex +28 -0
- pto_core-0.1.6/manuscript/table_pareto_benchmarks.tex +42 -0
- pto_core-0.1.6/manuscript/table_peak_concordance.tex +48 -0
- pto_core-0.1.6/modules/cuttag_profiler/.clang-format +5 -0
- pto_core-0.1.6/modules/cuttag_profiler/.gitignore +37 -0
- pto_core-0.1.6/modules/cuttag_profiler/CMakeLists.txt +409 -0
- pto_core-0.1.6/modules/cuttag_profiler/README.md +378 -0
- pto_core-0.1.6/modules/cuttag_profiler/cmake/assert_server_linkage.cmake +79 -0
- pto_core-0.1.6/modules/cuttag_profiler/cmake/embed_assets.cmake +80 -0
- pto_core-0.1.6/modules/cuttag_profiler/include/profiler/bam_reader.hpp +169 -0
- pto_core-0.1.6/modules/cuttag_profiler/include/profiler/bed_reader.hpp +98 -0
- pto_core-0.1.6/modules/cuttag_profiler/include/profiler/file_identity.hpp +92 -0
- pto_core-0.1.6/modules/cuttag_profiler/include/profiler/http_security.hpp +86 -0
- pto_core-0.1.6/modules/cuttag_profiler/include/profiler/http_server.hpp +127 -0
- pto_core-0.1.6/modules/cuttag_profiler/include/profiler/interval_index.hpp +321 -0
- pto_core-0.1.6/modules/cuttag_profiler/include/profiler/matrix_cache.hpp +178 -0
- pto_core-0.1.6/modules/cuttag_profiler/include/profiler/safe_open.hpp +79 -0
- pto_core-0.1.6/modules/cuttag_profiler/include/profiler/secrets.hpp +75 -0
- pto_core-0.1.6/modules/cuttag_profiler/include/profiler/signal_calc.hpp +47 -0
- pto_core-0.1.6/modules/cuttag_profiler/include/profiler/tsv_format.hpp +97 -0
- pto_core-0.1.6/modules/cuttag_profiler/include/profiler/types.hpp +286 -0
- pto_core-0.1.6/modules/cuttag_profiler/include/profiler/worker_abort.hpp +90 -0
- pto_core-0.1.6/modules/cuttag_profiler/scripts/benchmark.sh +181 -0
- pto_core-0.1.6/modules/cuttag_profiler/scripts/build_htslib_minimal.sh +106 -0
- pto_core-0.1.6/modules/cuttag_profiler/scripts/compare_matrices.py +152 -0
- pto_core-0.1.6/modules/cuttag_profiler/scripts/make_demo_data.py +129 -0
- pto_core-0.1.6/modules/cuttag_profiler/scripts/test_cli.sh +155 -0
- pto_core-0.1.6/modules/cuttag_profiler/src/bam_reader.cpp +398 -0
- pto_core-0.1.6/modules/cuttag_profiler/src/bed_reader.cpp +345 -0
- pto_core-0.1.6/modules/cuttag_profiler/src/embedded_assets.hpp +19 -0
- pto_core-0.1.6/modules/cuttag_profiler/src/http_server.cpp +879 -0
- pto_core-0.1.6/modules/cuttag_profiler/src/main.cpp +447 -0
- pto_core-0.1.6/modules/cuttag_profiler/src/safe_open.cpp +107 -0
- pto_core-0.1.6/modules/cuttag_profiler/src/secrets.cpp +92 -0
- pto_core-0.1.6/modules/cuttag_profiler/src/signal_calc.cpp +510 -0
- pto_core-0.1.6/modules/cuttag_profiler/third_party/httplib/httplib.h +10255 -0
- pto_core-0.1.6/modules/cuttag_profiler/third_party/nlohmann/json.hpp +24765 -0
- pto_core-0.1.6/modules/cuttag_profiler/web/index.html +1194 -0
- pto_core-0.1.6/modules/cuttag_profiler/web/src/README.md +56 -0
- pto_core-0.1.6/modules/fastq_stream/.clang-format +5 -0
- pto_core-0.1.6/modules/fastq_stream/.gitignore +10 -0
- pto_core-0.1.6/modules/fastq_stream/CMakeLists.txt +195 -0
- pto_core-0.1.6/modules/fastq_stream/LICENSE +21 -0
- pto_core-0.1.6/modules/fastq_stream/README.md +268 -0
- pto_core-0.1.6/modules/fastq_stream/include/fastq_stream/adapter_trimmer.hpp +137 -0
- pto_core-0.1.6/modules/fastq_stream/include/fastq_stream/buffer.hpp +159 -0
- pto_core-0.1.6/modules/fastq_stream/include/fastq_stream/file_identity.hpp +91 -0
- pto_core-0.1.6/modules/fastq_stream/include/fastq_stream/hts_input.hpp +108 -0
- pto_core-0.1.6/modules/fastq_stream/include/fastq_stream/lockfree_queue.hpp +106 -0
- pto_core-0.1.6/modules/fastq_stream/include/fastq_stream/phred_calculator.hpp +408 -0
- pto_core-0.1.6/modules/fastq_stream/include/fastq_stream/pipeline.hpp +199 -0
- pto_core-0.1.6/modules/fastq_stream/include/fastq_stream/reader.hpp +81 -0
- pto_core-0.1.6/modules/fastq_stream/include/fastq_stream/record.hpp +89 -0
- pto_core-0.1.6/modules/fastq_stream/include/fastq_stream/report.hpp +265 -0
- pto_core-0.1.6/modules/fastq_stream/include/fastq_stream/simd.hpp +712 -0
- pto_core-0.1.6/modules/fastq_stream/scripts/download_giab_data.sh +152 -0
- pto_core-0.1.6/modules/fastq_stream/scripts/run_benchmarks.py +317 -0
- pto_core-0.1.6/modules/fastq_stream/src/hts_input.cpp +383 -0
- pto_core-0.1.6/modules/fastq_stream/src/main.cpp +352 -0
- pto_core-0.1.6/modules/fastq_stream/src/pipeline.cpp +647 -0
- pto_core-0.1.6/modules/fastq_stream/src/reader.cpp +382 -0
- pto_core-0.1.6/modules/genomic_toolkit/.clang-format +5 -0
- pto_core-0.1.6/modules/genomic_toolkit/.gitignore +4 -0
- pto_core-0.1.6/modules/genomic_toolkit/CMakeLists.txt +186 -0
- pto_core-0.1.6/modules/genomic_toolkit/README.md +240 -0
- pto_core-0.1.6/modules/genomic_toolkit/include/toolkit/cli_args.hpp +46 -0
- pto_core-0.1.6/modules/genomic_toolkit/include/toolkit/contig_dict.hpp +105 -0
- pto_core-0.1.6/modules/genomic_toolkit/include/toolkit/dup_marker.hpp +268 -0
- pto_core-0.1.6/modules/genomic_toolkit/include/toolkit/file_identity.hpp +93 -0
- pto_core-0.1.6/modules/genomic_toolkit/include/toolkit/fragment_stream.hpp +109 -0
- pto_core-0.1.6/modules/genomic_toolkit/include/toolkit/frip.hpp +191 -0
- pto_core-0.1.6/modules/genomic_toolkit/include/toolkit/peak_set.hpp +319 -0
- pto_core-0.1.6/modules/genomic_toolkit/include/toolkit/types.hpp +291 -0
- pto_core-0.1.6/modules/genomic_toolkit/scripts/test_cli.sh +176 -0
- pto_core-0.1.6/modules/genomic_toolkit/scripts/validate_against_bedtools.sh +77 -0
- pto_core-0.1.6/modules/genomic_toolkit/scripts/validate_bam_contig_order.sh +82 -0
- pto_core-0.1.6/modules/genomic_toolkit/scripts/validate_region_partition.sh +124 -0
- pto_core-0.1.6/modules/genomic_toolkit/src/fragment_stream.cpp +503 -0
- pto_core-0.1.6/modules/genomic_toolkit/src/frip.cpp +70 -0
- pto_core-0.1.6/modules/genomic_toolkit/src/line_reader.hpp +171 -0
- pto_core-0.1.6/modules/genomic_toolkit/src/main.cpp +467 -0
- pto_core-0.1.6/modules/peaks/.clang-format +5 -0
- pto_core-0.1.6/modules/peaks/CMakeLists.txt +197 -0
- pto_core-0.1.6/modules/peaks/CONCORDANCE.md +242 -0
- pto_core-0.1.6/modules/peaks/README.md +232 -0
- pto_core-0.1.6/modules/peaks/include/peaks/bam_streamer.hpp +702 -0
- pto_core-0.1.6/modules/peaks/include/peaks/caller.hpp +667 -0
- pto_core-0.1.6/modules/peaks/include/peaks/file_identity.hpp +93 -0
- pto_core-0.1.6/modules/peaks/include/peaks/poisson_model.hpp +1891 -0
- pto_core-0.1.6/modules/peaks/include/peaks/sliding_window.hpp +445 -0
- pto_core-0.1.6/modules/peaks/scripts/gen_poisson_golden.py +120 -0
- pto_core-0.1.6/modules/peaks/scripts/test_cli.sh +499 -0
- pto_core-0.1.6/modules/peaks/scripts/validate_macs_concordance.py +300 -0
- pto_core-0.1.6/modules/peaks/src/main.cpp +879 -0
- pto_core-0.1.6/modules/scrna_matrix/.clang-format +5 -0
- pto_core-0.1.6/modules/scrna_matrix/CMakeLists.txt +342 -0
- pto_core-0.1.6/modules/scrna_matrix/README.md +332 -0
- pto_core-0.1.6/modules/scrna_matrix/examples/scanpy_integration.ipynb +1006 -0
- pto_core-0.1.6/modules/scrna_matrix/examples/scrna_anndata.py +287 -0
- pto_core-0.1.6/modules/scrna_matrix/include/matrix/block_csr.hpp +438 -0
- pto_core-0.1.6/modules/scrna_matrix/include/matrix/hnsw_index.hpp +991 -0
- pto_core-0.1.6/modules/scrna_matrix/include/matrix/knn_graph.hpp +686 -0
- pto_core-0.1.6/modules/scrna_matrix/include/matrix/simd_math.hpp +874 -0
- pto_core-0.1.6/modules/scrna_matrix/pyproject.toml +140 -0
- pto_core-0.1.6/modules/scrna_matrix/python/scrna_matrix/__init__.py +62 -0
- pto_core-0.1.6/modules/scrna_matrix/src/python_bindings.cpp +737 -0
- pto_core-0.1.6/packaging/README.md +259 -0
- pto_core-0.1.6/packaging/pto/__init__.py +106 -0
- pto_core-0.1.6/packaging/pto/_binaries.py +117 -0
- pto_core-0.1.6/packaging/pto/_cpu.py +83 -0
- pto_core-0.1.6/packaging/pto/_manual.py +164 -0
- pto_core-0.1.6/packaging/pto/_run.py +200 -0
- pto_core-0.1.6/packaging/pto/api.py +536 -0
- pto_core-0.1.6/packaging/pto/cli.py +385 -0
- pto_core-0.1.6/packaging/pto/errors.py +61 -0
- pto_core-0.1.6/packaging/scripts/build_htslib_manylinux.sh +115 -0
- pto_core-0.1.6/packaging/tests/conftest.py +165 -0
- pto_core-0.1.6/packaging/tests/test_api.py +878 -0
- pto_core-0.1.6/packaging/tests/test_cli.py +78 -0
- pto_core-0.1.6/packaging/tests/test_manual.py +134 -0
- pto_core-0.1.6/pyproject.toml +343 -0
- pto_core-0.1.6/scripts/benchmark_audit.py +1080 -0
- pto_core-0.1.6/scripts/run_demo.sh +344 -0
- pto_core-0.1.6/scripts/run_tsan.sh +316 -0
- pto_core-0.1.6/tests/validation/README.md +179 -0
- pto_core-0.1.6/tests/validation/datasets.json +182 -0
- pto_core-0.1.6/tests/validation/pto_validation/__init__.py +15 -0
- pto_core-0.1.6/tests/validation/pto_validation/cases/__init__.py +8 -0
- pto_core-0.1.6/tests/validation/pto_validation/cases/cuttag_profiler.py +320 -0
- pto_core-0.1.6/tests/validation/pto_validation/cases/fastq_stream.py +262 -0
- pto_core-0.1.6/tests/validation/pto_validation/cases/genomic_toolkit.py +309 -0
- pto_core-0.1.6/tests/validation/pto_validation/cases/scrna_matrix.py +345 -0
- pto_core-0.1.6/tests/validation/pto_validation/config.py +225 -0
- pto_core-0.1.6/tests/validation/pto_validation/fetch.py +261 -0
- pto_core-0.1.6/tests/validation/pto_validation/harness.py +186 -0
- pto_core-0.1.6/tests/validation/pto_validation/metrics.py +245 -0
- pto_core-0.1.6/tests/validation/pto_validation/report.py +369 -0
- pto_core-0.1.6/tests/validation/pto_validation/tools.py +246 -0
- pto_core-0.1.6/tests/validation/run_validation.py +271 -0
- pto_core-0.1.6/tests/validation/test_metrics.py +173 -0
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# Shared clang-format defaults for pto-core's five independently-developed
|
|
2
|
+
# modules. This is formatting policy, not code, so it does not conflict with
|
|
3
|
+
# CLAUDE.md's "no shared layer" rule -- each module still fully owns its own
|
|
4
|
+
# style via modules/<name>/.clang-format, which inherits this file and
|
|
5
|
+
# overrides only what that module has always done differently (indent
|
|
6
|
+
# width; see the per-module files for the rest).
|
|
7
|
+
#
|
|
8
|
+
# Deliberately conservative otherwise. This repository's headers carry long,
|
|
9
|
+
# carefully written prose comments (see CLAUDE.md and any docs/AUDIT_*.md /
|
|
10
|
+
# docs/TORTURE_*.md for why) and SIMD/BGZF code where a line break is
|
|
11
|
+
# sometimes chosen for a reason a formatter can't see. ReflowComments and
|
|
12
|
+
# SortIncludes are off so the tool only ever touches indentation, brace
|
|
13
|
+
# placement and pointer/reference alignment -- never comment text or
|
|
14
|
+
# include order.
|
|
15
|
+
#
|
|
16
|
+
# Vendored third-party code (modules/*/third_party/) is excluded entirely
|
|
17
|
+
# via .pre-commit-config.yaml, not here: clang-format has no per-directory
|
|
18
|
+
# disable, only per-directory style, and giving vendored code a style here
|
|
19
|
+
# would imply an opinion about code this project does not own.
|
|
20
|
+
BasedOnStyle: LLVM
|
|
21
|
+
ColumnLimit: 100
|
|
22
|
+
PointerAlignment: Left
|
|
23
|
+
ReferenceAlignment: Left
|
|
24
|
+
NamespaceIndentation: None
|
|
25
|
+
ReflowComments: false
|
|
26
|
+
SortIncludes: false
|
|
27
|
+
AllowShortIfStatementsOnASingleLine: WithoutElse
|
|
28
|
+
AllowShortLoopsOnASingleLine: true
|
|
29
|
+
SpacesBeforeTrailingComments: 2
|
|
30
|
+
AlwaysBreakTemplateDeclarations: Yes
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# Keep the TSan build context small and reproducible.
|
|
2
|
+
# The image builds from source; it needs no build trees, no binary fixtures and
|
|
3
|
+
# no local caches. modules/cuttag_profiler/data alone is ~100 MB of BAM.
|
|
4
|
+
**/build
|
|
5
|
+
**/build-*
|
|
6
|
+
build-tsan
|
|
7
|
+
.git
|
|
8
|
+
**/.git
|
|
9
|
+
**/__pycache__
|
|
10
|
+
**/*.pyc
|
|
11
|
+
**/.DS_Store
|
|
12
|
+
**/.claude
|
|
13
|
+
|
|
14
|
+
# Large binary test fixtures. cuttag_profiler's suites synthesise their own BAMs
|
|
15
|
+
# via TempBam, so these are only needed for manual benchmarking.
|
|
16
|
+
# modules/cuttag_profiler/data (kept: deploy/ seeds demo fixtures from it)
|
|
17
|
+
modules/cuttag_profiler/results
|
|
18
|
+
modules/cuttag_profiler/docs/*.pdf
|
|
19
|
+
|
|
20
|
+
# Notebook outputs and generated docs.
|
|
21
|
+
**/*.ipynb_checkpoints
|
|
22
|
+
|
|
23
|
+
# Demo outputs (regenerated by scripts/run_demo.sh).
|
|
24
|
+
demo-out
|
|
25
|
+
|
|
26
|
+
# Virtualenvs. Never needed in an image (both Dockerfiles install their own
|
|
27
|
+
# dependencies) and easily the largest thing in a developer's tree after the
|
|
28
|
+
# build directories -- pto-core/venv alone is ~165 MB.
|
|
29
|
+
venv
|
|
30
|
+
.venv
|
|
31
|
+
**/venv
|
|
32
|
+
**/.venv
|
|
33
|
+
|
|
34
|
+
# Terraform provider binaries. `terraform init` leaves ~1.4 GB under
|
|
35
|
+
# pto-cloud/infra/.terraform, and the MVP image builds with the REPOSITORY
|
|
36
|
+
# ROOT as its context (mvp/docker-compose.yml sets `context: ../..`, because
|
|
37
|
+
# it needs pto-core/ and pto-cloud/mvp/ which are siblings). Without this the
|
|
38
|
+
# daemon is handed the whole provider cache on every build.
|
|
39
|
+
#
|
|
40
|
+
# State files are excluded for a different reason: the callback token is
|
|
41
|
+
# generated by `random_password` and lives in state, so a state file must
|
|
42
|
+
# never reach an image layer.
|
|
43
|
+
**/.terraform
|
|
44
|
+
**/*.tfstate
|
|
45
|
+
**/*.tfstate.*
|
|
46
|
+
|
|
47
|
+
# Test caches.
|
|
48
|
+
**/.pytest_cache
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# Build trees. CMake output is regenerable and host-specific; never commit it.
|
|
2
|
+
build/
|
|
3
|
+
build-*/
|
|
4
|
+
cmake-build-*/
|
|
5
|
+
|
|
6
|
+
# Demo and benchmark outputs (scripts/run_demo.sh, scripts/benchmark.sh).
|
|
7
|
+
demo-out/
|
|
8
|
+
results/
|
|
9
|
+
|
|
10
|
+
# Datasets pulled or generated at run time. scanpy writes sc.datasets.* into
|
|
11
|
+
# ./data at the repo root.
|
|
12
|
+
#
|
|
13
|
+
# Anchored with a leading slash on purpose: an unanchored `data/` also matches
|
|
14
|
+
# modules/cuttag_profiler/data/, which holds the checked-in demo.bam that
|
|
15
|
+
# scripts/run_demo.sh and deploy/ both depend on. (That module has its own
|
|
16
|
+
# .gitignore excluding them already -- a separate decision about ~100 MB of
|
|
17
|
+
# binary fixtures, not one to make accidentally from the root.)
|
|
18
|
+
/data/
|
|
19
|
+
*.h5ad
|
|
20
|
+
|
|
21
|
+
# Python environments and caches.
|
|
22
|
+
venv/
|
|
23
|
+
.venv/
|
|
24
|
+
__pycache__/
|
|
25
|
+
*.py[cod]
|
|
26
|
+
.pytest_cache/
|
|
27
|
+
.ipynb_checkpoints/
|
|
28
|
+
|
|
29
|
+
# Editor / OS detritus.
|
|
30
|
+
.DS_Store
|
|
31
|
+
*.swp
|
|
32
|
+
compile_commands.json
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# Repository hygiene, not correctness -- these hooks catch trailing
|
|
2
|
+
# whitespace, missing newlines, and formatting drift. They do not replace
|
|
3
|
+
# `ctest`, the sanitizer builds, or `pytest`; see CONTRIBUTING.md for those.
|
|
4
|
+
#
|
|
5
|
+
# Install once per clone with:
|
|
6
|
+
# pip install pre-commit && pre-commit install
|
|
7
|
+
#
|
|
8
|
+
# Run against the whole tree (not just staged files) with:
|
|
9
|
+
# pre-commit run --all-files
|
|
10
|
+
repos:
|
|
11
|
+
- repo: https://github.com/pre-commit/pre-commit-hooks
|
|
12
|
+
rev: v6.0.0
|
|
13
|
+
hooks:
|
|
14
|
+
- id: trailing-whitespace
|
|
15
|
+
exclude: &third_party '^modules/[^/]+/third_party/'
|
|
16
|
+
- id: end-of-file-fixer
|
|
17
|
+
exclude: *third_party
|
|
18
|
+
- id: check-yaml
|
|
19
|
+
- id: check-added-large-files
|
|
20
|
+
# demo.bam (~8.6 MB) is a deliberate, already-reviewed checked-in
|
|
21
|
+
# fixture -- see modules/cuttag_profiler/.gitignore's own comment.
|
|
22
|
+
# This threshold is about catching an ACCIDENTAL large add (a stray
|
|
23
|
+
# build artifact, a BAM someone forgot to .gitignore), not that file.
|
|
24
|
+
args: ['--maxkb=1024']
|
|
25
|
+
exclude: '^modules/cuttag_profiler/data/'
|
|
26
|
+
|
|
27
|
+
# Python: packaging/pto/ (the pto-core CLI and API), scripts/, tests/validation/.
|
|
28
|
+
# Notebooks are excluded: ruff lints them by default, and E402 (import not
|
|
29
|
+
# at the top) is a false positive against normal notebook style, where a
|
|
30
|
+
# setup cell before the imports cell is the norm, not a hygiene lapse.
|
|
31
|
+
# `types: [python]` on ruff-format specifically (overriding its default,
|
|
32
|
+
# which also reaches into fenced ```python blocks in Markdown) because
|
|
33
|
+
# README.md and packaging/README.md carry Python examples with deliberate,
|
|
34
|
+
# non-default spacing for visual alignment -- confirmed with
|
|
35
|
+
# `ruff format --diff packaging/README.md` while writing this file.
|
|
36
|
+
- repo: https://github.com/astral-sh/ruff-pre-commit
|
|
37
|
+
rev: v0.16.8
|
|
38
|
+
hooks:
|
|
39
|
+
- id: ruff
|
|
40
|
+
args: ['--fix']
|
|
41
|
+
exclude: &py_exclude '^modules/[^/]+/third_party/|\.ipynb$'
|
|
42
|
+
- id: ruff-format
|
|
43
|
+
types: [python]
|
|
44
|
+
exclude: *py_exclude
|
|
45
|
+
|
|
46
|
+
# C++: each module carries its own modules/<name>/.clang-format, inheriting
|
|
47
|
+
# shared conservative settings from the root .clang-format (see that
|
|
48
|
+
# file's header comment) and overriding only indent width -- the five
|
|
49
|
+
# modules were developed independently and were never on one convention.
|
|
50
|
+
# Vendored code is excluded entirely: it isn't ours to reformat, and
|
|
51
|
+
# clang-format has no per-directory "leave alone", only per-directory
|
|
52
|
+
# style, so exclusion belongs here rather than in a third .clang-format
|
|
53
|
+
# pretending to have an opinion about code this project doesn't own.
|
|
54
|
+
- repo: https://github.com/pre-commit/mirrors-clang-format
|
|
55
|
+
rev: v23.1.1
|
|
56
|
+
hooks:
|
|
57
|
+
- id: clang-format
|
|
58
|
+
types_or: [c++, c]
|
|
59
|
+
exclude: *third_party
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
cff-version: 1.2.0
|
|
2
|
+
message: >-
|
|
3
|
+
If you use this software, please cite it using the metadata below.
|
|
4
|
+
title: "pto-core: High-Throughput Omics C++ Engine and Python Interface"
|
|
5
|
+
abstract: >-
|
|
6
|
+
Five independently-developed C++20 engines for single-cell and epigenomic
|
|
7
|
+
data, vendored into one repository so they can be built, tested and
|
|
8
|
+
reviewed together: streaming FASTQ QC and adapter/quality trimming
|
|
9
|
+
(fastq_stream), streaming fragment QC with duplicate rate and FRiP
|
|
10
|
+
(genomic_toolkit), CUT&Tag/CUT&RUN reference-point signal profiling
|
|
11
|
+
(cuttag_profiler), a streaming epigenomic peak caller (peaks), and a
|
|
12
|
+
cache-aligned sparse-matrix engine with SIMD and HNSW k-NN for single-cell
|
|
13
|
+
analysis (scrna_matrix). Each tool runs on the machine that already holds
|
|
14
|
+
the sequencing data, with no service dependency and no data leaving the
|
|
15
|
+
host. The Python interface is distributed as the `pto-core` package
|
|
16
|
+
(`scrna-matrix` ships separately due to its OpenMP requirement).
|
|
17
|
+
type: software
|
|
18
|
+
authors:
|
|
19
|
+
- name: "pto-core contributors"
|
|
20
|
+
repository-code: "https://github.com/chrisaperez/pto-core"
|
|
21
|
+
url: "https://github.com/chrisaperez/pto-core"
|
|
22
|
+
license: MIT
|
|
23
|
+
version: 0.1.5
|
|
24
|
+
date-released: "2026-09-11"
|
|
25
|
+
keywords:
|
|
26
|
+
- bioinformatics
|
|
27
|
+
- genomics
|
|
28
|
+
- cpp
|
|
29
|
+
- single-cell
|
|
30
|
+
- hpc
|