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.
Files changed (181) hide show
  1. pto_core-0.1.6/.clang-format +30 -0
  2. pto_core-0.1.6/.dockerignore +48 -0
  3. pto_core-0.1.6/.gitignore +32 -0
  4. pto_core-0.1.6/.pre-commit-config.yaml +59 -0
  5. pto_core-0.1.6/CITATION.cff +30 -0
  6. pto_core-0.1.6/CLAUDE.md +606 -0
  7. pto_core-0.1.6/CMakeLists.txt +144 -0
  8. pto_core-0.1.6/CONTRIBUTING.md +212 -0
  9. pto_core-0.1.6/LICENSE +21 -0
  10. pto_core-0.1.6/PKG-INFO +283 -0
  11. pto_core-0.1.6/README.md +565 -0
  12. pto_core-0.1.6/SECURITY.md +92 -0
  13. pto_core-0.1.6/THIRD_PARTY_LICENSES.md +87 -0
  14. pto_core-0.1.6/cmake/PtoOpenMP.cmake +149 -0
  15. pto_core-0.1.6/deploy/Dockerfile +117 -0
  16. pto_core-0.1.6/deploy/README.md +111 -0
  17. pto_core-0.1.6/deploy/docker-compose.yml +76 -0
  18. pto_core-0.1.6/deploy/entrypoint.sh +64 -0
  19. pto_core-0.1.6/deploy/provision_aws.sh +171 -0
  20. pto_core-0.1.6/docker/Dockerfile.tsan +99 -0
  21. pto_core-0.1.6/docker/tsan.supp +165 -0
  22. pto_core-0.1.6/docker/ubsan.supp +88 -0
  23. pto_core-0.1.6/docs/AUDIT_2026-09-11_cuttag_profiler.md +196 -0
  24. pto_core-0.1.6/docs/AUDIT_2026-09-11_fastq_stream.md +297 -0
  25. pto_core-0.1.6/docs/AUDIT_2026-09-11_genomic_toolkit.md +277 -0
  26. pto_core-0.1.6/docs/AUDIT_2026-09-11_scrna_matrix.md +871 -0
  27. pto_core-0.1.6/docs/DEMO.md +283 -0
  28. pto_core-0.1.6/docs/DESIGN_EXTENSIONS_2026-08-16.md +1014 -0
  29. pto_core-0.1.6/docs/EXTERNAL_REVIEW_2026-08-21.md +129 -0
  30. pto_core-0.1.6/docs/OPTIMIZATION_REPORT_2026.md +416 -0
  31. pto_core-0.1.6/docs/PERFORMANCE_2026-08-15.md +291 -0
  32. pto_core-0.1.6/docs/PERFORMANCE_AUDIT_2026-08-17.json +444 -0
  33. pto_core-0.1.6/docs/PERFORMANCE_AUDIT_2026-08-17.md +108 -0
  34. pto_core-0.1.6/docs/REVIEW_2026-08-15.md +1367 -0
  35. pto_core-0.1.6/docs/SECURITY_HTTP_2026-08-15.md +1291 -0
  36. pto_core-0.1.6/docs/TORTURE_2026-08-17.md +350 -0
  37. pto_core-0.1.6/docs/TORTURE_2026-09-10.md +470 -0
  38. pto_core-0.1.6/manuscript/main.pdf +0 -0
  39. pto_core-0.1.6/manuscript/main.tex +1148 -0
  40. pto_core-0.1.6/manuscript/numbers.tex +265 -0
  41. pto_core-0.1.6/manuscript/table_audit_summary.tex +44 -0
  42. pto_core-0.1.6/manuscript/table_concordance_exactness.tex +28 -0
  43. pto_core-0.1.6/manuscript/table_pareto_benchmarks.tex +42 -0
  44. pto_core-0.1.6/manuscript/table_peak_concordance.tex +48 -0
  45. pto_core-0.1.6/modules/cuttag_profiler/.clang-format +5 -0
  46. pto_core-0.1.6/modules/cuttag_profiler/.gitignore +37 -0
  47. pto_core-0.1.6/modules/cuttag_profiler/CMakeLists.txt +409 -0
  48. pto_core-0.1.6/modules/cuttag_profiler/README.md +378 -0
  49. pto_core-0.1.6/modules/cuttag_profiler/cmake/assert_server_linkage.cmake +79 -0
  50. pto_core-0.1.6/modules/cuttag_profiler/cmake/embed_assets.cmake +80 -0
  51. pto_core-0.1.6/modules/cuttag_profiler/include/profiler/bam_reader.hpp +169 -0
  52. pto_core-0.1.6/modules/cuttag_profiler/include/profiler/bed_reader.hpp +98 -0
  53. pto_core-0.1.6/modules/cuttag_profiler/include/profiler/file_identity.hpp +92 -0
  54. pto_core-0.1.6/modules/cuttag_profiler/include/profiler/http_security.hpp +86 -0
  55. pto_core-0.1.6/modules/cuttag_profiler/include/profiler/http_server.hpp +127 -0
  56. pto_core-0.1.6/modules/cuttag_profiler/include/profiler/interval_index.hpp +321 -0
  57. pto_core-0.1.6/modules/cuttag_profiler/include/profiler/matrix_cache.hpp +178 -0
  58. pto_core-0.1.6/modules/cuttag_profiler/include/profiler/safe_open.hpp +79 -0
  59. pto_core-0.1.6/modules/cuttag_profiler/include/profiler/secrets.hpp +75 -0
  60. pto_core-0.1.6/modules/cuttag_profiler/include/profiler/signal_calc.hpp +47 -0
  61. pto_core-0.1.6/modules/cuttag_profiler/include/profiler/tsv_format.hpp +97 -0
  62. pto_core-0.1.6/modules/cuttag_profiler/include/profiler/types.hpp +286 -0
  63. pto_core-0.1.6/modules/cuttag_profiler/include/profiler/worker_abort.hpp +90 -0
  64. pto_core-0.1.6/modules/cuttag_profiler/scripts/benchmark.sh +181 -0
  65. pto_core-0.1.6/modules/cuttag_profiler/scripts/build_htslib_minimal.sh +106 -0
  66. pto_core-0.1.6/modules/cuttag_profiler/scripts/compare_matrices.py +152 -0
  67. pto_core-0.1.6/modules/cuttag_profiler/scripts/make_demo_data.py +129 -0
  68. pto_core-0.1.6/modules/cuttag_profiler/scripts/test_cli.sh +155 -0
  69. pto_core-0.1.6/modules/cuttag_profiler/src/bam_reader.cpp +398 -0
  70. pto_core-0.1.6/modules/cuttag_profiler/src/bed_reader.cpp +345 -0
  71. pto_core-0.1.6/modules/cuttag_profiler/src/embedded_assets.hpp +19 -0
  72. pto_core-0.1.6/modules/cuttag_profiler/src/http_server.cpp +879 -0
  73. pto_core-0.1.6/modules/cuttag_profiler/src/main.cpp +447 -0
  74. pto_core-0.1.6/modules/cuttag_profiler/src/safe_open.cpp +107 -0
  75. pto_core-0.1.6/modules/cuttag_profiler/src/secrets.cpp +92 -0
  76. pto_core-0.1.6/modules/cuttag_profiler/src/signal_calc.cpp +510 -0
  77. pto_core-0.1.6/modules/cuttag_profiler/third_party/httplib/httplib.h +10255 -0
  78. pto_core-0.1.6/modules/cuttag_profiler/third_party/nlohmann/json.hpp +24765 -0
  79. pto_core-0.1.6/modules/cuttag_profiler/web/index.html +1194 -0
  80. pto_core-0.1.6/modules/cuttag_profiler/web/src/README.md +56 -0
  81. pto_core-0.1.6/modules/fastq_stream/.clang-format +5 -0
  82. pto_core-0.1.6/modules/fastq_stream/.gitignore +10 -0
  83. pto_core-0.1.6/modules/fastq_stream/CMakeLists.txt +195 -0
  84. pto_core-0.1.6/modules/fastq_stream/LICENSE +21 -0
  85. pto_core-0.1.6/modules/fastq_stream/README.md +268 -0
  86. pto_core-0.1.6/modules/fastq_stream/include/fastq_stream/adapter_trimmer.hpp +137 -0
  87. pto_core-0.1.6/modules/fastq_stream/include/fastq_stream/buffer.hpp +159 -0
  88. pto_core-0.1.6/modules/fastq_stream/include/fastq_stream/file_identity.hpp +91 -0
  89. pto_core-0.1.6/modules/fastq_stream/include/fastq_stream/hts_input.hpp +108 -0
  90. pto_core-0.1.6/modules/fastq_stream/include/fastq_stream/lockfree_queue.hpp +106 -0
  91. pto_core-0.1.6/modules/fastq_stream/include/fastq_stream/phred_calculator.hpp +408 -0
  92. pto_core-0.1.6/modules/fastq_stream/include/fastq_stream/pipeline.hpp +199 -0
  93. pto_core-0.1.6/modules/fastq_stream/include/fastq_stream/reader.hpp +81 -0
  94. pto_core-0.1.6/modules/fastq_stream/include/fastq_stream/record.hpp +89 -0
  95. pto_core-0.1.6/modules/fastq_stream/include/fastq_stream/report.hpp +265 -0
  96. pto_core-0.1.6/modules/fastq_stream/include/fastq_stream/simd.hpp +712 -0
  97. pto_core-0.1.6/modules/fastq_stream/scripts/download_giab_data.sh +152 -0
  98. pto_core-0.1.6/modules/fastq_stream/scripts/run_benchmarks.py +317 -0
  99. pto_core-0.1.6/modules/fastq_stream/src/hts_input.cpp +383 -0
  100. pto_core-0.1.6/modules/fastq_stream/src/main.cpp +352 -0
  101. pto_core-0.1.6/modules/fastq_stream/src/pipeline.cpp +647 -0
  102. pto_core-0.1.6/modules/fastq_stream/src/reader.cpp +382 -0
  103. pto_core-0.1.6/modules/genomic_toolkit/.clang-format +5 -0
  104. pto_core-0.1.6/modules/genomic_toolkit/.gitignore +4 -0
  105. pto_core-0.1.6/modules/genomic_toolkit/CMakeLists.txt +186 -0
  106. pto_core-0.1.6/modules/genomic_toolkit/README.md +240 -0
  107. pto_core-0.1.6/modules/genomic_toolkit/include/toolkit/cli_args.hpp +46 -0
  108. pto_core-0.1.6/modules/genomic_toolkit/include/toolkit/contig_dict.hpp +105 -0
  109. pto_core-0.1.6/modules/genomic_toolkit/include/toolkit/dup_marker.hpp +268 -0
  110. pto_core-0.1.6/modules/genomic_toolkit/include/toolkit/file_identity.hpp +93 -0
  111. pto_core-0.1.6/modules/genomic_toolkit/include/toolkit/fragment_stream.hpp +109 -0
  112. pto_core-0.1.6/modules/genomic_toolkit/include/toolkit/frip.hpp +191 -0
  113. pto_core-0.1.6/modules/genomic_toolkit/include/toolkit/peak_set.hpp +319 -0
  114. pto_core-0.1.6/modules/genomic_toolkit/include/toolkit/types.hpp +291 -0
  115. pto_core-0.1.6/modules/genomic_toolkit/scripts/test_cli.sh +176 -0
  116. pto_core-0.1.6/modules/genomic_toolkit/scripts/validate_against_bedtools.sh +77 -0
  117. pto_core-0.1.6/modules/genomic_toolkit/scripts/validate_bam_contig_order.sh +82 -0
  118. pto_core-0.1.6/modules/genomic_toolkit/scripts/validate_region_partition.sh +124 -0
  119. pto_core-0.1.6/modules/genomic_toolkit/src/fragment_stream.cpp +503 -0
  120. pto_core-0.1.6/modules/genomic_toolkit/src/frip.cpp +70 -0
  121. pto_core-0.1.6/modules/genomic_toolkit/src/line_reader.hpp +171 -0
  122. pto_core-0.1.6/modules/genomic_toolkit/src/main.cpp +467 -0
  123. pto_core-0.1.6/modules/peaks/.clang-format +5 -0
  124. pto_core-0.1.6/modules/peaks/CMakeLists.txt +197 -0
  125. pto_core-0.1.6/modules/peaks/CONCORDANCE.md +242 -0
  126. pto_core-0.1.6/modules/peaks/README.md +232 -0
  127. pto_core-0.1.6/modules/peaks/include/peaks/bam_streamer.hpp +702 -0
  128. pto_core-0.1.6/modules/peaks/include/peaks/caller.hpp +667 -0
  129. pto_core-0.1.6/modules/peaks/include/peaks/file_identity.hpp +93 -0
  130. pto_core-0.1.6/modules/peaks/include/peaks/poisson_model.hpp +1891 -0
  131. pto_core-0.1.6/modules/peaks/include/peaks/sliding_window.hpp +445 -0
  132. pto_core-0.1.6/modules/peaks/scripts/gen_poisson_golden.py +120 -0
  133. pto_core-0.1.6/modules/peaks/scripts/test_cli.sh +499 -0
  134. pto_core-0.1.6/modules/peaks/scripts/validate_macs_concordance.py +300 -0
  135. pto_core-0.1.6/modules/peaks/src/main.cpp +879 -0
  136. pto_core-0.1.6/modules/scrna_matrix/.clang-format +5 -0
  137. pto_core-0.1.6/modules/scrna_matrix/CMakeLists.txt +342 -0
  138. pto_core-0.1.6/modules/scrna_matrix/README.md +332 -0
  139. pto_core-0.1.6/modules/scrna_matrix/examples/scanpy_integration.ipynb +1006 -0
  140. pto_core-0.1.6/modules/scrna_matrix/examples/scrna_anndata.py +287 -0
  141. pto_core-0.1.6/modules/scrna_matrix/include/matrix/block_csr.hpp +438 -0
  142. pto_core-0.1.6/modules/scrna_matrix/include/matrix/hnsw_index.hpp +991 -0
  143. pto_core-0.1.6/modules/scrna_matrix/include/matrix/knn_graph.hpp +686 -0
  144. pto_core-0.1.6/modules/scrna_matrix/include/matrix/simd_math.hpp +874 -0
  145. pto_core-0.1.6/modules/scrna_matrix/pyproject.toml +140 -0
  146. pto_core-0.1.6/modules/scrna_matrix/python/scrna_matrix/__init__.py +62 -0
  147. pto_core-0.1.6/modules/scrna_matrix/src/python_bindings.cpp +737 -0
  148. pto_core-0.1.6/packaging/README.md +259 -0
  149. pto_core-0.1.6/packaging/pto/__init__.py +106 -0
  150. pto_core-0.1.6/packaging/pto/_binaries.py +117 -0
  151. pto_core-0.1.6/packaging/pto/_cpu.py +83 -0
  152. pto_core-0.1.6/packaging/pto/_manual.py +164 -0
  153. pto_core-0.1.6/packaging/pto/_run.py +200 -0
  154. pto_core-0.1.6/packaging/pto/api.py +536 -0
  155. pto_core-0.1.6/packaging/pto/cli.py +385 -0
  156. pto_core-0.1.6/packaging/pto/errors.py +61 -0
  157. pto_core-0.1.6/packaging/scripts/build_htslib_manylinux.sh +115 -0
  158. pto_core-0.1.6/packaging/tests/conftest.py +165 -0
  159. pto_core-0.1.6/packaging/tests/test_api.py +878 -0
  160. pto_core-0.1.6/packaging/tests/test_cli.py +78 -0
  161. pto_core-0.1.6/packaging/tests/test_manual.py +134 -0
  162. pto_core-0.1.6/pyproject.toml +343 -0
  163. pto_core-0.1.6/scripts/benchmark_audit.py +1080 -0
  164. pto_core-0.1.6/scripts/run_demo.sh +344 -0
  165. pto_core-0.1.6/scripts/run_tsan.sh +316 -0
  166. pto_core-0.1.6/tests/validation/README.md +179 -0
  167. pto_core-0.1.6/tests/validation/datasets.json +182 -0
  168. pto_core-0.1.6/tests/validation/pto_validation/__init__.py +15 -0
  169. pto_core-0.1.6/tests/validation/pto_validation/cases/__init__.py +8 -0
  170. pto_core-0.1.6/tests/validation/pto_validation/cases/cuttag_profiler.py +320 -0
  171. pto_core-0.1.6/tests/validation/pto_validation/cases/fastq_stream.py +262 -0
  172. pto_core-0.1.6/tests/validation/pto_validation/cases/genomic_toolkit.py +309 -0
  173. pto_core-0.1.6/tests/validation/pto_validation/cases/scrna_matrix.py +345 -0
  174. pto_core-0.1.6/tests/validation/pto_validation/config.py +225 -0
  175. pto_core-0.1.6/tests/validation/pto_validation/fetch.py +261 -0
  176. pto_core-0.1.6/tests/validation/pto_validation/harness.py +186 -0
  177. pto_core-0.1.6/tests/validation/pto_validation/metrics.py +245 -0
  178. pto_core-0.1.6/tests/validation/pto_validation/report.py +369 -0
  179. pto_core-0.1.6/tests/validation/pto_validation/tools.py +246 -0
  180. pto_core-0.1.6/tests/validation/run_validation.py +271 -0
  181. 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