From 932cf117b8b115130fd12409db57671608ea8454 Mon Sep 17 00:00:00 2001 From: Elizaveta Vlasova Date: Sun, 4 Oct 2026 20:58:13 +0300 Subject: [PATCH] Compact repository front page and add final manuscript schematic --- .github/workflows/tests.yml | 4 +- CITATION.cff | 2 +- README.md | 178 ++++-------------- docs/README.md | 5 +- docs/architecture.md | 4 +- docs/assets.md | 2 +- docs/cluster.md | 6 +- docs/figures/model-schematic.pdf | Bin 0 -> 246796 bytes docs/figures/model-schematic.png | Bin 0 -> 192372 bytes docs/legacy/benchmark_report.md | 10 +- docs/legacy/publication.md | 2 +- docs/migration.md | 6 +- docs/reproduction.md | 6 +- docs/usage.md | 139 ++++++++++++++ pyproject.toml | 3 +- research/README.md | 14 ++ {configs => research/configs}/paper/p.json | 0 {configs => research/configs}/paper/r.json | 0 {configs => research/configs}/paper/rp.json | 0 {configs => research/configs}/paper/rt.json | 0 {configs => research/configs}/paper/rtp.json | 0 {configs => research/configs}/paper/t.json | 0 {configs => research/configs}/paper/tp.json | 0 .../stage_manifest.json | 0 .../experiment_manifest.json | 0 .../experiment_manifest.json | 0 .../rq1-char-r-seed42/experiment_config.json | 0 .../experiment_config.json | 0 .../rq2-char-rp-seed42/experiment_config.json | 0 .../rq2-char-rt-seed42/experiment_config.json | 0 .../experiment_config.json | 0 .../experiment_config.json | 0 .../experiment_manifest.json | 0 .../experiment_manifest.json | 0 .../experiment_config.json | 0 .../experiment_config.json | 0 .../experiment_config.json | 0 .../experiment_config.json | 0 .../experiment_manifest.json | 0 .../experiment_manifest.json | 0 .../validation_results.md | 0 .../environments}/benchmarks.txt | 0 .../environments}/dev.txt | 0 .../environments}/full.txt | 0 .../environments}/runtime.txt | 0 .../examples}/data/sequences.tsv | 0 .../data/viral_antigen_species_2025_07_30.txt | 0 {notebooks => research/notebooks}/README.md | 0 .../architecture_comparison_report.ipynb | 0 .../compare_forward_tokenizers_report.ipynb | 0 .../convergence_curves_by_epoch_report.ipynb | 0 .../analysis/tokenizer_stats_report.ipynb | 0 .../example_inverse_run_and_analysis.ipynb | 0 .../example_run_and_analysis-Copy1.ipynb | 0 .../legacy/example_run_and_analysis.ipynb | 0 ..._background_100k_multichain_analysis.ipynb | 0 .../notebooks}/legacy/generate_datasets.ipynb | 0 ..._background_100k_multichain_analysis.ipynb | 0 .../legacy/pgen_run_and_analysis.ipynb | 0 .../notebooks}/legacy/trb_1kk.ipynb | 0 .../results}/legacy/dataset_summary.json | 0 .../results}/legacy/pgen/pgen_runs.csv | 0 .../results}/legacy/pgen/pgen_summary.csv | 0 .../results}/legacy/pgen/pgen_summary.md | 0 .../legacy/pgen/pretraining_delta.csv | 0 .../legacy/pgen/speed_end_to_end_cpu.csv | 0 .../legacy/pgen/speed_end_to_end_cuda.csv | 0 .../legacy/pgen_constlr/pgen_runs.csv | 0 .../legacy/pgen_constlr/pgen_summary.csv | 0 .../legacy/pgen_constlr/pgen_summary.md | 0 .../legacy/pgen_constlr/pretraining_delta.csv | 0 .../reconstruction/reconstruction_runs.csv | 0 .../reconstruction/reconstruction_summary.csv | 0 .../reconstruction/reconstruction_summary.md | 0 {results => research/results}/paper/README.md | 0 .../results}/paper/architecture_results.tsv | 0 .../paper/downstream_distribution_summary.tsv | 0 .../paper/downstream_per_epitope_controls.tsv | 0 .../paper/downstream_per_epitope_metrics.tsv | 0 .../paper/downstream_rtp_minus_rp_effects.tsv | 0 .../external_author_global_comparison.md | 0 .../external_author_global_comparison.tsv | 0 ...nal_author_global_comparison_manifest.json | 0 .../results}/paper/external_pgen_results.tsv | 0 .../results}/paper/external_pgen_runs.tsv | 0 .../paper/external_reconstruction_results.tsv | 0 .../paper/external_reconstruction_runs.tsv | 0 .../results}/paper/factorial_results.tsv | 0 .../paper/latent_sufficiency_summary.tsv | 0 .../paper/low_label_sequence_summary.tsv | 0 .../results}/paper/provenance_and_hashes.tsv | 0 ...p_data_anchor_error_analysis_by_length.tsv | 0 ...ta_anchor_error_rates_by_target_length.tsv | 0 .../rtp_data_anchor_region_error_rates.tsv | 0 .../rtp_data_anchor_substitution_matrix.tsv | 0 .../rtp_data_anchor_substitution_results.json | 0 .../results}/paper/tokenizer_results.tsv | 0 .../scripts}/legacy/run1_default_40epochs.sh | 0 .../legacy/run2_maxtokenlen9_40epochs.sh | 0 .../scripts/legacy/run3_all_sequential.sh | 4 + .../legacy/run3a_individual_maxlen.sh | 0 .../run3b_individual_maxlen_maxtokenlen9.sh | 0 .../scripts}/legacy/run3c_fixed_maxlen10.sh | 0 .../scripts/legacy/run4_all_sequential.sh | 4 + ...individual_maxlen_maxtokenlen9_anchored.sh | 0 ...al_maxlen_maxtokenlen9_anchored_dropout.sh | 0 .../scripts/legacy/run5_all_sequential.sh | 6 + .../scripts}/legacy/run5a_hidden128.sh | 0 .../scripts}/legacy/run5b_blocks3.sh | 0 .../legacy/run5c_hidden128_blocks3.sh | 0 .../scripts}/legacy/run5d_hidden96_blocks3.sh | 0 .../scripts}/legacy/run_both_sequential.sh | 0 .../scripts}/legacy/run_compare_100k.sh | 0 .../legacy/run_compare_40epochs_upto30k.sh | 0 .../run_compare_finegrid_maxlen9_40epochs.sh | 0 .../run_compare_finegrid_maxlen9_50epochs.sh | 0 .../scripts}/legacy/train_forward.sh | 0 .../scripts}/legacy/train_inverse.sh | 0 .../cache_author_global_embeddings.sbatch | 0 .../cache_author_global_sceptr_cdr3.sbatch | 0 .../cache_external_model_embeddings.sbatch | 0 .../cache_external_residue_embeddings.sbatch | 0 .../scripts}/slurm/data/calc_pgen_1mm.sbatch | 2 +- ...calc_pgen_1mm_background_100k_array.sbatch | 2 +- .../calc_pgen_1mm_trb_background_100k.sbatch | 2 +- .../data/fit_author_global_bottleneck.sbatch | 0 .../data/fit_external_model_bottleneck.sbatch | 0 .../fit_external_residue_pca128_all.sbatch | 0 .../data/fit_external_residue_pca256.sbatch | 0 .../data/fit_external_sceptr_pca128.sbatch | 0 .../install_external_benchmark_runtime.sbatch | 2 +- .../data/install_wordpiece_dependency.sbatch | 0 .../data/prepare_anchored_tokenizers.sbatch | 2 +- .../data/prepare_external_model_cohort.sbatch | 2 +- .../data/prepare_multitask_benchmark.sbatch | 2 +- .../data/prepare_single_aa_challenge.sbatch | 0 .../slurm/data/prepare_trb_joint.sbatch | 0 .../prepare_vdjdb_redcea_clonotypes.sbatch | 6 +- .../prepare_vdjdb_viral_motif_top10.sbatch | 2 +- .../slurm/data/prepare_vdjdb_ylq.sbatch | 0 .../prepare_vdjdb_ylq_motif_pooled.sbatch | 0 .../slurm/data/prepare_wordpiece_rq4.sbatch | 0 .../slurm/data/prepare_wordpiece_sweep.sbatch | 0 .../validate_external_model_cohort.sbatch | 0 .../benchmark_vdjdb_irrm_cpu.sbatch | 0 .../benchmark_vdjdb_irrm_cpu_fixed.sbatch | 0 .../benchmark_vdjdb_irrm_gpu.sbatch | 0 .../benchmark_vdjdb_irrm_gpu_fixed.sbatch | 0 .../benchmark_vdjdb_tcremp_runtime.sbatch | 0 ...gnose_vdjdb_decoded_tcremp_geometry.sbatch | 0 .../evaluate_latent_secondary.sbatch | 4 +- .../evaluate_latent_sufficiency.sbatch | 4 +- ...luate_rtp_data_anchor_length_errors.sbatch | 0 ...ate_rtp_data_anchor_position_errors.sbatch | 0 ...luate_rtp_data_anchor_substitutions.sbatch | 0 ...te_rtp_data_anchor_substitutions_v2.sbatch | 0 .../evaluate_rtp_error_analysis.sbatch | 0 .../evaluate_single_aa_challenge.sbatch | 0 .../evaluate_tcremp_geometry_biology.sbatch | 0 .../evaluate_vdjdb_author_global.sbatch | 0 .../evaluate_vdjdb_decoded_tcremp.sbatch | 0 .../evaluate_vdjdb_epitope_prediction.sbatch | 0 .../evaluation/evaluate_vdjdb_frozen.sbatch | 0 .../evaluate_vdjdb_redcea_clonotypes.sbatch | 0 ...evaluate_vdjdb_tonly_decoded_tcremp.sbatch | 0 .../evaluate_vdjdb_uniform100_tcremp.sbatch | 0 ...uate_vdjdb_uniform100_tcremp_pca128.sbatch | 0 .../evaluate_vdjdb_viral_motif_top10.sbatch | 0 .../evaluate_vdjdb_ylq_frozen.sbatch | 0 .../evaluate_vdjdb_ylq_motif_pooled.sbatch | 0 .../evaluation/run_vdjdb_tcremp_umap.sbatch | 0 .../run_vdjdb_umap_candidates.sbatch | 0 .../run_vdjdb_umap_candidates_runtime.sbatch | 0 .../evaluation/run_vdjdb_uniform100.sbatch | 0 .../run_vdjdb_uniform100_direct.sbatch | 0 .../run_vdjdb_uniform100_separation.sbatch | 0 .../evaluation/run_vdjdb_whole_umap.sbatch | 0 .../slurm/legacy/forward_encoder.sbatch | 0 .../scripts}/slurm/legacy/pgen_array.sbatch | 2 +- .../slurm/legacy/pgen_seeds_array.sbatch | 4 +- .../slurm/legacy/reconstruction_array.sbatch | 4 +- .../scripts}/slurm/legacy/submit_pgen_all.sh | 8 +- .../preflight_author_global_embeddings.sbatch | 0 .../preflight_data_anchor_factorial.sbatch | 0 .../preflight_data_anchor_objectives.sbatch | 0 .../preflight_external_model_benchmark.sbatch | 2 +- ...reflight_external_residue_benchmark.sbatch | 0 ...eflight_external_residue_pca128_all.sbatch | 8 +- ...ight_external_rtp128_reconstruction.sbatch | 10 +- .../preflight_external_sceptr_pca128.sbatch | 8 +- .../preflight/preflight_phase1_rq1.sbatch | 0 .../preflight/preflight_rq5_depths.sbatch | 0 .../preflight/preflight_rq5_widths.sbatch | 0 .../preflight_single_aa_challenge.sbatch | 2 +- .../preflight/preflight_vdjdb_epitope.sbatch | 0 .../preflight_vdjdb_evaluation.sbatch | 0 .../collect_author_global_comparison.sbatch | 2 +- .../collect_external_model_benchmark.sbatch | 10 +- .../collect_external_pca256_pgen.sbatch | 6 +- ...lect_external_pca256_reconstruction.sbatch | 6 +- .../collect_external_residue_benchmark.sbatch | 4 +- ...collect_external_residue_pca128_all.sbatch | 10 +- ...lect_external_rtp128_reconstruction.sbatch | 12 +- .../collect_external_sceptr_pca128.sbatch | 10 +- ...inalize_external_residue_pca128_all.sbatch | 0 .../finalize_external_residue_pca256.sbatch | 0 .../finalize_external_sceptr_pca128.sbatch | 0 .../finalize_vdjdb_epitope_prediction.sbatch | 0 .../scripts}/slurm/training/paper.sbatch | 2 +- .../smoke_tcremp_geometry_loss.sbatch | 2 +- .../training/train_anchored_tokenizer.sbatch | 0 .../train_author_global_onehot_fixed.sbatch | 0 .../training/train_author_global_pgen.sbatch | 0 .../train_author_global_pgen_controls.sbatch | 0 .../train_author_global_reconstruction.sbatch | 0 .../train_data_anchor_objective.sbatch | 2 +- .../train_external_pca256_pgen.sbatch | 0 ...rain_external_pca256_reconstruction.sbatch | 0 ...ternal_pca256_sceptr_reconstruction.sbatch | 0 .../slurm/training/train_external_pgen.sbatch | 0 .../training/train_external_pgen_tfidf.sbatch | 0 .../train_external_reconstruction.sbatch | 0 ...n_external_residue_pca128_remaining.sbatch | 0 .../train_external_residue_pgen.sbatch | 0 ...ain_external_residue_reconstruction.sbatch | 0 ...rain_external_rtp128_reconstruction.sbatch | 0 .../train_external_sceptr_pca128_heads.sbatch | 0 .../slurm/training/train_forward.sbatch | 2 +- .../training/train_forward_wandb_grid.sbatch | 0 .../training/train_inverse_wandb_grid.sbatch | 0 .../slurm/training/train_multitask.sbatch | 4 +- .../train_pgen_background_100k_array.sbatch | 2 +- .../train_pgen_trb_background_100k.sbatch | 2 +- .../training/train_phase1_rq1_char.sbatch | 0 .../training/train_phase2_rq23_char.sbatch | 0 .../slurm/training/train_rq4_wordpiece.sbatch | 0 .../slurm/training/train_rq5_depth.sbatch | 0 .../slurm/training/train_rq5_width.sbatch | 0 .../train_tcremp_geometry_ablation.sbatch | 0 .../training/train_wordpiece_sweep.sbatch | 0 .../scripts}/training/calc_pgen_1mm.sh | 2 +- .../scripts}/training/tcremp_launch.sh | 0 .../scripts}/training/train_multitask.sh | 0 .../scripts}/training/train_pgen.sh | 2 +- scripts/legacy/run3_all_sequential.sh | 4 - scripts/legacy/run4_all_sequential.sh | 4 - scripts/legacy/run5_all_sequential.sh | 6 - .../prepare_vdjdb_redcea_clonotypes.py | 2 +- .../benchmarks/pgen/collect_external_pgen.py | 2 +- src/rtp_codec/benchmarks/pgen/collect_pgen.py | 2 +- .../collect_external_reconstruction.py | 2 +- .../reconstruction/collect_reconstruction.py | 2 +- .../benchmarks/runtime/benchmark_speed.py | 2 +- .../experiments/sweeps/submit_wandb_grid.py | 4 +- src/rtp_codec/paths.py | 2 +- .../tests}/test_anchored_tokenization.py | 0 .../tests}/test_author_global_embeddings.py | 0 .../tests}/test_data_anchor_factorial.py | 0 .../tests}/test_external_model_benchmark.py | 0 .../tests}/test_external_residue_benchmark.py | 0 .../tests}/test_integration_compatibility.py | 0 {tests => src/tests}/test_latent_secondary.py | 0 .../tests}/test_latent_sufficiency.py | 0 .../tests}/test_multitask_baselines.py | 6 +- .../tests}/test_multitask_pipeline.py | 0 .../tests}/test_prepare_trb_joint.py | 0 {tests => src/tests}/test_public_inference.py | 4 +- .../tests}/test_single_aa_challenge.py | 0 .../tests}/test_single_aa_evaluation.py | 0 .../tests}/test_tcremp_geometry_loss.py | 0 {tests => src/tests}/test_vdjdb_cohort.py | 0 .../tests}/test_vdjdb_epitope_prediction.py | 0 .../tests}/test_vdjdb_redcea_clonotypes.py | 0 .../tests}/test_vdjdb_redcea_evaluation.py | 0 .../tests}/test_vdjdb_viral_motif_top10.py | 0 {tests => src/tests}/test_vdjdb_ylq.py | 0 .../tests}/test_vdjdb_ylq_motif_pooled.py | 0 {tests => src/tests}/test_wordpiece_sweep.py | 0 278 files changed, 318 insertions(+), 277 deletions(-) create mode 100644 docs/figures/model-schematic.pdf create mode 100644 docs/figures/model-schematic.png create mode 100644 docs/usage.md create mode 100644 research/README.md rename {configs => research/configs}/paper/p.json (100%) rename {configs => research/configs}/paper/r.json (100%) rename {configs => research/configs}/paper/rp.json (100%) rename {configs => research/configs}/paper/rt.json (100%) rename {configs => research/configs}/paper/rtp.json (100%) rename {configs => research/configs}/paper/t.json (100%) rename {configs => research/configs}/paper/tp.json (100%) rename {configs => research/configs}/trb/anchored-tokenizer-study/stage_manifest.json (100%) rename {configs => research/configs}/trb/phase1-rq1-char-seed42/experiment_manifest.json (100%) rename {configs => research/configs}/trb/phase2-rq23-char-seed42/experiment_manifest.json (100%) rename {configs => research/configs}/trb/rq1-char-r-seed42/experiment_config.json (100%) rename {configs => research/configs}/trb/rq1-char-rtp-seed42/experiment_config.json (100%) rename {configs => research/configs}/trb/rq2-char-rp-seed42/experiment_config.json (100%) rename {configs => research/configs}/trb/rq2-char-rt-seed42/experiment_config.json (100%) rename {configs => research/configs}/trb/rq4-wordpiece-r-seed42/experiment_config.json (100%) rename {configs => research/configs}/trb/rq4-wordpiece-rtp-seed42/experiment_config.json (100%) rename {configs => research/configs}/trb/rq4-wordpiece-seed42/experiment_manifest.json (100%) rename {configs => research/configs}/trb/rq5-char-rtp-d128-depths-seed42/experiment_manifest.json (100%) rename {configs => research/configs}/trb/rq5-char-rtp-d128-e2d4-seed42/experiment_config.json (100%) rename {configs => research/configs}/trb/rq5-char-rtp-d128-e6d4-seed42/experiment_config.json (100%) rename {configs => research/configs}/trb/rq5-char-rtp-d128-seed42/experiment_config.json (100%) rename {configs => research/configs}/trb/rq5-char-rtp-d512-seed42/experiment_config.json (100%) rename {configs => research/configs}/trb/rq5-char-rtp-widths-seed42/experiment_manifest.json (100%) rename {configs => research/configs}/trb/wordpiece-sweep-seed42/experiment_manifest.json (100%) rename {configs => research/configs}/trb/wordpiece-sweep-seed42/validation_results.md (100%) rename {requirements => research/environments}/benchmarks.txt (100%) rename {requirements => research/environments}/dev.txt (100%) rename {requirements => research/environments}/full.txt (100%) rename {requirements => research/environments}/runtime.txt (100%) rename {examples => research/examples}/data/sequences.tsv (100%) rename {examples => research/examples}/data/viral_antigen_species_2025_07_30.txt (100%) rename {notebooks => research/notebooks}/README.md (100%) rename {notebooks => research/notebooks}/analysis/architecture_comparison_report.ipynb (100%) rename {notebooks => research/notebooks}/analysis/compare_forward_tokenizers_report.ipynb (100%) rename {notebooks => research/notebooks}/analysis/convergence_curves_by_epoch_report.ipynb (100%) rename {notebooks => research/notebooks}/analysis/tokenizer_stats_report.ipynb (100%) rename {notebooks => research/notebooks}/legacy/example_inverse_run_and_analysis.ipynb (100%) rename {notebooks => research/notebooks}/legacy/example_run_and_analysis-Copy1.ipynb (100%) rename {notebooks => research/notebooks}/legacy/example_run_and_analysis.ipynb (100%) rename {notebooks => research/notebooks}/legacy/forward_background_100k_multichain_analysis.ipynb (100%) rename {notebooks => research/notebooks}/legacy/generate_datasets.ipynb (100%) rename {notebooks => research/notebooks}/legacy/inverse_background_100k_multichain_analysis.ipynb (100%) rename {notebooks => research/notebooks}/legacy/pgen_run_and_analysis.ipynb (100%) rename {notebooks => research/notebooks}/legacy/trb_1kk.ipynb (100%) rename {results => research/results}/legacy/dataset_summary.json (100%) rename {results => research/results}/legacy/pgen/pgen_runs.csv (100%) rename {results => research/results}/legacy/pgen/pgen_summary.csv (100%) rename {results => research/results}/legacy/pgen/pgen_summary.md (100%) rename {results => research/results}/legacy/pgen/pretraining_delta.csv (100%) rename {results => research/results}/legacy/pgen/speed_end_to_end_cpu.csv (100%) rename {results => research/results}/legacy/pgen/speed_end_to_end_cuda.csv (100%) rename {results => research/results}/legacy/pgen_constlr/pgen_runs.csv (100%) rename {results => research/results}/legacy/pgen_constlr/pgen_summary.csv (100%) rename {results => research/results}/legacy/pgen_constlr/pgen_summary.md (100%) rename {results => research/results}/legacy/pgen_constlr/pretraining_delta.csv (100%) rename {results => research/results}/legacy/reconstruction/reconstruction_runs.csv (100%) rename {results => research/results}/legacy/reconstruction/reconstruction_summary.csv (100%) rename {results => research/results}/legacy/reconstruction/reconstruction_summary.md (100%) rename {results => research/results}/paper/README.md (100%) rename {results => research/results}/paper/architecture_results.tsv (100%) rename {results => research/results}/paper/downstream_distribution_summary.tsv (100%) rename {results => research/results}/paper/downstream_per_epitope_controls.tsv (100%) rename {results => research/results}/paper/downstream_per_epitope_metrics.tsv (100%) rename {results => research/results}/paper/downstream_rtp_minus_rp_effects.tsv (100%) rename {results => research/results}/paper/external_author_global_comparison.md (100%) rename {results => research/results}/paper/external_author_global_comparison.tsv (100%) rename {results => research/results}/paper/external_author_global_comparison_manifest.json (100%) rename {results => research/results}/paper/external_pgen_results.tsv (100%) rename {results => research/results}/paper/external_pgen_runs.tsv (100%) rename {results => research/results}/paper/external_reconstruction_results.tsv (100%) rename {results => research/results}/paper/external_reconstruction_runs.tsv (100%) rename {results => research/results}/paper/factorial_results.tsv (100%) rename {results => research/results}/paper/latent_sufficiency_summary.tsv (100%) rename {results => research/results}/paper/low_label_sequence_summary.tsv (100%) rename {results => research/results}/paper/provenance_and_hashes.tsv (100%) rename {results => research/results}/paper/rtp_data_anchor_error_analysis_by_length.tsv (100%) rename {results => research/results}/paper/rtp_data_anchor_error_rates_by_target_length.tsv (100%) rename {results => research/results}/paper/rtp_data_anchor_region_error_rates.tsv (100%) rename {results => research/results}/paper/rtp_data_anchor_substitution_matrix.tsv (100%) rename {results => research/results}/paper/rtp_data_anchor_substitution_results.json (100%) rename {results => research/results}/paper/tokenizer_results.tsv (100%) rename {scripts => research/scripts}/legacy/run1_default_40epochs.sh (100%) rename {scripts => research/scripts}/legacy/run2_maxtokenlen9_40epochs.sh (100%) create mode 100644 research/scripts/legacy/run3_all_sequential.sh rename {scripts => research/scripts}/legacy/run3a_individual_maxlen.sh (100%) rename {scripts => research/scripts}/legacy/run3b_individual_maxlen_maxtokenlen9.sh (100%) rename {scripts => research/scripts}/legacy/run3c_fixed_maxlen10.sh (100%) create mode 100644 research/scripts/legacy/run4_all_sequential.sh rename {scripts => research/scripts}/legacy/run4a_individual_maxlen_maxtokenlen9_anchored.sh (100%) rename {scripts => research/scripts}/legacy/run4b_individual_maxlen_maxtokenlen9_anchored_dropout.sh (100%) create mode 100644 research/scripts/legacy/run5_all_sequential.sh rename {scripts => research/scripts}/legacy/run5a_hidden128.sh (100%) rename {scripts => research/scripts}/legacy/run5b_blocks3.sh (100%) rename {scripts => research/scripts}/legacy/run5c_hidden128_blocks3.sh (100%) rename {scripts => research/scripts}/legacy/run5d_hidden96_blocks3.sh (100%) rename {scripts => research/scripts}/legacy/run_both_sequential.sh (100%) rename {scripts => research/scripts}/legacy/run_compare_100k.sh (100%) rename {scripts => research/scripts}/legacy/run_compare_40epochs_upto30k.sh (100%) rename {scripts => research/scripts}/legacy/run_compare_finegrid_maxlen9_40epochs.sh (100%) rename {scripts => research/scripts}/legacy/run_compare_finegrid_maxlen9_50epochs.sh (100%) rename {scripts => research/scripts}/legacy/train_forward.sh (100%) rename {scripts => research/scripts}/legacy/train_inverse.sh (100%) rename {scripts => research/scripts}/slurm/data/cache_author_global_embeddings.sbatch (100%) rename {scripts => research/scripts}/slurm/data/cache_author_global_sceptr_cdr3.sbatch (100%) rename {scripts => research/scripts}/slurm/data/cache_external_model_embeddings.sbatch (100%) rename {scripts => research/scripts}/slurm/data/cache_external_residue_embeddings.sbatch (100%) rename {scripts => research/scripts}/slurm/data/calc_pgen_1mm.sbatch (98%) rename {scripts => research/scripts}/slurm/data/calc_pgen_1mm_background_100k_array.sbatch (98%) rename {scripts => research/scripts}/slurm/data/calc_pgen_1mm_trb_background_100k.sbatch (97%) rename {scripts => research/scripts}/slurm/data/fit_author_global_bottleneck.sbatch (100%) rename {scripts => research/scripts}/slurm/data/fit_external_model_bottleneck.sbatch (100%) rename {scripts => research/scripts}/slurm/data/fit_external_residue_pca128_all.sbatch (100%) rename {scripts => research/scripts}/slurm/data/fit_external_residue_pca256.sbatch (100%) rename {scripts => research/scripts}/slurm/data/fit_external_sceptr_pca128.sbatch (100%) rename {scripts => research/scripts}/slurm/data/install_external_benchmark_runtime.sbatch (96%) rename {scripts => research/scripts}/slurm/data/install_wordpiece_dependency.sbatch (100%) rename {scripts => research/scripts}/slurm/data/prepare_anchored_tokenizers.sbatch (95%) rename {scripts => research/scripts}/slurm/data/prepare_external_model_cohort.sbatch (95%) rename {scripts => research/scripts}/slurm/data/prepare_multitask_benchmark.sbatch (97%) rename {scripts => research/scripts}/slurm/data/prepare_single_aa_challenge.sbatch (100%) rename {scripts => research/scripts}/slurm/data/prepare_trb_joint.sbatch (100%) rename {scripts => research/scripts}/slurm/data/prepare_vdjdb_redcea_clonotypes.sbatch (77%) rename {scripts => research/scripts}/slurm/data/prepare_vdjdb_viral_motif_top10.sbatch (94%) rename {scripts => research/scripts}/slurm/data/prepare_vdjdb_ylq.sbatch (100%) rename {scripts => research/scripts}/slurm/data/prepare_vdjdb_ylq_motif_pooled.sbatch (100%) rename {scripts => research/scripts}/slurm/data/prepare_wordpiece_rq4.sbatch (100%) rename {scripts => research/scripts}/slurm/data/prepare_wordpiece_sweep.sbatch (100%) rename {scripts => research/scripts}/slurm/data/validate_external_model_cohort.sbatch (100%) rename {scripts => research/scripts}/slurm/evaluation/benchmark_vdjdb_irrm_cpu.sbatch (100%) rename {scripts => research/scripts}/slurm/evaluation/benchmark_vdjdb_irrm_cpu_fixed.sbatch (100%) rename {scripts => research/scripts}/slurm/evaluation/benchmark_vdjdb_irrm_gpu.sbatch (100%) rename {scripts => research/scripts}/slurm/evaluation/benchmark_vdjdb_irrm_gpu_fixed.sbatch (100%) rename {scripts => research/scripts}/slurm/evaluation/benchmark_vdjdb_tcremp_runtime.sbatch (100%) rename {scripts => research/scripts}/slurm/evaluation/diagnose_vdjdb_decoded_tcremp_geometry.sbatch (100%) rename {scripts => research/scripts}/slurm/evaluation/evaluate_latent_secondary.sbatch (95%) rename {scripts => research/scripts}/slurm/evaluation/evaluate_latent_sufficiency.sbatch (94%) rename {scripts => research/scripts}/slurm/evaluation/evaluate_rtp_data_anchor_length_errors.sbatch (100%) rename {scripts => research/scripts}/slurm/evaluation/evaluate_rtp_data_anchor_position_errors.sbatch (100%) rename {scripts => research/scripts}/slurm/evaluation/evaluate_rtp_data_anchor_substitutions.sbatch (100%) rename {scripts => research/scripts}/slurm/evaluation/evaluate_rtp_data_anchor_substitutions_v2.sbatch (100%) rename {scripts => research/scripts}/slurm/evaluation/evaluate_rtp_error_analysis.sbatch (100%) rename {scripts => research/scripts}/slurm/evaluation/evaluate_single_aa_challenge.sbatch (100%) rename {scripts => research/scripts}/slurm/evaluation/evaluate_tcremp_geometry_biology.sbatch (100%) rename {scripts => research/scripts}/slurm/evaluation/evaluate_vdjdb_author_global.sbatch (100%) rename {scripts => research/scripts}/slurm/evaluation/evaluate_vdjdb_decoded_tcremp.sbatch (100%) rename {scripts => research/scripts}/slurm/evaluation/evaluate_vdjdb_epitope_prediction.sbatch (100%) rename {scripts => research/scripts}/slurm/evaluation/evaluate_vdjdb_frozen.sbatch (100%) rename {scripts => research/scripts}/slurm/evaluation/evaluate_vdjdb_redcea_clonotypes.sbatch (100%) rename {scripts => research/scripts}/slurm/evaluation/evaluate_vdjdb_tonly_decoded_tcremp.sbatch (100%) rename {scripts => research/scripts}/slurm/evaluation/evaluate_vdjdb_uniform100_tcremp.sbatch (100%) rename {scripts => research/scripts}/slurm/evaluation/evaluate_vdjdb_uniform100_tcremp_pca128.sbatch (100%) rename {scripts => research/scripts}/slurm/evaluation/evaluate_vdjdb_viral_motif_top10.sbatch (100%) rename {scripts => research/scripts}/slurm/evaluation/evaluate_vdjdb_ylq_frozen.sbatch (100%) rename {scripts => research/scripts}/slurm/evaluation/evaluate_vdjdb_ylq_motif_pooled.sbatch (100%) rename {scripts => research/scripts}/slurm/evaluation/run_vdjdb_tcremp_umap.sbatch (100%) rename {scripts => research/scripts}/slurm/evaluation/run_vdjdb_umap_candidates.sbatch (100%) rename {scripts => research/scripts}/slurm/evaluation/run_vdjdb_umap_candidates_runtime.sbatch (100%) rename {scripts => research/scripts}/slurm/evaluation/run_vdjdb_uniform100.sbatch (100%) rename {scripts => research/scripts}/slurm/evaluation/run_vdjdb_uniform100_direct.sbatch (100%) rename {scripts => research/scripts}/slurm/evaluation/run_vdjdb_uniform100_separation.sbatch (100%) rename {scripts => research/scripts}/slurm/evaluation/run_vdjdb_whole_umap.sbatch (100%) rename {scripts => research/scripts}/slurm/legacy/forward_encoder.sbatch (100%) rename {scripts => research/scripts}/slurm/legacy/pgen_array.sbatch (98%) rename {scripts => research/scripts}/slurm/legacy/pgen_seeds_array.sbatch (95%) rename {scripts => research/scripts}/slurm/legacy/reconstruction_array.sbatch (96%) rename {scripts => research/scripts}/slurm/legacy/submit_pgen_all.sh (81%) rename {scripts => research/scripts}/slurm/preflight/preflight_author_global_embeddings.sbatch (100%) rename {scripts => research/scripts}/slurm/preflight/preflight_data_anchor_factorial.sbatch (100%) rename {scripts => research/scripts}/slurm/preflight/preflight_data_anchor_objectives.sbatch (100%) rename {scripts => research/scripts}/slurm/preflight/preflight_external_model_benchmark.sbatch (92%) rename {scripts => research/scripts}/slurm/preflight/preflight_external_residue_benchmark.sbatch (100%) rename {scripts => research/scripts}/slurm/preflight/preflight_external_residue_pca128_all.sbatch (79%) rename {scripts => research/scripts}/slurm/preflight/preflight_external_rtp128_reconstruction.sbatch (88%) rename {scripts => research/scripts}/slurm/preflight/preflight_external_sceptr_pca128.sbatch (81%) rename {scripts => research/scripts}/slurm/preflight/preflight_phase1_rq1.sbatch (100%) rename {scripts => research/scripts}/slurm/preflight/preflight_rq5_depths.sbatch (100%) rename {scripts => research/scripts}/slurm/preflight/preflight_rq5_widths.sbatch (100%) rename {scripts => research/scripts}/slurm/preflight/preflight_single_aa_challenge.sbatch (94%) rename {scripts => research/scripts}/slurm/preflight/preflight_vdjdb_epitope.sbatch (100%) rename {scripts => research/scripts}/slurm/preflight/preflight_vdjdb_evaluation.sbatch (100%) rename {scripts => research/scripts}/slurm/reports/collect_author_global_comparison.sbatch (63%) rename {scripts => research/scripts}/slurm/reports/collect_external_model_benchmark.sbatch (74%) rename {scripts => research/scripts}/slurm/reports/collect_external_pca256_pgen.sbatch (74%) rename {scripts => research/scripts}/slurm/reports/collect_external_pca256_reconstruction.sbatch (71%) rename {scripts => research/scripts}/slurm/reports/collect_external_residue_benchmark.sbatch (86%) rename {scripts => research/scripts}/slurm/reports/collect_external_residue_pca128_all.sbatch (68%) rename {scripts => research/scripts}/slurm/reports/collect_external_rtp128_reconstruction.sbatch (80%) rename {scripts => research/scripts}/slurm/reports/collect_external_sceptr_pca128.sbatch (65%) rename {scripts => research/scripts}/slurm/reports/finalize_external_residue_pca128_all.sbatch (100%) rename {scripts => research/scripts}/slurm/reports/finalize_external_residue_pca256.sbatch (100%) rename {scripts => research/scripts}/slurm/reports/finalize_external_sceptr_pca128.sbatch (100%) rename {scripts => research/scripts}/slurm/reports/finalize_vdjdb_epitope_prediction.sbatch (100%) rename {scripts => research/scripts}/slurm/training/paper.sbatch (90%) rename {scripts => research/scripts}/slurm/training/smoke_tcremp_geometry_loss.sbatch (94%) rename {scripts => research/scripts}/slurm/training/train_anchored_tokenizer.sbatch (100%) rename {scripts => research/scripts}/slurm/training/train_author_global_onehot_fixed.sbatch (100%) rename {scripts => research/scripts}/slurm/training/train_author_global_pgen.sbatch (100%) rename {scripts => research/scripts}/slurm/training/train_author_global_pgen_controls.sbatch (100%) rename {scripts => research/scripts}/slurm/training/train_author_global_reconstruction.sbatch (100%) rename {scripts => research/scripts}/slurm/training/train_data_anchor_objective.sbatch (97%) rename {scripts => research/scripts}/slurm/training/train_external_pca256_pgen.sbatch (100%) rename {scripts => research/scripts}/slurm/training/train_external_pca256_reconstruction.sbatch (100%) rename {scripts => research/scripts}/slurm/training/train_external_pca256_sceptr_reconstruction.sbatch (100%) rename {scripts => research/scripts}/slurm/training/train_external_pgen.sbatch (100%) rename {scripts => research/scripts}/slurm/training/train_external_pgen_tfidf.sbatch (100%) rename {scripts => research/scripts}/slurm/training/train_external_reconstruction.sbatch (100%) rename {scripts => research/scripts}/slurm/training/train_external_residue_pca128_remaining.sbatch (100%) rename {scripts => research/scripts}/slurm/training/train_external_residue_pgen.sbatch (100%) rename {scripts => research/scripts}/slurm/training/train_external_residue_reconstruction.sbatch (100%) rename {scripts => research/scripts}/slurm/training/train_external_rtp128_reconstruction.sbatch (100%) rename {scripts => research/scripts}/slurm/training/train_external_sceptr_pca128_heads.sbatch (100%) rename {scripts => research/scripts}/slurm/training/train_forward.sbatch (98%) rename {scripts => research/scripts}/slurm/training/train_forward_wandb_grid.sbatch (100%) rename {scripts => research/scripts}/slurm/training/train_inverse_wandb_grid.sbatch (100%) rename {scripts => research/scripts}/slurm/training/train_multitask.sbatch (85%) rename {scripts => research/scripts}/slurm/training/train_pgen_background_100k_array.sbatch (98%) rename {scripts => research/scripts}/slurm/training/train_pgen_trb_background_100k.sbatch (98%) rename {scripts => research/scripts}/slurm/training/train_phase1_rq1_char.sbatch (100%) rename {scripts => research/scripts}/slurm/training/train_phase2_rq23_char.sbatch (100%) rename {scripts => research/scripts}/slurm/training/train_rq4_wordpiece.sbatch (100%) rename {scripts => research/scripts}/slurm/training/train_rq5_depth.sbatch (100%) rename {scripts => research/scripts}/slurm/training/train_rq5_width.sbatch (100%) rename {scripts => research/scripts}/slurm/training/train_tcremp_geometry_ablation.sbatch (100%) rename {scripts => research/scripts}/slurm/training/train_wordpiece_sweep.sbatch (100%) rename {scripts => research/scripts}/training/calc_pgen_1mm.sh (96%) rename {scripts => research/scripts}/training/tcremp_launch.sh (100%) rename {scripts => research/scripts}/training/train_multitask.sh (100%) rename {scripts => research/scripts}/training/train_pgen.sh (97%) delete mode 100644 scripts/legacy/run3_all_sequential.sh delete mode 100644 scripts/legacy/run4_all_sequential.sh delete mode 100644 scripts/legacy/run5_all_sequential.sh rename {tests => src/tests}/test_anchored_tokenization.py (100%) rename {tests => src/tests}/test_author_global_embeddings.py (100%) rename {tests => src/tests}/test_data_anchor_factorial.py (100%) rename {tests => src/tests}/test_external_model_benchmark.py (100%) rename {tests => src/tests}/test_external_residue_benchmark.py (100%) rename {tests => src/tests}/test_integration_compatibility.py (100%) rename {tests => src/tests}/test_latent_secondary.py (100%) rename {tests => src/tests}/test_latent_sufficiency.py (100%) rename {tests => src/tests}/test_multitask_baselines.py (96%) rename {tests => src/tests}/test_multitask_pipeline.py (100%) rename {tests => src/tests}/test_prepare_trb_joint.py (100%) rename {tests => src/tests}/test_public_inference.py (97%) rename {tests => src/tests}/test_single_aa_challenge.py (100%) rename {tests => src/tests}/test_single_aa_evaluation.py (100%) rename {tests => src/tests}/test_tcremp_geometry_loss.py (100%) rename {tests => src/tests}/test_vdjdb_cohort.py (100%) rename {tests => src/tests}/test_vdjdb_epitope_prediction.py (100%) rename {tests => src/tests}/test_vdjdb_redcea_clonotypes.py (100%) rename {tests => src/tests}/test_vdjdb_redcea_evaluation.py (100%) rename {tests => src/tests}/test_vdjdb_viral_motif_top10.py (100%) rename {tests => src/tests}/test_vdjdb_ylq.py (100%) rename {tests => src/tests}/test_vdjdb_ylq_motif_pooled.py (100%) rename {tests => src/tests}/test_wordpiece_sweep.py (100%) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 183b5d9..1b269b5 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -13,7 +13,7 @@ jobs: cache: pip - run: python -m pip install torch==2.4.1 --index-url https://download.pytorch.org/whl/cpu - run: python -m pip install -e ".[dev]" - - run: python -m compileall -q src tests + - run: python -m compileall -q src - run: python -m pytest -q - run: rtp-codec --help && rtp-codec train --help && rtp-codec encode --help - - run: find scripts -type f \( -name '*.sh' -o -name '*.sbatch' \) -print0 | xargs -0 -n1 bash -n + - run: find research/scripts -type f \( -name '*.sh' -o -name '*.sbatch' \) -print0 | xargs -0 -n1 bash -n diff --git a/CITATION.cff b/CITATION.cff index 4b026c2..264049e 100644 --- a/CITATION.cff +++ b/CITATION.cff @@ -1,5 +1,5 @@ cff-version: 1.2.0 -message: "Please cite the RTP-CODEC manuscript and this repository when using the code." +message: "Please cite RTP-CODEC, accepted to BioFM @ ICDM'26, and this repository when using the code." title: "RTP-CODEC: Learning Compact TCR Representations from Multiple Biological Objectives" type: software version: 0.1.0 diff --git a/README.md b/README.md index f7e0904..c43ada3 100644 --- a/README.md +++ b/README.md @@ -1,172 +1,58 @@ # RTP-CODEC -**Learning Compact TCR Representations from Multiple Biological Objectives** +![RTP-CODEC model: CDR3 sequence, anchor tokenizer, Transformer encoder and three biological objectives](docs/figures/model-schematic.png) -Elizaveta Vlasova, Petr Grigorev, Mariia Demidova, Sergey Muravyov and Mikhail Shugay +**Learning Compact TCR Representations from Multiple Biological Objectives**
+**Accepted to BioFM @ ICDM'26** -RTP-CODEC learns a **128-dimensional representation of a human TRB CDR3 amino-acid sequence**. A shared Transformer encoder is trained jointly to reconstruct the sequence (**R**), predict TCRemP reference coordinates (**T**), and estimate generation probability (**P**). Once trained, the encoder takes only the CDR3 sequence; TCRemP computation and V/J annotations are needed for training supervision, not for sequence encoding. +Elizaveta Vlasova · Petr Grigorev · Mariia Demidova · Sergey Muravyov · Mikhail Shugay -This repository contains the model, training pipeline, tokenizers, evaluation tools and result tables accompanying the manuscript *RTP-CODEC: Learning Compact TCR Representations from Multiple Biological Objectives*. +RTP-CODEC learns a **128-dimensional TRB CDR3 representation** through sequence reconstruction (**R**), TCRemP supervision (**T**) and generation-probability prediction (**P**). After training, encoding requires only the amino-acid sequence. -```mermaid -flowchart LR - S[TRB CDR3 sequence] --> A[DATA-ANCHOR tokenizer] - A --> E[Transformer encoder] - E --> Z[128-dimensional vector] - Z --> R[Sequence reconstruction] - Z --> T[TCRemP coordinates] - Z --> P[log10 generation probability] -``` - -The three heads provide supervision during training. The reusable representation is the encoder output before those heads. +[Quick start](#quick-start) · [Reproduce the paper](docs/reproduction.md) · [Results](research/results/paper/README.md) · [Documentation](docs/README.md) -## Installation +## Quick start -Python 3.11 or newer is required. From the repository root: +Python 3.11+; install from the repository root: ```bash -git clone https://github.com/VEK239/rtp-codec.git -cd rtp-codec -python -m venv .venv -# Linux/macOS: -source .venv/bin/activate -# Windows PowerShell: .venv/Scripts/Activate.ps1 -python -m pip install --upgrade pip python -m pip install -e . ``` -For a CPU-only environment, install CPU PyTorch before the package: - -```bash -python -m pip install torch==2.4.1 --index-url https://download.pytorch.org/whl/cpu -python -m pip install -e ".[dev]" -``` - -Optional dependencies are grouped by purpose: - -| Extra | Purpose | -| --- | --- | -| `pgen` | OLGA-backed target generation through the pinned mirpy revision | -| `benchmarks` | ESM, TCR-BERT and SCEPTR representation comparisons | -| `tracking` | Weights & Biases logging for earlier training workflows | -| `notebooks` | Interactive analyses and plots | -| `dev` | CPU test suite | - -For example, `python -m pip install -e ".[pgen,benchmarks,dev]"`. External encoders also require their own model weights; TCRemP requires its separate installation and prototype data. The reported manuscript environment used PyTorch 2.4.1; GPU work additionally requires a compatible CUDA installation. - -## Encode sequences - -The repository contains source code and result tables. **Trained model weights, tokenizer bundles and the full benchmark data are not bundled here.** Encoding requires a compatible `best.pt` checkpoint and, for DATA-ANCHOR or WordPiece models, its original tokenizer bundle. See [data and model assets](docs/assets.md). - -Prepare a TSV with a `junction_aa` column; [examples/data/sequences.tsv](examples/data/sequences.tsv) shows the format. Each sequence must contain standard amino acids and fit the checkpoint's maximum length (40 residues in the manuscript). +Encode an input TSV with a `junction_aa` column: ```bash rtp-codec encode \ - --checkpoint artifacts/paper/rtp-seed42/best.pt \ - --tokenizer data/tokenizers/data_anchor/anchored_tokenizer.json \ - --input examples/data/sequences.tsv \ - --output artifacts/example_latents.npy \ - --device cpu + --checkpoint /path/to/best.pt \ + --tokenizer /path/to/anchored_tokenizer.json \ + --input research/examples/data/sequences.tsv \ + --output artifacts/latents.npy ``` -The output is a float32 NumPy matrix with one vector per input row in the same order, plus a JSON sidecar describing the input and matrix. The vector dimension comes from the checkpoint. `--tokenizer` relocates a saved bundle; it does not retrain or replace the tokenizer. Use `--sequence-column cdr3` for a differently named input column. - -The same interface is available in Python: +This writes one vector per input row, preserving order. Model weights, tokenizer bundles and the locked dataset are separate assets; see [asset requirements](docs/assets.md). Installation options, the Python API and training examples are in the [usage guide](docs/usage.md). -```python -from rtp_codec.inference import load_encoder +## Repository -encoder = load_encoder( - "artifacts/paper/rtp-seed42/best.pt", - tokenizer_path="data/tokenizers/data_anchor/anchored_tokenizer.json", - device="cpu", -) -vectors = encoder.encode_sequences(["CASSLGQETQYF", "CASSIRSSYEQYF"]) -# vectors.shape == (2, 128) for the manuscript checkpoint -``` - -## Train the manuscript model +| Directory | Contents | +| --- | --- | +| [`src/`](src/) | Installable `rtp_codec` library and CPU tests | +| [`research/`](research/README.md) | Paper configurations, results, launchers, examples and historical notebooks | +| [`docs/`](docs/README.md) | Usage, reproduction, architecture and migration guides | -The paper uses a locked synthetic TRB dataset of 99,430 unique receptors, split into 79,544 training, 9,943 validation and 9,943 test rows. DATA-ANCHOR edge motifs and target normalizers are fitted on training rows only. Its middle WordPiece vocabulary is trained on a separate 500,000-sequence OLGA corpus with all benchmark sequences excluded. Reconstruction always uses an autoregressive character decoder. +The diagram above is the original first figure from the final manuscript, rendered for GitHub; its [vector PDF](docs/figures/model-schematic.pdf) is preserved. -Seven matched objective presets live in [configs/paper](configs/paper): `r`, `t`, `p`, `rt`, `rp`, `tp` and `rtp`. Supply the prepared dataset and tokenizer paths: +## Citation -```bash -rtp-codec train \ - --config configs/paper/rtp.json \ - --data-dir data/benchmark/trb \ - --tokenizer-path data/tokenizers/data_anchor/anchored_tokenizer.json \ - --device cuda -``` +**Accepted to BioFM @ ICDM'26.** -These presets use a 128-dimensional bottleneck, hidden width 320, eight attention heads, four encoder and four decoder layers, batch size 64 and up to 40 epochs. Early stopping is disabled; the checkpoint with the lowest joint validation loss is retained. Command-line arguments override preset values. Training writes `best.pt`, `last.pt`, target normalization statistics, run configuration and evaluation metrics to the configured output directory. - -For data preparation, tokenizer construction, the full objective factorial and downstream evaluation, follow [the reproduction guide](docs/reproduction.md). Cluster launchers are described in [docs/cluster.md](docs/cluster.md). A new split or regenerated tokenizer constitutes a new experiment; it should not be presented as an exact reproduction of the locked manuscript runs. - -## Results reported in the manuscript - -Native heads on the held-out synthetic benchmark: - -| Objectives | Reconstruction exact match ↑ | TCRemP cosine ↑ | Pgen RMSE ↓ | -| --- | ---: | ---: | ---: | -| R | 0.9766 | — | — | -| T | — | 0.99149 | — | -| P | — | — | 0.2753 | -| RT | 0.9632 | 0.99178 | — | -| RP | 0.9813 | — | 0.2264 | -| TP | — | 0.99169 | 0.3496 | -| RTP | 0.9636 | 0.99190 | 0.2702 | - -Source: [matched objective factorial](results/paper/factorial_results.tsv). Pgen means regression of `log10_pgen_1mm`. Dashes indicate inactive objectives. These results show an objective tradeoff: adding T to RP improves teacher agreement while reducing native reconstruction and Pgen performance. - -New heads trained on frozen representations provide a separate information-recovery comparison: - -| Frozen representation | Reconstruction exact match ↑ | Pgen RMSE ↓ | -| --- | ---: | ---: | -| RTP-CODEC | 0.8831 ± 0.0058 | 0.2375 ± 0.0008 | -| TCRemP | 0.5181 ± 0.0024 | 0.6038 ± 0.0019 | -| TCR-BERT | 0.4778 ± 0.0179 | 0.4299 ± 0.0022 | -| ESM2-35M | 0.2042 ± 0.0132 | 0.7086 ± 0.0033 | -| SCEPTR, CDR3-only | 0.8213 ± 0.0043 | 0.6637 ± 0.0062 | - -Source: [consolidated frozen-representation comparison](results/paper/external_author_global_comparison.tsv). Values are mean ± standard deviation across probe seeds; reconstruction uses the common 64-dimensional comparison space. These are fresh probe heads, not the codec's native heads above. - -On the independent real VDJdb cohort, RTP-CODEC achieved macro Cohen's d of 0.6866 and improved epitope separation over RP for 31 of 40 epitopes. Native TCRemP and its PCA-128 control remained stronger (0.9563 and 0.8230). The manuscript's single runtime measurements on 68,302 receptors were 29.26 s for RTP-CODEC on CPU, 9.36 s on GPU and 350.25 s for 16-thread TCRemP. Timings exclude loading and warm-up and use different pipeline boundaries; they are hardware-specific, not a general speed guarantee. - -The [paper result index](results/paper/README.md) links architecture, tokenizer, downstream and error-analysis tables with their provenance. Earlier benchmark tables are retained in [results/legacy](results/legacy). - -## Repository layout - -```text -src/rtp_codec/ - models/ Shared codec and earlier forward/inverse/Pgen models - tokenization/ Character, WordPiece and anchored tokenizers - data/ AIRR input, dataset alignment, caches and target generation - training/ Trainers, losses, checkpoint handling and tracking - inference.py Checkpoint loading and sequence-to-vector API - evaluation/ Shared metric accumulation - benchmarks/ Dataset preparation, frozen probes, VDJdb and runtime analyses - experiments/ Tokenizer studies, comparison runners and preflight checks -configs/ - paper/ Seven manuscript objective presets - trb/ Recorded configurations for earlier controlled studies -scripts/ - training/ Shell training entry points - slurm/ Cluster templates grouped by task - legacy/ Earlier experiment launchers -results/ - paper/ Manuscript result tables and provenance - legacy/ Earlier benchmark results -examples/data/ Small input examples -notebooks/ Exploratory and historical notebooks -tests/ CPU regression and integration tests -docs/ Reproduction, architecture, assets and migration guides +```bibtex +@inproceedings{vlasova2026rtpcodec, + title = {RTP-CODEC: Learning Compact TCR Representations from Multiple Biological Objectives}, + author = {Vlasova, Elizaveta and Grigorev, Petr and Demidova, Mariia and Muravyov, Sergey and Shugay, Mikhail}, + booktitle = {BioFM @ ICDM'26}, + year = {2026}, + note = {Accepted} +} ``` -Run `python -m pytest -q` after installing the `dev` extra. The CPU suite includes a small end-to-end training run, tokenizer compatibility checks, dataset alignment, metric checks and checkpoint-based inference. GitHub Actions also checks the public CLI and shell syntax. - -## Citation and license - -Please cite *RTP-CODEC: Learning Compact TCR Representations from Multiple Biological Objectives* by Elizaveta Vlasova, Petr Grigorev, Mariia Demidova, Sergey Muravyov and Mikhail Shugay. A publication DOI has not yet been added to this repository. [CITATION.cff](CITATION.cff) provides software citation metadata. - -The code is distributed under [GNU GPL v3](LICENSE). External models and datasets retain their own licenses. +Software citation metadata: [CITATION.cff](CITATION.cff). Code license: [GPL v3](LICENSE). diff --git a/docs/README.md b/docs/README.md index 06750e4..3cb49a4 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,5 +1,6 @@ # Documentation +- [Installation, encoding and training](usage.md) - [Reproduce the manuscript experiments](reproduction.md) - [Model architecture and objectives](architecture.md) - [Data, tokenizer and checkpoint assets](assets.md) @@ -8,6 +9,6 @@ - [Development and validation](development.md) - [Anchored tokenizer study](anchored_tokenizer_study.md) - [VDJdb validation protocol](vdjdb_epitope_validation.md) -- [Earlier benchmark protocols](protocols/) +- [Earlier benchmark protocols](protocols) -The main results are indexed in [results/paper](../results/paper/README.md). Historical reports and integration provenance are retained under [legacy](legacy/). +The main results are indexed in [research/results/paper](../research/results/paper/README.md). Historical reports and integration provenance are retained under [legacy](legacy). diff --git a/docs/architecture.md b/docs/architecture.md index 95d5628..9be42dc 100644 --- a/docs/architecture.md +++ b/docs/architecture.md @@ -14,6 +14,6 @@ The DATA-ANCHOR tokenizer uses train-derived edge motifs and a separately traine Full RTP training assigns weight 1 to each term. Inactive objectives have weight 0. Normalization statistics are fitted only on the training rows. TCRemP and Pgen targets are precomputed; sequence encoding after training does not run either target generator. -Implementation: [codec](../src/rtp_codec/models/codec.py), [objectives](../src/rtp_codec/training/objectives.py), [trainer](../src/rtp_codec/training/multitask.py). The seven [paper presets](../configs/paper/) hold architecture and optimization settings fixed while changing objective weights. +Implementation: [codec](../src/rtp_codec/models/codec.py), [objectives](../src/rtp_codec/training/objectives.py), [trainer](../src/rtp_codec/training/multitask.py). The seven [paper presets](../research/configs/paper) hold architecture and optimization settings fixed while changing objective weights. -Earlier configurations under `configs/trb` include other bottleneck widths and tokenizer choices. Always load the architecture recorded in a checkpoint rather than substituting the current defaults. +Earlier configurations under `research/configs/trb` include other bottleneck widths and tokenizer choices. Always load the architecture recorded in a checkpoint rather than substituting the current defaults. diff --git a/docs/assets.md b/docs/assets.md index 36a6d72..2409f6f 100644 --- a/docs/assets.md +++ b/docs/assets.md @@ -1,6 +1,6 @@ # Data and model assets -The Git repository distributes code, small format examples, experiment configuration records and result tables. It does not currently distribute the locked dataset, trained model checkpoint, DATA-ANCHOR bundle or a DOI-backed model/data release. Their existing hashes and run locations are recorded in [results/paper/provenance_and_hashes.tsv](../results/paper/provenance_and_hashes.tsv); recorded cluster paths describe past runs and are not public download links. +The Git repository distributes code, small format examples, experiment configuration records and result tables. It does not currently distribute the locked dataset, trained model checkpoint, DATA-ANCHOR bundle or a DOI-backed model/data release. Their existing hashes and run locations are recorded in [research/results/paper/provenance_and_hashes.tsv](../research/results/paper/provenance_and_hashes.tsv); recorded cluster paths describe past runs and are not public download links. ## Prepared training dataset diff --git a/docs/cluster.md b/docs/cluster.md index 852364c..39c7af1 100644 --- a/docs/cluster.md +++ b/docs/cluster.md @@ -2,7 +2,7 @@ Install RTP-CODEC into the Python environment used by compute jobs. Submit from the repository root; scheduler partitions, GPU resources and memory limits must match the destination cluster. -The launchers are grouped under `scripts/slurm/{data,training,evaluation,preflight,reports,legacy}`. They preserve earlier experiment conditions and some external asset paths; review those paths before submitting. No jobs are launched merely by installing the package. +The launchers are grouped under `research/scripts/slurm/{data,training,evaluation,preflight,reports,legacy}`. They preserve earlier experiment conditions and some external asset paths; review those paths before submitting. No jobs are launched merely by installing the package. The compact manuscript launcher accepts any of the seven paper conditions: @@ -11,9 +11,9 @@ export RTP_CODEC_ROOT="$PWD" export RTP_CODEC_PYTHON="$PWD/.venv/bin/python" export DATA_DIR=/path/to/locked/trb export TOKENIZER_PATH=/path/to/data_anchor/anchored_tokenizer.json -sbatch scripts/slurm/training/paper.sbatch rtp +sbatch research/scripts/slurm/training/paper.sbatch rtp ``` Change scheduler resource flags with `sbatch --partition=... --gres=...` as appropriate. Logs use the submission directory, and the preset writes results under `artifacts/paper/-seed42` unless `OUTPUT_DIR` is supplied. -Historical launchers may require preflight manifests, external encoder weights, TCRemP software and existing experiment directories. Their sequence/data gates should be satisfied before full jobs are submitted. Use the [reproduction guide](reproduction.md) and the corresponding [protocol](protocols/) for asset requirements. +Historical launchers may require preflight manifests, external encoder weights, TCRemP software and existing experiment directories. Their sequence/data gates should be satisfied before full jobs are submitted. Use the [reproduction guide](reproduction.md) and the corresponding [protocol](protocols) for asset requirements. diff --git a/docs/figures/model-schematic.pdf b/docs/figures/model-schematic.pdf new file mode 100644 index 0000000000000000000000000000000000000000..074e1ae4d9d87d9ccba65e5884d27b80f879e3f7 GIT binary patch literal 246796 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̞Qm7HGw@&{qyVSGO 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

FbAzzxZlNx1~F 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

9<>FUYi7GJ^pzUpnfPh5R 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%0AEqE9c%A6_+jLfB#7r2|a(JMz{>q$sR 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≶M$! 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 | Task-specific module under `rtp_codec.benchmarks` | | `scripts.` | Task-specific module under `rtp_codec.experiments` | -| `experiments/trb/` | `configs/trb/` | -| `results/author` | `results/paper` | -| Root requirements files | `pyproject.toml` and `requirements/` | +| `experiments/trb/` | `research/configs/trb/` | +| `research/results/author` | `research/results/paper` | +| Root requirements files | `pyproject.toml` and `research/environments/` | Python modules are launched with `python -m ...` after installation. The old `irrm_codec` Python namespace is no longer exposed. Existing shell launchers have been updated; update imports in your own notebooks or external scripts. diff --git a/docs/reproduction.md b/docs/reproduction.md index ce84019..0595ce6 100644 --- a/docs/reproduction.md +++ b/docs/reproduction.md @@ -33,7 +33,7 @@ The routine fits edge motifs on the training split, filters the independent corp For one condition: ```bash -rtp-codec train --config configs/paper/rtp.json \ +rtp-codec train --config research/configs/paper/rtp.json \ --data-dir data/benchmark/trb \ --tokenizer-path data/tokenizers/data_anchor/anchored_tokenizer.json \ --device cuda @@ -43,7 +43,7 @@ For all seven conditions (Bash): ```bash for arm in r t p rt rp tp rtp; do - rtp-codec train --config "configs/paper/$arm.json" \ + rtp-codec train --config "research/configs/paper/$arm.json" \ --data-dir data/benchmark/trb \ --tokenizer-path data/tokenizers/data_anchor/anchored_tokenizer.json \ --device cuda @@ -74,7 +74,7 @@ python -m rtp_codec.benchmarks.representations.preflight_author_global_embedding python -m rtp_codec.benchmarks.runtime.benchmark_rtp_runtime --help ``` -The [protocol documents](protocols/) and grouped [Slurm templates](../scripts/slurm/) specify the respective asset layouts and experiment arguments. Use the final consolidated [frozen comparison](../results/paper/external_author_global_comparison.tsv) for the article's main ESM2-35M and CDR3-only SCEPTR comparison; earlier 8M and annotation-aware controls answer different questions. +The [protocol documents](protocols) and grouped [Slurm templates](../research/scripts/slurm) specify the respective asset layouts and experiment arguments. Use the final consolidated [frozen comparison](../research/results/paper/external_author_global_comparison.tsv) for the article's main ESM2-35M and CDR3-only SCEPTR comparison; earlier 8M and annotation-aware controls answer different questions. ## 5. Validate before large runs diff --git a/docs/usage.md b/docs/usage.md new file mode 100644 index 0000000..e98a607 --- /dev/null +++ b/docs/usage.md @@ -0,0 +1,139 @@ +# Usage and experiment details + +**Learning Compact TCR Representations from Multiple Biological Objectives** + +Elizaveta Vlasova, Petr Grigorev, Mariia Demidova, Sergey Muravyov and Mikhail Shugay + +RTP-CODEC learns a **128-dimensional representation of a human TRB CDR3 amino-acid sequence**. A shared Transformer encoder is trained jointly to reconstruct the sequence (**R**), predict TCRemP reference coordinates (**T**), and estimate generation probability (**P**). Once trained, the encoder takes only the CDR3 sequence; TCRemP computation and V/J annotations are needed for training supervision, not for sequence encoding. + +This repository contains the model, training pipeline, tokenizers, evaluation tools and result tables accompanying the manuscript *RTP-CODEC: Learning Compact TCR Representations from Multiple Biological Objectives*. + + +The three heads provide supervision during training. The reusable representation is the encoder output before those heads. + +## Installation + +Python 3.11 or newer is required. From the repository root: + +```bash +git clone https://github.com/VEK239/rtp-codec.git +cd rtp-codec +python -m venv .venv +# Linux/macOS: +source .venv/bin/activate +# Windows PowerShell: .venv/Scripts/Activate.ps1 +python -m pip install --upgrade pip +python -m pip install -e . +``` + +For a CPU-only environment, install CPU PyTorch before the package: + +```bash +python -m pip install torch==2.4.1 --index-url https://download.pytorch.org/whl/cpu +python -m pip install -e ".[dev]" +``` + +Optional dependencies are grouped by purpose: + +| Extra | Purpose | +| --- | --- | +| `pgen` | OLGA-backed target generation through the pinned mirpy revision | +| `benchmarks` | ESM, TCR-BERT and SCEPTR representation comparisons | +| `tracking` | Weights & Biases logging for earlier training workflows | +| `notebooks` | Interactive analyses and plots | +| `dev` | CPU test suite | + +For example, `python -m pip install -e ".[pgen,benchmarks,dev]"`. External encoders also require their own model weights; TCRemP requires its separate installation and prototype data. The reported manuscript environment used PyTorch 2.4.1; GPU work additionally requires a compatible CUDA installation. + +## Encode sequences + +The repository contains source code and result tables. **Trained model weights, tokenizer bundles and the full benchmark data are not bundled here.** Encoding requires a compatible `best.pt` checkpoint and, for DATA-ANCHOR or WordPiece models, its original tokenizer bundle. See [data and model assets](../docs/assets.md). + +Prepare a TSV with a `junction_aa` column; [research/examples/data/sequences.tsv](../research/examples/data/sequences.tsv) shows the format. Each sequence must contain standard amino acids and fit the checkpoint's maximum length (40 residues in the manuscript). + +```bash +rtp-codec encode \ + --checkpoint artifacts/paper/rtp-seed42/best.pt \ + --tokenizer data/tokenizers/data_anchor/anchored_tokenizer.json \ + --input research/examples/data/sequences.tsv \ + --output artifacts/example_latents.npy \ + --device cpu +``` + +The output is a float32 NumPy matrix with one vector per input row in the same order, plus a JSON sidecar describing the input and matrix. The vector dimension comes from the checkpoint. `--tokenizer` relocates a saved bundle; it does not retrain or replace the tokenizer. Use `--sequence-column cdr3` for a differently named input column. + +The same interface is available in Python: + +```python +from rtp_codec.inference import load_encoder + +encoder = load_encoder( + "artifacts/paper/rtp-seed42/best.pt", + tokenizer_path="data/tokenizers/data_anchor/anchored_tokenizer.json", + device="cpu", +) +vectors = encoder.encode_sequences(["CASSLGQETQYF", "CASSIRSSYEQYF"]) +# vectors.shape == (2, 128) for the manuscript checkpoint +``` + +## Train the manuscript model + +The paper uses a locked synthetic TRB dataset of 99,430 unique receptors, split into 79,544 training, 9,943 validation and 9,943 test rows. DATA-ANCHOR edge motifs and target normalizers are fitted on training rows only. Its middle WordPiece vocabulary is trained on a separate 500,000-sequence OLGA corpus with all benchmark sequences excluded. Reconstruction always uses an autoregressive character decoder. + +Seven matched objective presets live in [research/configs/paper](../research/configs/paper): `r`, `t`, `p`, `rt`, `rp`, `tp` and `rtp`. Supply the prepared dataset and tokenizer paths: + +```bash +rtp-codec train \ + --config research/configs/paper/rtp.json \ + --data-dir data/benchmark/trb \ + --tokenizer-path data/tokenizers/data_anchor/anchored_tokenizer.json \ + --device cuda +``` + +These presets use a 128-dimensional bottleneck, hidden width 320, eight attention heads, four encoder and four decoder layers, batch size 64 and up to 40 epochs. Early stopping is disabled; the checkpoint with the lowest joint validation loss is retained. Command-line arguments override preset values. Training writes `best.pt`, `last.pt`, target normalization statistics, run configuration and evaluation metrics to the configured output directory. + +For data preparation, tokenizer construction, the full objective factorial and downstream evaluation, follow [the reproduction guide](../docs/reproduction.md). Cluster launchers are described in [docs/cluster.md](../docs/cluster.md). A new split or regenerated tokenizer constitutes a new experiment; it should not be presented as an exact reproduction of the locked manuscript runs. + +## Results reported in the manuscript + +Native heads on the held-out synthetic benchmark: + +| Objectives | Reconstruction exact match ↑ | TCRemP cosine ↑ | Pgen RMSE ↓ | +| --- | ---: | ---: | ---: | +| R | 0.9766 | — | — | +| T | — | 0.99149 | — | +| P | — | — | 0.2753 | +| RT | 0.9632 | 0.99178 | — | +| RP | 0.9813 | — | 0.2264 | +| TP | — | 0.99169 | 0.3496 | +| RTP | 0.9636 | 0.99190 | 0.2702 | + +Source: [matched objective factorial](../research/results/paper/factorial_results.tsv). Pgen means regression of `log10_pgen_1mm`. Dashes indicate inactive objectives. These results show an objective tradeoff: adding T to RP improves teacher agreement while reducing native reconstruction and Pgen performance. + +New heads trained on frozen representations provide a separate information-recovery comparison: + +| Frozen representation | Reconstruction exact match ↑ | Pgen RMSE ↓ | +| --- | ---: | ---: | +| RTP-CODEC | 0.8831 ± 0.0058 | 0.2375 ± 0.0008 | +| TCRemP | 0.5181 ± 0.0024 | 0.6038 ± 0.0019 | +| TCR-BERT | 0.4778 ± 0.0179 | 0.4299 ± 0.0022 | +| ESM2-35M | 0.2042 ± 0.0132 | 0.7086 ± 0.0033 | +| SCEPTR, CDR3-only | 0.8213 ± 0.0043 | 0.6637 ± 0.0062 | + +Source: [consolidated frozen-representation comparison](../research/results/paper/external_author_global_comparison.tsv). Values are mean ± standard deviation across probe seeds; reconstruction uses the common 64-dimensional comparison space. These are fresh probe heads, not the codec's native heads above. + +On the independent real VDJdb cohort, RTP-CODEC achieved macro Cohen's d of 0.6866 and improved epitope separation over RP for 31 of 40 epitopes. Native TCRemP and its PCA-128 control remained stronger (0.9563 and 0.8230). The manuscript's single runtime measurements on 68,302 receptors were 29.26 s for RTP-CODEC on CPU, 9.36 s on GPU and 350.25 s for 16-thread TCRemP. Timings exclude loading and warm-up and use different pipeline boundaries; they are hardware-specific, not a general speed guarantee. + +The [paper result index](../research/results/paper/README.md) links architecture, tokenizer, downstream and error-analysis tables with their provenance. Earlier benchmark tables are retained in [research/results/legacy](../research/results/legacy). + +## Repository layout + +The repository root contains `src/`, `research/` and `docs/`, plus package metadata, citation and license files. The library and CPU tests are under `src`; configurations, results, launchers, examples, environments and historical notebooks are grouped under `research`. See [the research index](../research/README.md). + +Run `python -m pytest -q` after installing the `dev` extra. GitHub Actions also checks the public CLI and shell syntax. + +## Citation and license + +Please cite *RTP-CODEC: Learning Compact TCR Representations from Multiple Biological Objectives* by Elizaveta Vlasova, Petr Grigorev, Mariia Demidova, Sergey Muravyov and Mikhail Shugay. Accepted to BioFM @ ICDM'26. [CITATION.cff](../CITATION.cff) provides software citation metadata. + +The code is distributed under [GNU GPL v3](../LICENSE). External models and datasets retain their own licenses. diff --git a/pyproject.toml b/pyproject.toml index b3497ec..a722e78 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -34,6 +34,7 @@ Issues = "https://github.com/VEK239/rtp-codec/issues" [tool.setuptools.packages.find] where = ["src"] +include = ["rtp_codec*"] [tool.pytest.ini_options] -testpaths = ["tests"] +testpaths = ["src/tests"] diff --git a/research/README.md b/research/README.md new file mode 100644 index 0000000..aaeeccc --- /dev/null +++ b/research/README.md @@ -0,0 +1,14 @@ +# Research materials + +| Directory | Contents | +| --- | --- | +| [configs/paper](configs/paper/) | Seven matched DATA-ANCHOR R/T/P objective presets | +| [results/paper](results/paper/README.md) | Manuscript result tables and provenance | +| [scripts](scripts/) | Shell and Slurm launchers grouped by task | +| [examples](examples/) | Small example inputs | +| [notebooks](notebooks/README.md) | Exploratory and historical analyses | +| [environments](environments/) | Optional dependency-installation shortcuts | + +[Reproduction guide](../docs/reproduction.md) · [Cluster execution](../docs/cluster.md) · [Usage](../docs/usage.md) + +Commands run from the repository root. Generated datasets and training outputs are external to this versioned directory; historical configs and result values remain unchanged. diff --git a/configs/paper/p.json b/research/configs/paper/p.json similarity index 100% rename from configs/paper/p.json rename to research/configs/paper/p.json diff --git a/configs/paper/r.json b/research/configs/paper/r.json similarity index 100% rename from configs/paper/r.json rename to research/configs/paper/r.json diff --git a/configs/paper/rp.json b/research/configs/paper/rp.json similarity index 100% rename from configs/paper/rp.json rename to research/configs/paper/rp.json diff --git a/configs/paper/rt.json b/research/configs/paper/rt.json similarity index 100% rename from configs/paper/rt.json rename to research/configs/paper/rt.json diff --git a/configs/paper/rtp.json b/research/configs/paper/rtp.json similarity index 100% rename from configs/paper/rtp.json rename to research/configs/paper/rtp.json diff --git a/configs/paper/t.json b/research/configs/paper/t.json similarity index 100% rename from configs/paper/t.json rename to research/configs/paper/t.json diff --git a/configs/paper/tp.json b/research/configs/paper/tp.json similarity index 100% rename from configs/paper/tp.json rename to research/configs/paper/tp.json diff --git a/configs/trb/anchored-tokenizer-study/stage_manifest.json b/research/configs/trb/anchored-tokenizer-study/stage_manifest.json similarity index 100% rename from configs/trb/anchored-tokenizer-study/stage_manifest.json rename to research/configs/trb/anchored-tokenizer-study/stage_manifest.json diff --git a/configs/trb/phase1-rq1-char-seed42/experiment_manifest.json b/research/configs/trb/phase1-rq1-char-seed42/experiment_manifest.json similarity index 100% rename from configs/trb/phase1-rq1-char-seed42/experiment_manifest.json rename to research/configs/trb/phase1-rq1-char-seed42/experiment_manifest.json diff --git a/configs/trb/phase2-rq23-char-seed42/experiment_manifest.json b/research/configs/trb/phase2-rq23-char-seed42/experiment_manifest.json similarity index 100% rename from configs/trb/phase2-rq23-char-seed42/experiment_manifest.json rename to research/configs/trb/phase2-rq23-char-seed42/experiment_manifest.json diff --git a/configs/trb/rq1-char-r-seed42/experiment_config.json b/research/configs/trb/rq1-char-r-seed42/experiment_config.json similarity index 100% rename from configs/trb/rq1-char-r-seed42/experiment_config.json rename to research/configs/trb/rq1-char-r-seed42/experiment_config.json diff --git a/configs/trb/rq1-char-rtp-seed42/experiment_config.json b/research/configs/trb/rq1-char-rtp-seed42/experiment_config.json similarity index 100% rename from configs/trb/rq1-char-rtp-seed42/experiment_config.json rename to research/configs/trb/rq1-char-rtp-seed42/experiment_config.json diff --git a/configs/trb/rq2-char-rp-seed42/experiment_config.json b/research/configs/trb/rq2-char-rp-seed42/experiment_config.json similarity index 100% rename from configs/trb/rq2-char-rp-seed42/experiment_config.json rename to research/configs/trb/rq2-char-rp-seed42/experiment_config.json diff --git a/configs/trb/rq2-char-rt-seed42/experiment_config.json b/research/configs/trb/rq2-char-rt-seed42/experiment_config.json similarity index 100% rename from configs/trb/rq2-char-rt-seed42/experiment_config.json rename to research/configs/trb/rq2-char-rt-seed42/experiment_config.json diff --git a/configs/trb/rq4-wordpiece-r-seed42/experiment_config.json b/research/configs/trb/rq4-wordpiece-r-seed42/experiment_config.json similarity index 100% rename from configs/trb/rq4-wordpiece-r-seed42/experiment_config.json rename to research/configs/trb/rq4-wordpiece-r-seed42/experiment_config.json diff --git a/configs/trb/rq4-wordpiece-rtp-seed42/experiment_config.json b/research/configs/trb/rq4-wordpiece-rtp-seed42/experiment_config.json similarity index 100% rename from configs/trb/rq4-wordpiece-rtp-seed42/experiment_config.json rename to research/configs/trb/rq4-wordpiece-rtp-seed42/experiment_config.json diff --git a/configs/trb/rq4-wordpiece-seed42/experiment_manifest.json b/research/configs/trb/rq4-wordpiece-seed42/experiment_manifest.json similarity index 100% rename from configs/trb/rq4-wordpiece-seed42/experiment_manifest.json rename to research/configs/trb/rq4-wordpiece-seed42/experiment_manifest.json diff --git a/configs/trb/rq5-char-rtp-d128-depths-seed42/experiment_manifest.json b/research/configs/trb/rq5-char-rtp-d128-depths-seed42/experiment_manifest.json similarity index 100% rename from configs/trb/rq5-char-rtp-d128-depths-seed42/experiment_manifest.json rename to research/configs/trb/rq5-char-rtp-d128-depths-seed42/experiment_manifest.json diff --git a/configs/trb/rq5-char-rtp-d128-e2d4-seed42/experiment_config.json b/research/configs/trb/rq5-char-rtp-d128-e2d4-seed42/experiment_config.json similarity index 100% rename from configs/trb/rq5-char-rtp-d128-e2d4-seed42/experiment_config.json rename to research/configs/trb/rq5-char-rtp-d128-e2d4-seed42/experiment_config.json diff --git a/configs/trb/rq5-char-rtp-d128-e6d4-seed42/experiment_config.json b/research/configs/trb/rq5-char-rtp-d128-e6d4-seed42/experiment_config.json similarity index 100% rename from configs/trb/rq5-char-rtp-d128-e6d4-seed42/experiment_config.json rename to research/configs/trb/rq5-char-rtp-d128-e6d4-seed42/experiment_config.json diff --git a/configs/trb/rq5-char-rtp-d128-seed42/experiment_config.json b/research/configs/trb/rq5-char-rtp-d128-seed42/experiment_config.json similarity index 100% rename from configs/trb/rq5-char-rtp-d128-seed42/experiment_config.json rename to research/configs/trb/rq5-char-rtp-d128-seed42/experiment_config.json diff --git a/configs/trb/rq5-char-rtp-d512-seed42/experiment_config.json b/research/configs/trb/rq5-char-rtp-d512-seed42/experiment_config.json similarity index 100% rename from configs/trb/rq5-char-rtp-d512-seed42/experiment_config.json rename to research/configs/trb/rq5-char-rtp-d512-seed42/experiment_config.json diff --git a/configs/trb/rq5-char-rtp-widths-seed42/experiment_manifest.json b/research/configs/trb/rq5-char-rtp-widths-seed42/experiment_manifest.json similarity index 100% rename from configs/trb/rq5-char-rtp-widths-seed42/experiment_manifest.json rename to research/configs/trb/rq5-char-rtp-widths-seed42/experiment_manifest.json diff --git a/configs/trb/wordpiece-sweep-seed42/experiment_manifest.json b/research/configs/trb/wordpiece-sweep-seed42/experiment_manifest.json similarity index 100% rename from configs/trb/wordpiece-sweep-seed42/experiment_manifest.json rename to research/configs/trb/wordpiece-sweep-seed42/experiment_manifest.json diff --git a/configs/trb/wordpiece-sweep-seed42/validation_results.md b/research/configs/trb/wordpiece-sweep-seed42/validation_results.md similarity index 100% rename from configs/trb/wordpiece-sweep-seed42/validation_results.md rename to research/configs/trb/wordpiece-sweep-seed42/validation_results.md diff --git a/requirements/benchmarks.txt b/research/environments/benchmarks.txt similarity index 100% rename from requirements/benchmarks.txt rename to research/environments/benchmarks.txt diff --git a/requirements/dev.txt b/research/environments/dev.txt similarity index 100% rename from requirements/dev.txt rename to research/environments/dev.txt diff --git a/requirements/full.txt b/research/environments/full.txt similarity index 100% rename from requirements/full.txt rename to research/environments/full.txt diff --git a/requirements/runtime.txt b/research/environments/runtime.txt similarity index 100% rename from requirements/runtime.txt rename to research/environments/runtime.txt diff --git a/examples/data/sequences.tsv b/research/examples/data/sequences.tsv similarity index 100% rename from examples/data/sequences.tsv rename to research/examples/data/sequences.tsv diff --git a/examples/data/viral_antigen_species_2025_07_30.txt b/research/examples/data/viral_antigen_species_2025_07_30.txt similarity index 100% rename from examples/data/viral_antigen_species_2025_07_30.txt rename to research/examples/data/viral_antigen_species_2025_07_30.txt diff --git a/notebooks/README.md b/research/notebooks/README.md similarity index 100% rename from notebooks/README.md rename to research/notebooks/README.md diff --git a/notebooks/analysis/architecture_comparison_report.ipynb b/research/notebooks/analysis/architecture_comparison_report.ipynb similarity index 100% rename from notebooks/analysis/architecture_comparison_report.ipynb rename to research/notebooks/analysis/architecture_comparison_report.ipynb diff --git a/notebooks/analysis/compare_forward_tokenizers_report.ipynb b/research/notebooks/analysis/compare_forward_tokenizers_report.ipynb similarity index 100% rename from notebooks/analysis/compare_forward_tokenizers_report.ipynb rename to research/notebooks/analysis/compare_forward_tokenizers_report.ipynb diff --git a/notebooks/analysis/convergence_curves_by_epoch_report.ipynb b/research/notebooks/analysis/convergence_curves_by_epoch_report.ipynb similarity index 100% rename from notebooks/analysis/convergence_curves_by_epoch_report.ipynb rename to research/notebooks/analysis/convergence_curves_by_epoch_report.ipynb diff --git a/notebooks/analysis/tokenizer_stats_report.ipynb b/research/notebooks/analysis/tokenizer_stats_report.ipynb similarity index 100% rename from notebooks/analysis/tokenizer_stats_report.ipynb rename to research/notebooks/analysis/tokenizer_stats_report.ipynb diff --git a/notebooks/legacy/example_inverse_run_and_analysis.ipynb b/research/notebooks/legacy/example_inverse_run_and_analysis.ipynb similarity index 100% rename from notebooks/legacy/example_inverse_run_and_analysis.ipynb rename to research/notebooks/legacy/example_inverse_run_and_analysis.ipynb diff --git a/notebooks/legacy/example_run_and_analysis-Copy1.ipynb b/research/notebooks/legacy/example_run_and_analysis-Copy1.ipynb similarity index 100% rename from notebooks/legacy/example_run_and_analysis-Copy1.ipynb rename to research/notebooks/legacy/example_run_and_analysis-Copy1.ipynb diff --git a/notebooks/legacy/example_run_and_analysis.ipynb b/research/notebooks/legacy/example_run_and_analysis.ipynb similarity index 100% rename from notebooks/legacy/example_run_and_analysis.ipynb rename to research/notebooks/legacy/example_run_and_analysis.ipynb diff --git a/notebooks/legacy/forward_background_100k_multichain_analysis.ipynb b/research/notebooks/legacy/forward_background_100k_multichain_analysis.ipynb similarity index 100% rename from notebooks/legacy/forward_background_100k_multichain_analysis.ipynb rename to research/notebooks/legacy/forward_background_100k_multichain_analysis.ipynb diff --git a/notebooks/legacy/generate_datasets.ipynb b/research/notebooks/legacy/generate_datasets.ipynb similarity index 100% rename from notebooks/legacy/generate_datasets.ipynb rename to research/notebooks/legacy/generate_datasets.ipynb diff --git a/notebooks/legacy/inverse_background_100k_multichain_analysis.ipynb b/research/notebooks/legacy/inverse_background_100k_multichain_analysis.ipynb similarity index 100% rename from notebooks/legacy/inverse_background_100k_multichain_analysis.ipynb rename to research/notebooks/legacy/inverse_background_100k_multichain_analysis.ipynb diff --git a/notebooks/legacy/pgen_run_and_analysis.ipynb b/research/notebooks/legacy/pgen_run_and_analysis.ipynb similarity index 100% rename from notebooks/legacy/pgen_run_and_analysis.ipynb rename to research/notebooks/legacy/pgen_run_and_analysis.ipynb diff --git a/notebooks/legacy/trb_1kk.ipynb b/research/notebooks/legacy/trb_1kk.ipynb similarity index 100% rename from notebooks/legacy/trb_1kk.ipynb rename to research/notebooks/legacy/trb_1kk.ipynb diff --git a/results/legacy/dataset_summary.json b/research/results/legacy/dataset_summary.json similarity index 100% rename from results/legacy/dataset_summary.json rename to research/results/legacy/dataset_summary.json diff --git a/results/legacy/pgen/pgen_runs.csv b/research/results/legacy/pgen/pgen_runs.csv similarity index 100% rename from results/legacy/pgen/pgen_runs.csv rename to research/results/legacy/pgen/pgen_runs.csv diff --git a/results/legacy/pgen/pgen_summary.csv b/research/results/legacy/pgen/pgen_summary.csv similarity index 100% rename from results/legacy/pgen/pgen_summary.csv rename to research/results/legacy/pgen/pgen_summary.csv diff --git a/results/legacy/pgen/pgen_summary.md b/research/results/legacy/pgen/pgen_summary.md similarity index 100% rename from results/legacy/pgen/pgen_summary.md rename to research/results/legacy/pgen/pgen_summary.md diff --git a/results/legacy/pgen/pretraining_delta.csv b/research/results/legacy/pgen/pretraining_delta.csv similarity index 100% rename from results/legacy/pgen/pretraining_delta.csv rename to research/results/legacy/pgen/pretraining_delta.csv diff --git a/results/legacy/pgen/speed_end_to_end_cpu.csv b/research/results/legacy/pgen/speed_end_to_end_cpu.csv similarity index 100% rename from results/legacy/pgen/speed_end_to_end_cpu.csv rename to research/results/legacy/pgen/speed_end_to_end_cpu.csv diff --git a/results/legacy/pgen/speed_end_to_end_cuda.csv b/research/results/legacy/pgen/speed_end_to_end_cuda.csv similarity index 100% rename from results/legacy/pgen/speed_end_to_end_cuda.csv rename to research/results/legacy/pgen/speed_end_to_end_cuda.csv diff --git a/results/legacy/pgen_constlr/pgen_runs.csv b/research/results/legacy/pgen_constlr/pgen_runs.csv similarity index 100% rename from results/legacy/pgen_constlr/pgen_runs.csv rename to research/results/legacy/pgen_constlr/pgen_runs.csv diff --git a/results/legacy/pgen_constlr/pgen_summary.csv b/research/results/legacy/pgen_constlr/pgen_summary.csv similarity index 100% rename from results/legacy/pgen_constlr/pgen_summary.csv rename to research/results/legacy/pgen_constlr/pgen_summary.csv diff --git a/results/legacy/pgen_constlr/pgen_summary.md b/research/results/legacy/pgen_constlr/pgen_summary.md similarity index 100% rename from results/legacy/pgen_constlr/pgen_summary.md rename to research/results/legacy/pgen_constlr/pgen_summary.md diff --git a/results/legacy/pgen_constlr/pretraining_delta.csv b/research/results/legacy/pgen_constlr/pretraining_delta.csv similarity index 100% rename from results/legacy/pgen_constlr/pretraining_delta.csv rename to research/results/legacy/pgen_constlr/pretraining_delta.csv diff --git a/results/legacy/reconstruction/reconstruction_runs.csv b/research/results/legacy/reconstruction/reconstruction_runs.csv similarity index 100% rename from results/legacy/reconstruction/reconstruction_runs.csv rename to research/results/legacy/reconstruction/reconstruction_runs.csv diff --git a/results/legacy/reconstruction/reconstruction_summary.csv b/research/results/legacy/reconstruction/reconstruction_summary.csv similarity index 100% rename from results/legacy/reconstruction/reconstruction_summary.csv rename to research/results/legacy/reconstruction/reconstruction_summary.csv diff --git a/results/legacy/reconstruction/reconstruction_summary.md b/research/results/legacy/reconstruction/reconstruction_summary.md similarity index 100% rename from results/legacy/reconstruction/reconstruction_summary.md rename to research/results/legacy/reconstruction/reconstruction_summary.md diff --git a/results/paper/README.md b/research/results/paper/README.md similarity index 100% rename from results/paper/README.md rename to research/results/paper/README.md diff --git a/results/paper/architecture_results.tsv b/research/results/paper/architecture_results.tsv similarity index 100% rename from results/paper/architecture_results.tsv rename to research/results/paper/architecture_results.tsv diff --git a/results/paper/downstream_distribution_summary.tsv b/research/results/paper/downstream_distribution_summary.tsv similarity index 100% rename from results/paper/downstream_distribution_summary.tsv rename to research/results/paper/downstream_distribution_summary.tsv diff --git a/results/paper/downstream_per_epitope_controls.tsv b/research/results/paper/downstream_per_epitope_controls.tsv similarity index 100% rename from results/paper/downstream_per_epitope_controls.tsv rename to research/results/paper/downstream_per_epitope_controls.tsv diff --git a/results/paper/downstream_per_epitope_metrics.tsv b/research/results/paper/downstream_per_epitope_metrics.tsv similarity index 100% rename from results/paper/downstream_per_epitope_metrics.tsv rename to research/results/paper/downstream_per_epitope_metrics.tsv diff --git a/results/paper/downstream_rtp_minus_rp_effects.tsv b/research/results/paper/downstream_rtp_minus_rp_effects.tsv similarity index 100% rename from results/paper/downstream_rtp_minus_rp_effects.tsv rename to research/results/paper/downstream_rtp_minus_rp_effects.tsv diff --git a/results/paper/external_author_global_comparison.md b/research/results/paper/external_author_global_comparison.md similarity index 100% rename from results/paper/external_author_global_comparison.md rename to research/results/paper/external_author_global_comparison.md diff --git a/results/paper/external_author_global_comparison.tsv b/research/results/paper/external_author_global_comparison.tsv similarity index 100% rename from results/paper/external_author_global_comparison.tsv rename to research/results/paper/external_author_global_comparison.tsv diff --git a/results/paper/external_author_global_comparison_manifest.json b/research/results/paper/external_author_global_comparison_manifest.json similarity index 100% rename from results/paper/external_author_global_comparison_manifest.json rename to research/results/paper/external_author_global_comparison_manifest.json diff --git a/results/paper/external_pgen_results.tsv b/research/results/paper/external_pgen_results.tsv similarity index 100% rename from results/paper/external_pgen_results.tsv rename to research/results/paper/external_pgen_results.tsv diff --git a/results/paper/external_pgen_runs.tsv b/research/results/paper/external_pgen_runs.tsv similarity index 100% rename from results/paper/external_pgen_runs.tsv rename to research/results/paper/external_pgen_runs.tsv diff --git a/results/paper/external_reconstruction_results.tsv b/research/results/paper/external_reconstruction_results.tsv similarity index 100% rename from results/paper/external_reconstruction_results.tsv rename to research/results/paper/external_reconstruction_results.tsv diff --git a/results/paper/external_reconstruction_runs.tsv b/research/results/paper/external_reconstruction_runs.tsv similarity index 100% rename from results/paper/external_reconstruction_runs.tsv rename to research/results/paper/external_reconstruction_runs.tsv diff --git a/results/paper/factorial_results.tsv b/research/results/paper/factorial_results.tsv similarity index 100% rename from results/paper/factorial_results.tsv rename to research/results/paper/factorial_results.tsv diff --git a/results/paper/latent_sufficiency_summary.tsv b/research/results/paper/latent_sufficiency_summary.tsv similarity index 100% rename from results/paper/latent_sufficiency_summary.tsv rename to research/results/paper/latent_sufficiency_summary.tsv diff --git a/results/paper/low_label_sequence_summary.tsv b/research/results/paper/low_label_sequence_summary.tsv similarity index 100% rename from results/paper/low_label_sequence_summary.tsv rename to research/results/paper/low_label_sequence_summary.tsv diff --git a/results/paper/provenance_and_hashes.tsv b/research/results/paper/provenance_and_hashes.tsv similarity index 100% rename from results/paper/provenance_and_hashes.tsv rename to research/results/paper/provenance_and_hashes.tsv diff --git a/results/paper/rtp_data_anchor_error_analysis_by_length.tsv b/research/results/paper/rtp_data_anchor_error_analysis_by_length.tsv similarity index 100% rename from results/paper/rtp_data_anchor_error_analysis_by_length.tsv rename to research/results/paper/rtp_data_anchor_error_analysis_by_length.tsv diff --git a/results/paper/rtp_data_anchor_error_rates_by_target_length.tsv b/research/results/paper/rtp_data_anchor_error_rates_by_target_length.tsv similarity index 100% rename from results/paper/rtp_data_anchor_error_rates_by_target_length.tsv rename to research/results/paper/rtp_data_anchor_error_rates_by_target_length.tsv diff --git a/results/paper/rtp_data_anchor_region_error_rates.tsv b/research/results/paper/rtp_data_anchor_region_error_rates.tsv similarity index 100% rename from results/paper/rtp_data_anchor_region_error_rates.tsv rename to research/results/paper/rtp_data_anchor_region_error_rates.tsv diff --git a/results/paper/rtp_data_anchor_substitution_matrix.tsv b/research/results/paper/rtp_data_anchor_substitution_matrix.tsv similarity index 100% rename from results/paper/rtp_data_anchor_substitution_matrix.tsv rename to research/results/paper/rtp_data_anchor_substitution_matrix.tsv diff --git a/results/paper/rtp_data_anchor_substitution_results.json b/research/results/paper/rtp_data_anchor_substitution_results.json similarity index 100% rename from results/paper/rtp_data_anchor_substitution_results.json rename to research/results/paper/rtp_data_anchor_substitution_results.json diff --git a/results/paper/tokenizer_results.tsv b/research/results/paper/tokenizer_results.tsv similarity index 100% rename from results/paper/tokenizer_results.tsv rename to research/results/paper/tokenizer_results.tsv diff --git a/scripts/legacy/run1_default_40epochs.sh b/research/scripts/legacy/run1_default_40epochs.sh similarity index 100% rename from scripts/legacy/run1_default_40epochs.sh rename to research/scripts/legacy/run1_default_40epochs.sh diff --git a/scripts/legacy/run2_maxtokenlen9_40epochs.sh b/research/scripts/legacy/run2_maxtokenlen9_40epochs.sh similarity index 100% rename from scripts/legacy/run2_maxtokenlen9_40epochs.sh rename to research/scripts/legacy/run2_maxtokenlen9_40epochs.sh diff --git a/research/scripts/legacy/run3_all_sequential.sh b/research/scripts/legacy/run3_all_sequential.sh new file mode 100644 index 0000000..45f92bb --- /dev/null +++ b/research/scripts/legacy/run3_all_sequential.sh @@ -0,0 +1,4 @@ +#!/bin/bash +bash research/scripts/legacy/run3a_individual_maxlen.sh +bash research/scripts/legacy/run3b_individual_maxlen_maxtokenlen9.sh +bash research/scripts/legacy/run3c_fixed_maxlen10.sh diff --git a/scripts/legacy/run3a_individual_maxlen.sh b/research/scripts/legacy/run3a_individual_maxlen.sh similarity index 100% rename from scripts/legacy/run3a_individual_maxlen.sh rename to research/scripts/legacy/run3a_individual_maxlen.sh diff --git a/scripts/legacy/run3b_individual_maxlen_maxtokenlen9.sh b/research/scripts/legacy/run3b_individual_maxlen_maxtokenlen9.sh similarity index 100% rename from scripts/legacy/run3b_individual_maxlen_maxtokenlen9.sh rename to research/scripts/legacy/run3b_individual_maxlen_maxtokenlen9.sh diff --git a/scripts/legacy/run3c_fixed_maxlen10.sh b/research/scripts/legacy/run3c_fixed_maxlen10.sh similarity index 100% rename from scripts/legacy/run3c_fixed_maxlen10.sh rename to research/scripts/legacy/run3c_fixed_maxlen10.sh diff --git a/research/scripts/legacy/run4_all_sequential.sh b/research/scripts/legacy/run4_all_sequential.sh new file mode 100644 index 0000000..607207a --- /dev/null +++ b/research/scripts/legacy/run4_all_sequential.sh @@ -0,0 +1,4 @@ +#!/bin/bash +export PYTHONPATH="$PWD/src${PYTHONPATH:+:$PYTHONPATH}" +bash research/scripts/legacy/run4a_individual_maxlen_maxtokenlen9_anchored.sh +bash research/scripts/legacy/run4b_individual_maxlen_maxtokenlen9_anchored_dropout.sh diff --git a/scripts/legacy/run4a_individual_maxlen_maxtokenlen9_anchored.sh b/research/scripts/legacy/run4a_individual_maxlen_maxtokenlen9_anchored.sh similarity index 100% rename from scripts/legacy/run4a_individual_maxlen_maxtokenlen9_anchored.sh rename to research/scripts/legacy/run4a_individual_maxlen_maxtokenlen9_anchored.sh diff --git a/scripts/legacy/run4b_individual_maxlen_maxtokenlen9_anchored_dropout.sh b/research/scripts/legacy/run4b_individual_maxlen_maxtokenlen9_anchored_dropout.sh similarity index 100% rename from scripts/legacy/run4b_individual_maxlen_maxtokenlen9_anchored_dropout.sh rename to research/scripts/legacy/run4b_individual_maxlen_maxtokenlen9_anchored_dropout.sh diff --git a/research/scripts/legacy/run5_all_sequential.sh b/research/scripts/legacy/run5_all_sequential.sh new file mode 100644 index 0000000..4ffc3b3 --- /dev/null +++ b/research/scripts/legacy/run5_all_sequential.sh @@ -0,0 +1,6 @@ +#!/bin/bash +export PYTHONPATH="$PWD/src${PYTHONPATH:+:$PYTHONPATH}" +bash research/scripts/legacy/run5a_hidden128.sh +bash research/scripts/legacy/run5b_blocks3.sh +bash research/scripts/legacy/run5c_hidden128_blocks3.sh +bash research/scripts/legacy/run5d_hidden96_blocks3.sh diff --git a/scripts/legacy/run5a_hidden128.sh b/research/scripts/legacy/run5a_hidden128.sh similarity index 100% rename from scripts/legacy/run5a_hidden128.sh rename to research/scripts/legacy/run5a_hidden128.sh diff --git a/scripts/legacy/run5b_blocks3.sh b/research/scripts/legacy/run5b_blocks3.sh similarity index 100% rename from scripts/legacy/run5b_blocks3.sh rename to research/scripts/legacy/run5b_blocks3.sh diff --git a/scripts/legacy/run5c_hidden128_blocks3.sh b/research/scripts/legacy/run5c_hidden128_blocks3.sh similarity index 100% rename from scripts/legacy/run5c_hidden128_blocks3.sh rename to research/scripts/legacy/run5c_hidden128_blocks3.sh diff --git a/scripts/legacy/run5d_hidden96_blocks3.sh b/research/scripts/legacy/run5d_hidden96_blocks3.sh similarity index 100% rename from scripts/legacy/run5d_hidden96_blocks3.sh rename to research/scripts/legacy/run5d_hidden96_blocks3.sh diff --git a/scripts/legacy/run_both_sequential.sh b/research/scripts/legacy/run_both_sequential.sh similarity index 100% rename from scripts/legacy/run_both_sequential.sh rename to research/scripts/legacy/run_both_sequential.sh diff --git a/scripts/legacy/run_compare_100k.sh b/research/scripts/legacy/run_compare_100k.sh similarity index 100% rename from scripts/legacy/run_compare_100k.sh rename to research/scripts/legacy/run_compare_100k.sh diff --git a/scripts/legacy/run_compare_40epochs_upto30k.sh b/research/scripts/legacy/run_compare_40epochs_upto30k.sh similarity index 100% rename from scripts/legacy/run_compare_40epochs_upto30k.sh rename to research/scripts/legacy/run_compare_40epochs_upto30k.sh diff --git a/scripts/legacy/run_compare_finegrid_maxlen9_40epochs.sh b/research/scripts/legacy/run_compare_finegrid_maxlen9_40epochs.sh similarity index 100% rename from scripts/legacy/run_compare_finegrid_maxlen9_40epochs.sh rename to research/scripts/legacy/run_compare_finegrid_maxlen9_40epochs.sh diff --git a/scripts/legacy/run_compare_finegrid_maxlen9_50epochs.sh b/research/scripts/legacy/run_compare_finegrid_maxlen9_50epochs.sh similarity index 100% rename from scripts/legacy/run_compare_finegrid_maxlen9_50epochs.sh rename to research/scripts/legacy/run_compare_finegrid_maxlen9_50epochs.sh diff --git a/scripts/legacy/train_forward.sh b/research/scripts/legacy/train_forward.sh similarity index 100% rename from scripts/legacy/train_forward.sh rename to research/scripts/legacy/train_forward.sh diff --git a/scripts/legacy/train_inverse.sh b/research/scripts/legacy/train_inverse.sh similarity index 100% rename from scripts/legacy/train_inverse.sh rename to research/scripts/legacy/train_inverse.sh diff --git a/scripts/slurm/data/cache_author_global_embeddings.sbatch b/research/scripts/slurm/data/cache_author_global_embeddings.sbatch similarity index 100% rename from scripts/slurm/data/cache_author_global_embeddings.sbatch rename to research/scripts/slurm/data/cache_author_global_embeddings.sbatch diff --git a/scripts/slurm/data/cache_author_global_sceptr_cdr3.sbatch b/research/scripts/slurm/data/cache_author_global_sceptr_cdr3.sbatch similarity index 100% rename from scripts/slurm/data/cache_author_global_sceptr_cdr3.sbatch rename to research/scripts/slurm/data/cache_author_global_sceptr_cdr3.sbatch diff --git a/scripts/slurm/data/cache_external_model_embeddings.sbatch b/research/scripts/slurm/data/cache_external_model_embeddings.sbatch similarity index 100% rename from scripts/slurm/data/cache_external_model_embeddings.sbatch rename to research/scripts/slurm/data/cache_external_model_embeddings.sbatch diff --git a/scripts/slurm/data/cache_external_residue_embeddings.sbatch b/research/scripts/slurm/data/cache_external_residue_embeddings.sbatch similarity index 100% rename from scripts/slurm/data/cache_external_residue_embeddings.sbatch rename to research/scripts/slurm/data/cache_external_residue_embeddings.sbatch diff --git a/scripts/slurm/data/calc_pgen_1mm.sbatch b/research/scripts/slurm/data/calc_pgen_1mm.sbatch similarity index 98% rename from scripts/slurm/data/calc_pgen_1mm.sbatch rename to research/scripts/slurm/data/calc_pgen_1mm.sbatch index a09a230..e834a0b 100644 --- a/scripts/slurm/data/calc_pgen_1mm.sbatch +++ b/research/scripts/slurm/data/calc_pgen_1mm.sbatch @@ -9,7 +9,7 @@ set -euo pipefail -ROOT_DIR="${SLURM_SUBMIT_DIR:-$(cd "$(dirname "${BASH_SOURCE[0]}")/../../.." && pwd)}" +ROOT_DIR="${SLURM_SUBMIT_DIR:-$(cd "$(dirname "${BASH_SOURCE[0]}")/../../../.." && pwd)}" cd "$ROOT_DIR" mkdir -p slurm/logs diff --git a/scripts/slurm/data/calc_pgen_1mm_background_100k_array.sbatch b/research/scripts/slurm/data/calc_pgen_1mm_background_100k_array.sbatch similarity index 98% rename from scripts/slurm/data/calc_pgen_1mm_background_100k_array.sbatch rename to research/scripts/slurm/data/calc_pgen_1mm_background_100k_array.sbatch index 86c4cda..778520c 100644 --- a/scripts/slurm/data/calc_pgen_1mm_background_100k_array.sbatch +++ b/research/scripts/slurm/data/calc_pgen_1mm_background_100k_array.sbatch @@ -12,7 +12,7 @@ set -euo pipefail -ROOT_DIR="${SLURM_SUBMIT_DIR:-$(cd "$(dirname "${BASH_SOURCE[0]}")/../../.." && pwd)}" +ROOT_DIR="${SLURM_SUBMIT_DIR:-$(cd "$(dirname "${BASH_SOURCE[0]}")/../../../.." && pwd)}" cd "$ROOT_DIR" CHAINS=(TRB) diff --git a/scripts/slurm/data/calc_pgen_1mm_trb_background_100k.sbatch b/research/scripts/slurm/data/calc_pgen_1mm_trb_background_100k.sbatch similarity index 97% rename from scripts/slurm/data/calc_pgen_1mm_trb_background_100k.sbatch rename to research/scripts/slurm/data/calc_pgen_1mm_trb_background_100k.sbatch index f707c66..ddbf03d 100644 --- a/scripts/slurm/data/calc_pgen_1mm_trb_background_100k.sbatch +++ b/research/scripts/slurm/data/calc_pgen_1mm_trb_background_100k.sbatch @@ -9,7 +9,7 @@ set -euo pipefail -ROOT_DIR="${SLURM_SUBMIT_DIR:-$(cd "$(dirname "${BASH_SOURCE[0]}")/../../.." && pwd)}" +ROOT_DIR="${SLURM_SUBMIT_DIR:-$(cd "$(dirname "${BASH_SOURCE[0]}")/../../../.." && pwd)}" cd "$ROOT_DIR" AIRR_PATH="/projects/immunestatus/vdjrearm/airr_format/trb_background_100k.tsv" diff --git a/scripts/slurm/data/fit_author_global_bottleneck.sbatch b/research/scripts/slurm/data/fit_author_global_bottleneck.sbatch similarity index 100% rename from scripts/slurm/data/fit_author_global_bottleneck.sbatch rename to research/scripts/slurm/data/fit_author_global_bottleneck.sbatch diff --git a/scripts/slurm/data/fit_external_model_bottleneck.sbatch b/research/scripts/slurm/data/fit_external_model_bottleneck.sbatch similarity index 100% rename from scripts/slurm/data/fit_external_model_bottleneck.sbatch rename to research/scripts/slurm/data/fit_external_model_bottleneck.sbatch diff --git a/scripts/slurm/data/fit_external_residue_pca128_all.sbatch b/research/scripts/slurm/data/fit_external_residue_pca128_all.sbatch similarity index 100% rename from scripts/slurm/data/fit_external_residue_pca128_all.sbatch rename to research/scripts/slurm/data/fit_external_residue_pca128_all.sbatch diff --git a/scripts/slurm/data/fit_external_residue_pca256.sbatch b/research/scripts/slurm/data/fit_external_residue_pca256.sbatch similarity index 100% rename from scripts/slurm/data/fit_external_residue_pca256.sbatch rename to research/scripts/slurm/data/fit_external_residue_pca256.sbatch diff --git a/scripts/slurm/data/fit_external_sceptr_pca128.sbatch b/research/scripts/slurm/data/fit_external_sceptr_pca128.sbatch similarity index 100% rename from scripts/slurm/data/fit_external_sceptr_pca128.sbatch rename to research/scripts/slurm/data/fit_external_sceptr_pca128.sbatch diff --git a/scripts/slurm/data/install_external_benchmark_runtime.sbatch b/research/scripts/slurm/data/install_external_benchmark_runtime.sbatch similarity index 96% rename from scripts/slurm/data/install_external_benchmark_runtime.sbatch rename to research/scripts/slurm/data/install_external_benchmark_runtime.sbatch index 2fb3089..e4b7e89 100644 --- a/scripts/slurm/data/install_external_benchmark_runtime.sbatch +++ b/research/scripts/slurm/data/install_external_benchmark_runtime.sbatch @@ -104,6 +104,6 @@ print(json.dumps(report, indent=2, sort_keys=True)) PY cd "$REPO" -sha256sum scripts/slurm/data/install_external_benchmark_runtime.sbatch "$REPORT" > "$ROOT/HASHES.sha256" +sha256sum research/scripts/slurm/data/install_external_benchmark_runtime.sbatch "$REPORT" > "$ROOT/HASHES.sha256" echo "status=accepted" echo "runtime=$ROOT" diff --git a/scripts/slurm/data/install_wordpiece_dependency.sbatch b/research/scripts/slurm/data/install_wordpiece_dependency.sbatch similarity index 100% rename from scripts/slurm/data/install_wordpiece_dependency.sbatch rename to research/scripts/slurm/data/install_wordpiece_dependency.sbatch diff --git a/scripts/slurm/data/prepare_anchored_tokenizers.sbatch b/research/scripts/slurm/data/prepare_anchored_tokenizers.sbatch similarity index 95% rename from scripts/slurm/data/prepare_anchored_tokenizers.sbatch rename to research/scripts/slurm/data/prepare_anchored_tokenizers.sbatch index 3d99fca..8533004 100644 --- a/scripts/slurm/data/prepare_anchored_tokenizers.sbatch +++ b/research/scripts/slurm/data/prepare_anchored_tokenizers.sbatch @@ -24,7 +24,7 @@ cd "$ROOT_DIR" --data-dir "$DATA_DIR" \ --output-root "$TOKENIZER_ROOT" \ --external-corpus "$SOURCE_ROOT/sample/TRB_1e7.tsv.gz" \ - --generation-script "$SOURCE_ROOT/scripts/sample_murugan.sh" \ + --generation-script "$SOURCE_ROOT/research/scripts/sample_murugan.sh" \ --olga-model-dir "$SOURCE_ROOT/model/Homo+sapiens/TRB_orig" \ --external-rows 500000 --seed 42 "$PYTHON_BIN" -m rtp_codec.experiments.preflight.preflight_anchored_tokenizers \ diff --git a/scripts/slurm/data/prepare_external_model_cohort.sbatch b/research/scripts/slurm/data/prepare_external_model_cohort.sbatch similarity index 95% rename from scripts/slurm/data/prepare_external_model_cohort.sbatch rename to research/scripts/slurm/data/prepare_external_model_cohort.sbatch index 6b0b655..da44c0d 100644 --- a/scripts/slurm/data/prepare_external_model_cohort.sbatch +++ b/research/scripts/slurm/data/prepare_external_model_cohort.sbatch @@ -34,7 +34,7 @@ cd "$REPO" --device cpu \ --threads "${SLURM_CPUS_PER_TASK:-16}" -"$PYTHON" -m pytest tests/test_external_model_benchmark.py -q +"$PYTHON" -m pytest src/tests/test_external_model_benchmark.py -q sha256sum \ src/rtp_codec/benchmarks/datasets/prepare_external_model_cohort.py \ src/rtp_codec/benchmarks/representations/cache_external_model_embeddings.py \ diff --git a/scripts/slurm/data/prepare_multitask_benchmark.sbatch b/research/scripts/slurm/data/prepare_multitask_benchmark.sbatch similarity index 97% rename from scripts/slurm/data/prepare_multitask_benchmark.sbatch rename to research/scripts/slurm/data/prepare_multitask_benchmark.sbatch index 6e97585..79c7116 100644 --- a/scripts/slurm/data/prepare_multitask_benchmark.sbatch +++ b/research/scripts/slurm/data/prepare_multitask_benchmark.sbatch @@ -9,7 +9,7 @@ set -euo pipefail -ROOT_DIR="${SLURM_SUBMIT_DIR:-$(cd "$(dirname "${BASH_SOURCE[0]}")/../../.." && pwd)}" +ROOT_DIR="${SLURM_SUBMIT_DIR:-$(cd "$(dirname "${BASH_SOURCE[0]}")/../../../.." && pwd)}" cd "$ROOT_DIR" : "${AIRR_PATH:?Set AIRR_PATH to the source TRB AIRR table}" : "${EMBEDDINGS_PATH:?Set EMBEDDINGS_PATH to the aligned TCRemP Parquet file}" diff --git a/scripts/slurm/data/prepare_single_aa_challenge.sbatch b/research/scripts/slurm/data/prepare_single_aa_challenge.sbatch similarity index 100% rename from scripts/slurm/data/prepare_single_aa_challenge.sbatch rename to research/scripts/slurm/data/prepare_single_aa_challenge.sbatch diff --git a/scripts/slurm/data/prepare_trb_joint.sbatch b/research/scripts/slurm/data/prepare_trb_joint.sbatch similarity index 100% rename from scripts/slurm/data/prepare_trb_joint.sbatch rename to research/scripts/slurm/data/prepare_trb_joint.sbatch diff --git a/scripts/slurm/data/prepare_vdjdb_redcea_clonotypes.sbatch b/research/scripts/slurm/data/prepare_vdjdb_redcea_clonotypes.sbatch similarity index 77% rename from scripts/slurm/data/prepare_vdjdb_redcea_clonotypes.sbatch rename to research/scripts/slurm/data/prepare_vdjdb_redcea_clonotypes.sbatch index 37ed973..0e3b6a5 100644 --- a/scripts/slurm/data/prepare_vdjdb_redcea_clonotypes.sbatch +++ b/research/scripts/slurm/data/prepare_vdjdb_redcea_clonotypes.sbatch @@ -16,7 +16,7 @@ SOURCE="$OUTPUT/cluster_members_TRB.txt" PYTHON="${RTP_CODEC_PYTHON:-python}" COMMIT="77961e2bec255311176d5168b4b8534fdbee24e4" BLOB="904320e903c646dc266639eb570461893d29aa2d" -URL="https://raw.githubusercontent.com/antigenomics/vdjdb-motifs/${COMMIT}/results/redcea/cluster_members_TRB.txt" +URL="https://raw.githubusercontent.com/antigenomics/vdjdb-motifs/${COMMIT}/research/results/redcea/cluster_members_TRB.txt" test -x "$PYTHON" test -f "$ROOT/data/benchmark/trb/READY.json" @@ -26,8 +26,8 @@ cd "$ROOT" "$PYTHON" -m compileall -q \ src/rtp_codec/benchmarks/datasets/prepare_vdjdb_redcea_clonotypes.py \ src/rtp_codec/benchmarks/downstream/evaluate_vdjdb_redcea_clonotypes.py -"$PYTHON" -c "import runpy; m=runpy.run_path('tests/test_vdjdb_redcea_clonotypes.py'); m['test_preparation_deduplicates_removes_ambiguity_overlap_and_applies_support']()" -"$PYTHON" -c "import runpy; m=runpy.run_path('tests/test_vdjdb_redcea_evaluation.py'); m['test_perfect_epitope_geometry_scores_perfect_retrieval']()" +"$PYTHON" -c "import runpy; m=runpy.run_path('src/tests/test_vdjdb_redcea_clonotypes.py'); m['test_preparation_deduplicates_removes_ambiguity_overlap_and_applies_support']()" +"$PYTHON" -c "import runpy; m=runpy.run_path('src/tests/test_vdjdb_redcea_evaluation.py'); m['test_perfect_epitope_geometry_scores_perfect_retrieval']()" curl --fail --location --retry 3 --output "$SOURCE" "$URL" ACTUAL_BLOB="$(git hash-object "$SOURCE")" test "$ACTUAL_BLOB" = "$BLOB" diff --git a/scripts/slurm/data/prepare_vdjdb_viral_motif_top10.sbatch b/research/scripts/slurm/data/prepare_vdjdb_viral_motif_top10.sbatch similarity index 94% rename from scripts/slurm/data/prepare_vdjdb_viral_motif_top10.sbatch rename to research/scripts/slurm/data/prepare_vdjdb_viral_motif_top10.sbatch index 994e5b5..0118139 100644 --- a/scripts/slurm/data/prepare_vdjdb_viral_motif_top10.sbatch +++ b/research/scripts/slurm/data/prepare_vdjdb_viral_motif_top10.sbatch @@ -13,7 +13,7 @@ MODE="${1:-prepare}" ROOT="${RTP_CODEC_ROOT:-${SLURM_SUBMIT_DIR:-$PWD}}" SNAPSHOT="/projects/immunestatus/vdjdb/vdjdb-2025-07-30" OUTPUT="$ROOT/experiments/trb/vdjdb-viral-motif-top10/${MODE}-${SLURM_JOB_ID}" -SPECIES="$ROOT/examples/data/viral_antigen_species_2025_07_30.txt" +SPECIES="$ROOT/research/examples/data/viral_antigen_species_2025_07_30.txt" PYTHON="${RTP_CODEC_PYTHON:-python}" mkdir -p "$ROOT/experiments/trb/vdjdb-viral-motif-top10" cd "$ROOT" diff --git a/scripts/slurm/data/prepare_vdjdb_ylq.sbatch b/research/scripts/slurm/data/prepare_vdjdb_ylq.sbatch similarity index 100% rename from scripts/slurm/data/prepare_vdjdb_ylq.sbatch rename to research/scripts/slurm/data/prepare_vdjdb_ylq.sbatch diff --git a/scripts/slurm/data/prepare_vdjdb_ylq_motif_pooled.sbatch b/research/scripts/slurm/data/prepare_vdjdb_ylq_motif_pooled.sbatch similarity index 100% rename from scripts/slurm/data/prepare_vdjdb_ylq_motif_pooled.sbatch rename to research/scripts/slurm/data/prepare_vdjdb_ylq_motif_pooled.sbatch diff --git a/scripts/slurm/data/prepare_wordpiece_rq4.sbatch b/research/scripts/slurm/data/prepare_wordpiece_rq4.sbatch similarity index 100% rename from scripts/slurm/data/prepare_wordpiece_rq4.sbatch rename to research/scripts/slurm/data/prepare_wordpiece_rq4.sbatch diff --git a/scripts/slurm/data/prepare_wordpiece_sweep.sbatch b/research/scripts/slurm/data/prepare_wordpiece_sweep.sbatch similarity index 100% rename from scripts/slurm/data/prepare_wordpiece_sweep.sbatch rename to research/scripts/slurm/data/prepare_wordpiece_sweep.sbatch diff --git a/scripts/slurm/data/validate_external_model_cohort.sbatch b/research/scripts/slurm/data/validate_external_model_cohort.sbatch similarity index 100% rename from scripts/slurm/data/validate_external_model_cohort.sbatch rename to research/scripts/slurm/data/validate_external_model_cohort.sbatch diff --git a/scripts/slurm/evaluation/benchmark_vdjdb_irrm_cpu.sbatch b/research/scripts/slurm/evaluation/benchmark_vdjdb_irrm_cpu.sbatch similarity index 100% rename from scripts/slurm/evaluation/benchmark_vdjdb_irrm_cpu.sbatch rename to research/scripts/slurm/evaluation/benchmark_vdjdb_irrm_cpu.sbatch diff --git a/scripts/slurm/evaluation/benchmark_vdjdb_irrm_cpu_fixed.sbatch b/research/scripts/slurm/evaluation/benchmark_vdjdb_irrm_cpu_fixed.sbatch similarity index 100% rename from scripts/slurm/evaluation/benchmark_vdjdb_irrm_cpu_fixed.sbatch rename to research/scripts/slurm/evaluation/benchmark_vdjdb_irrm_cpu_fixed.sbatch diff --git a/scripts/slurm/evaluation/benchmark_vdjdb_irrm_gpu.sbatch b/research/scripts/slurm/evaluation/benchmark_vdjdb_irrm_gpu.sbatch similarity index 100% rename from scripts/slurm/evaluation/benchmark_vdjdb_irrm_gpu.sbatch rename to research/scripts/slurm/evaluation/benchmark_vdjdb_irrm_gpu.sbatch diff --git a/scripts/slurm/evaluation/benchmark_vdjdb_irrm_gpu_fixed.sbatch b/research/scripts/slurm/evaluation/benchmark_vdjdb_irrm_gpu_fixed.sbatch similarity index 100% rename from scripts/slurm/evaluation/benchmark_vdjdb_irrm_gpu_fixed.sbatch rename to research/scripts/slurm/evaluation/benchmark_vdjdb_irrm_gpu_fixed.sbatch diff --git a/scripts/slurm/evaluation/benchmark_vdjdb_tcremp_runtime.sbatch b/research/scripts/slurm/evaluation/benchmark_vdjdb_tcremp_runtime.sbatch similarity index 100% rename from scripts/slurm/evaluation/benchmark_vdjdb_tcremp_runtime.sbatch rename to research/scripts/slurm/evaluation/benchmark_vdjdb_tcremp_runtime.sbatch diff --git a/scripts/slurm/evaluation/diagnose_vdjdb_decoded_tcremp_geometry.sbatch b/research/scripts/slurm/evaluation/diagnose_vdjdb_decoded_tcremp_geometry.sbatch similarity index 100% rename from scripts/slurm/evaluation/diagnose_vdjdb_decoded_tcremp_geometry.sbatch rename to research/scripts/slurm/evaluation/diagnose_vdjdb_decoded_tcremp_geometry.sbatch diff --git a/scripts/slurm/evaluation/evaluate_latent_secondary.sbatch b/research/scripts/slurm/evaluation/evaluate_latent_secondary.sbatch similarity index 95% rename from scripts/slurm/evaluation/evaluate_latent_secondary.sbatch rename to research/scripts/slurm/evaluation/evaluate_latent_secondary.sbatch index e635831..a912731 100644 --- a/scripts/slurm/evaluation/evaluate_latent_secondary.sbatch +++ b/research/scripts/slurm/evaluation/evaluate_latent_secondary.sbatch @@ -43,10 +43,10 @@ COMMON=( ) if [[ "$MODE" == "preflight" ]]; then - "$PYTHON" -m compileall -q src/rtp_codec/benchmarks/analysis/evaluate_latent_secondary.py tests/test_latent_secondary.py + "$PYTHON" -m compileall -q src/rtp_codec/benchmarks/analysis/evaluate_latent_secondary.py src/tests/test_latent_secondary.py "$PYTHON" - <<'PY' import runpy -namespace = runpy.run_path('tests/test_latent_secondary.py') +namespace = runpy.run_path('src/tests/test_latent_secondary.py') for name, value in sorted(namespace.items()): if name.startswith('test_') and callable(value): value() diff --git a/scripts/slurm/evaluation/evaluate_latent_sufficiency.sbatch b/research/scripts/slurm/evaluation/evaluate_latent_sufficiency.sbatch similarity index 94% rename from scripts/slurm/evaluation/evaluate_latent_sufficiency.sbatch rename to research/scripts/slurm/evaluation/evaluate_latent_sufficiency.sbatch index 6011263..6d65400 100644 --- a/scripts/slurm/evaluation/evaluate_latent_sufficiency.sbatch +++ b/research/scripts/slurm/evaluation/evaluate_latent_sufficiency.sbatch @@ -26,10 +26,10 @@ test ! -e "$OUTPUT" mkdir -p "$BASE" cd "$ROOT" -"$PYTHON" -m compileall -q src/rtp_codec/benchmarks/analysis/evaluate_latent_sufficiency.py tests/test_latent_sufficiency.py +"$PYTHON" -m compileall -q src/rtp_codec/benchmarks/analysis/evaluate_latent_sufficiency.py src/tests/test_latent_sufficiency.py "$PYTHON" - <<'PY' import runpy -scope = runpy.run_path("tests/test_latent_sufficiency.py") +scope = runpy.run_path("src/tests/test_latent_sufficiency.py") for name in sorted(scope): if name.startswith("test_"): scope[name]() diff --git a/scripts/slurm/evaluation/evaluate_rtp_data_anchor_length_errors.sbatch b/research/scripts/slurm/evaluation/evaluate_rtp_data_anchor_length_errors.sbatch similarity index 100% rename from scripts/slurm/evaluation/evaluate_rtp_data_anchor_length_errors.sbatch rename to research/scripts/slurm/evaluation/evaluate_rtp_data_anchor_length_errors.sbatch diff --git a/scripts/slurm/evaluation/evaluate_rtp_data_anchor_position_errors.sbatch b/research/scripts/slurm/evaluation/evaluate_rtp_data_anchor_position_errors.sbatch similarity index 100% rename from scripts/slurm/evaluation/evaluate_rtp_data_anchor_position_errors.sbatch rename to research/scripts/slurm/evaluation/evaluate_rtp_data_anchor_position_errors.sbatch diff --git a/scripts/slurm/evaluation/evaluate_rtp_data_anchor_substitutions.sbatch b/research/scripts/slurm/evaluation/evaluate_rtp_data_anchor_substitutions.sbatch similarity index 100% rename from scripts/slurm/evaluation/evaluate_rtp_data_anchor_substitutions.sbatch rename to research/scripts/slurm/evaluation/evaluate_rtp_data_anchor_substitutions.sbatch diff --git a/scripts/slurm/evaluation/evaluate_rtp_data_anchor_substitutions_v2.sbatch b/research/scripts/slurm/evaluation/evaluate_rtp_data_anchor_substitutions_v2.sbatch similarity index 100% rename from scripts/slurm/evaluation/evaluate_rtp_data_anchor_substitutions_v2.sbatch rename to research/scripts/slurm/evaluation/evaluate_rtp_data_anchor_substitutions_v2.sbatch diff --git a/scripts/slurm/evaluation/evaluate_rtp_error_analysis.sbatch b/research/scripts/slurm/evaluation/evaluate_rtp_error_analysis.sbatch similarity index 100% rename from scripts/slurm/evaluation/evaluate_rtp_error_analysis.sbatch rename to research/scripts/slurm/evaluation/evaluate_rtp_error_analysis.sbatch diff --git a/scripts/slurm/evaluation/evaluate_single_aa_challenge.sbatch b/research/scripts/slurm/evaluation/evaluate_single_aa_challenge.sbatch similarity index 100% rename from scripts/slurm/evaluation/evaluate_single_aa_challenge.sbatch rename to research/scripts/slurm/evaluation/evaluate_single_aa_challenge.sbatch diff --git a/scripts/slurm/evaluation/evaluate_tcremp_geometry_biology.sbatch b/research/scripts/slurm/evaluation/evaluate_tcremp_geometry_biology.sbatch similarity index 100% rename from scripts/slurm/evaluation/evaluate_tcremp_geometry_biology.sbatch rename to research/scripts/slurm/evaluation/evaluate_tcremp_geometry_biology.sbatch diff --git a/scripts/slurm/evaluation/evaluate_vdjdb_author_global.sbatch b/research/scripts/slurm/evaluation/evaluate_vdjdb_author_global.sbatch similarity index 100% rename from scripts/slurm/evaluation/evaluate_vdjdb_author_global.sbatch rename to research/scripts/slurm/evaluation/evaluate_vdjdb_author_global.sbatch diff --git a/scripts/slurm/evaluation/evaluate_vdjdb_decoded_tcremp.sbatch b/research/scripts/slurm/evaluation/evaluate_vdjdb_decoded_tcremp.sbatch similarity index 100% rename from scripts/slurm/evaluation/evaluate_vdjdb_decoded_tcremp.sbatch rename to research/scripts/slurm/evaluation/evaluate_vdjdb_decoded_tcremp.sbatch diff --git a/scripts/slurm/evaluation/evaluate_vdjdb_epitope_prediction.sbatch b/research/scripts/slurm/evaluation/evaluate_vdjdb_epitope_prediction.sbatch similarity index 100% rename from scripts/slurm/evaluation/evaluate_vdjdb_epitope_prediction.sbatch rename to research/scripts/slurm/evaluation/evaluate_vdjdb_epitope_prediction.sbatch diff --git a/scripts/slurm/evaluation/evaluate_vdjdb_frozen.sbatch b/research/scripts/slurm/evaluation/evaluate_vdjdb_frozen.sbatch similarity index 100% rename from scripts/slurm/evaluation/evaluate_vdjdb_frozen.sbatch rename to research/scripts/slurm/evaluation/evaluate_vdjdb_frozen.sbatch diff --git a/scripts/slurm/evaluation/evaluate_vdjdb_redcea_clonotypes.sbatch b/research/scripts/slurm/evaluation/evaluate_vdjdb_redcea_clonotypes.sbatch similarity index 100% rename from scripts/slurm/evaluation/evaluate_vdjdb_redcea_clonotypes.sbatch rename to research/scripts/slurm/evaluation/evaluate_vdjdb_redcea_clonotypes.sbatch diff --git a/scripts/slurm/evaluation/evaluate_vdjdb_tonly_decoded_tcremp.sbatch b/research/scripts/slurm/evaluation/evaluate_vdjdb_tonly_decoded_tcremp.sbatch similarity index 100% rename from scripts/slurm/evaluation/evaluate_vdjdb_tonly_decoded_tcremp.sbatch rename to research/scripts/slurm/evaluation/evaluate_vdjdb_tonly_decoded_tcremp.sbatch diff --git a/scripts/slurm/evaluation/evaluate_vdjdb_uniform100_tcremp.sbatch b/research/scripts/slurm/evaluation/evaluate_vdjdb_uniform100_tcremp.sbatch similarity index 100% rename from scripts/slurm/evaluation/evaluate_vdjdb_uniform100_tcremp.sbatch rename to research/scripts/slurm/evaluation/evaluate_vdjdb_uniform100_tcremp.sbatch diff --git a/scripts/slurm/evaluation/evaluate_vdjdb_uniform100_tcremp_pca128.sbatch b/research/scripts/slurm/evaluation/evaluate_vdjdb_uniform100_tcremp_pca128.sbatch similarity index 100% rename from scripts/slurm/evaluation/evaluate_vdjdb_uniform100_tcremp_pca128.sbatch rename to research/scripts/slurm/evaluation/evaluate_vdjdb_uniform100_tcremp_pca128.sbatch diff --git a/scripts/slurm/evaluation/evaluate_vdjdb_viral_motif_top10.sbatch b/research/scripts/slurm/evaluation/evaluate_vdjdb_viral_motif_top10.sbatch similarity index 100% rename from scripts/slurm/evaluation/evaluate_vdjdb_viral_motif_top10.sbatch rename to research/scripts/slurm/evaluation/evaluate_vdjdb_viral_motif_top10.sbatch diff --git a/scripts/slurm/evaluation/evaluate_vdjdb_ylq_frozen.sbatch b/research/scripts/slurm/evaluation/evaluate_vdjdb_ylq_frozen.sbatch similarity index 100% rename from scripts/slurm/evaluation/evaluate_vdjdb_ylq_frozen.sbatch rename to research/scripts/slurm/evaluation/evaluate_vdjdb_ylq_frozen.sbatch diff --git a/scripts/slurm/evaluation/evaluate_vdjdb_ylq_motif_pooled.sbatch b/research/scripts/slurm/evaluation/evaluate_vdjdb_ylq_motif_pooled.sbatch similarity index 100% rename from scripts/slurm/evaluation/evaluate_vdjdb_ylq_motif_pooled.sbatch rename to research/scripts/slurm/evaluation/evaluate_vdjdb_ylq_motif_pooled.sbatch diff --git a/scripts/slurm/evaluation/run_vdjdb_tcremp_umap.sbatch b/research/scripts/slurm/evaluation/run_vdjdb_tcremp_umap.sbatch similarity index 100% rename from scripts/slurm/evaluation/run_vdjdb_tcremp_umap.sbatch rename to research/scripts/slurm/evaluation/run_vdjdb_tcremp_umap.sbatch diff --git a/scripts/slurm/evaluation/run_vdjdb_umap_candidates.sbatch b/research/scripts/slurm/evaluation/run_vdjdb_umap_candidates.sbatch similarity index 100% rename from scripts/slurm/evaluation/run_vdjdb_umap_candidates.sbatch rename to research/scripts/slurm/evaluation/run_vdjdb_umap_candidates.sbatch diff --git a/scripts/slurm/evaluation/run_vdjdb_umap_candidates_runtime.sbatch b/research/scripts/slurm/evaluation/run_vdjdb_umap_candidates_runtime.sbatch similarity index 100% rename from scripts/slurm/evaluation/run_vdjdb_umap_candidates_runtime.sbatch rename to research/scripts/slurm/evaluation/run_vdjdb_umap_candidates_runtime.sbatch diff --git a/scripts/slurm/evaluation/run_vdjdb_uniform100.sbatch b/research/scripts/slurm/evaluation/run_vdjdb_uniform100.sbatch similarity index 100% rename from scripts/slurm/evaluation/run_vdjdb_uniform100.sbatch rename to research/scripts/slurm/evaluation/run_vdjdb_uniform100.sbatch diff --git a/scripts/slurm/evaluation/run_vdjdb_uniform100_direct.sbatch b/research/scripts/slurm/evaluation/run_vdjdb_uniform100_direct.sbatch similarity index 100% rename from scripts/slurm/evaluation/run_vdjdb_uniform100_direct.sbatch rename to research/scripts/slurm/evaluation/run_vdjdb_uniform100_direct.sbatch diff --git a/scripts/slurm/evaluation/run_vdjdb_uniform100_separation.sbatch b/research/scripts/slurm/evaluation/run_vdjdb_uniform100_separation.sbatch similarity index 100% rename from scripts/slurm/evaluation/run_vdjdb_uniform100_separation.sbatch rename to research/scripts/slurm/evaluation/run_vdjdb_uniform100_separation.sbatch diff --git a/scripts/slurm/evaluation/run_vdjdb_whole_umap.sbatch b/research/scripts/slurm/evaluation/run_vdjdb_whole_umap.sbatch similarity index 100% rename from scripts/slurm/evaluation/run_vdjdb_whole_umap.sbatch rename to research/scripts/slurm/evaluation/run_vdjdb_whole_umap.sbatch diff --git a/scripts/slurm/legacy/forward_encoder.sbatch b/research/scripts/slurm/legacy/forward_encoder.sbatch similarity index 100% rename from scripts/slurm/legacy/forward_encoder.sbatch rename to research/scripts/slurm/legacy/forward_encoder.sbatch diff --git a/scripts/slurm/legacy/pgen_array.sbatch b/research/scripts/slurm/legacy/pgen_array.sbatch similarity index 98% rename from scripts/slurm/legacy/pgen_array.sbatch rename to research/scripts/slurm/legacy/pgen_array.sbatch index 4dd4faf..850d101 100644 --- a/scripts/slurm/legacy/pgen_array.sbatch +++ b/research/scripts/slurm/legacy/pgen_array.sbatch @@ -9,7 +9,7 @@ # script body runs, so a missing directory kills the job immediately. # # mkdir -p /mnt/tank/scratch/mpodsytnik/irrm-codec/logs -# sbatch scripts/slurm/legacy/pgen_array.sbatch +# sbatch research/scripts/slurm/legacy/pgen_array.sbatch # # tfidf_ridge does not need a GPU, but it finishes in seconds, so keeping one array is # simpler than splitting it onto the CPU partition. diff --git a/scripts/slurm/legacy/pgen_seeds_array.sbatch b/research/scripts/slurm/legacy/pgen_seeds_array.sbatch similarity index 95% rename from scripts/slurm/legacy/pgen_seeds_array.sbatch rename to research/scripts/slurm/legacy/pgen_seeds_array.sbatch index 3221026..3592507 100644 --- a/scripts/slurm/legacy/pgen_seeds_array.sbatch +++ b/research/scripts/slurm/legacy/pgen_seeds_array.sbatch @@ -12,10 +12,10 @@ # output directory, so collect_pgen picks them up with no changes. # # mkdir -p /mnt/tank/scratch/mpodsytnik/irrm-codec/logs -# sbatch scripts/slurm/legacy/pgen_seeds_array.sbatch +# sbatch research/scripts/slurm/legacy/pgen_seeds_array.sbatch # # To repeat only some of them, override SUBSETS: -# sbatch --export=ALL,SUBSETS="1k 10k" scripts/slurm/legacy/pgen_seeds_array.sbatch +# sbatch --export=ALL,SUBSETS="1k 10k" research/scripts/slurm/legacy/pgen_seeds_array.sbatch #SBATCH --job-name=irrm-pgen-seeds #SBATCH --partition=gpu diff --git a/scripts/slurm/legacy/reconstruction_array.sbatch b/research/scripts/slurm/legacy/reconstruction_array.sbatch similarity index 96% rename from scripts/slurm/legacy/reconstruction_array.sbatch rename to research/scripts/slurm/legacy/reconstruction_array.sbatch index e9df3b9..7cb1a71 100644 --- a/scripts/slurm/legacy/reconstruction_array.sbatch +++ b/research/scripts/slurm/legacy/reconstruction_array.sbatch @@ -9,11 +9,11 @@ # # Submit from the repository root: # mkdir -p /mnt/tank/scratch/mpodsytnik/irrm-codec/logs -# sbatch scripts/slurm/legacy/reconstruction_array.sbatch +# sbatch research/scripts/slurm/legacy/reconstruction_array.sbatch # # Override anything without editing the file: # sbatch --export=ALL,BOTTLENECK_DIM=32,TRAIN_SUBSET=10k \ -# scripts/slurm/legacy/reconstruction_array.sbatch +# research/scripts/slurm/legacy/reconstruction_array.sbatch #SBATCH --job-name=irrm-recon #SBATCH --partition=gpu diff --git a/scripts/slurm/legacy/submit_pgen_all.sh b/research/scripts/slurm/legacy/submit_pgen_all.sh similarity index 81% rename from scripts/slurm/legacy/submit_pgen_all.sh rename to research/scripts/slurm/legacy/submit_pgen_all.sh index ce012fb..0ec70bd 100644 --- a/scripts/slurm/legacy/submit_pgen_all.sh +++ b/research/scripts/slurm/legacy/submit_pgen_all.sh @@ -1,7 +1,7 @@ #!/usr/bin/env bash # Submit the whole Pgen benchmark as one dependency chain, so it can be started and left. # -# bash scripts/slurm/legacy/submit_pgen_all.sh +# bash research/scripts/slurm/legacy/submit_pgen_all.sh # # Stages, each waiting for the previous one to succeed: # 1. pretrain the sequence-to-TCRemP encoder (~10 min) @@ -31,16 +31,16 @@ done cd "$REPO" -forward_id=$(sbatch --parsable scripts/slurm/legacy/forward_encoder.sbatch) +forward_id=$(sbatch --parsable research/scripts/slurm/legacy/forward_encoder.sbatch) echo "1/3 forward encoder : $forward_id" -main_id=$(sbatch --parsable --dependency=afterok:"$forward_id" scripts/slurm/legacy/pgen_array.sbatch) +main_id=$(sbatch --parsable --dependency=afterok:"$forward_id" research/scripts/slurm/legacy/pgen_array.sbatch) echo "2/3 main sweep : $main_id (after $forward_id)" # The extra seeds only cover 1k and 10k here; the main sweep already supplies three seeds # per cell, and SUBSETS controls which sizes get topped up to ten. seeds_id=$(sbatch --parsable --dependency=afterok:"$main_id" \ - --export=ALL,SUBSETS="1k 10k all" --array=0-83%2 scripts/slurm/legacy/pgen_seeds_array.sbatch) + --export=ALL,SUBSETS="1k 10k all" --array=0-83%2 research/scripts/slurm/legacy/pgen_seeds_array.sbatch) echo "3/3 extra seeds : $seeds_id (after $main_id)" echo diff --git a/scripts/slurm/preflight/preflight_author_global_embeddings.sbatch b/research/scripts/slurm/preflight/preflight_author_global_embeddings.sbatch similarity index 100% rename from scripts/slurm/preflight/preflight_author_global_embeddings.sbatch rename to research/scripts/slurm/preflight/preflight_author_global_embeddings.sbatch diff --git a/scripts/slurm/preflight/preflight_data_anchor_factorial.sbatch b/research/scripts/slurm/preflight/preflight_data_anchor_factorial.sbatch similarity index 100% rename from scripts/slurm/preflight/preflight_data_anchor_factorial.sbatch rename to research/scripts/slurm/preflight/preflight_data_anchor_factorial.sbatch diff --git a/scripts/slurm/preflight/preflight_data_anchor_objectives.sbatch b/research/scripts/slurm/preflight/preflight_data_anchor_objectives.sbatch similarity index 100% rename from scripts/slurm/preflight/preflight_data_anchor_objectives.sbatch rename to research/scripts/slurm/preflight/preflight_data_anchor_objectives.sbatch diff --git a/scripts/slurm/preflight/preflight_external_model_benchmark.sbatch b/research/scripts/slurm/preflight/preflight_external_model_benchmark.sbatch similarity index 92% rename from scripts/slurm/preflight/preflight_external_model_benchmark.sbatch rename to research/scripts/slurm/preflight/preflight_external_model_benchmark.sbatch index cfabecf..35f2d86 100644 --- a/scripts/slurm/preflight/preflight_external_model_benchmark.sbatch +++ b/research/scripts/slurm/preflight/preflight_external_model_benchmark.sbatch @@ -25,7 +25,7 @@ cd "$REPO" sha256sum \ src/rtp_codec/benchmarks/representations/preflight_external_model_benchmark.py \ - scripts/slurm/preflight/preflight_external_model_benchmark.sbatch \ + research/scripts/slurm/preflight/preflight_external_model_benchmark.sbatch \ "$OUT/PREFLIGHT.json" > "$OUT/HASHES.sha256" echo "status=accepted" diff --git a/scripts/slurm/preflight/preflight_external_residue_benchmark.sbatch b/research/scripts/slurm/preflight/preflight_external_residue_benchmark.sbatch similarity index 100% rename from scripts/slurm/preflight/preflight_external_residue_benchmark.sbatch rename to research/scripts/slurm/preflight/preflight_external_residue_benchmark.sbatch diff --git a/scripts/slurm/preflight/preflight_external_residue_pca128_all.sbatch b/research/scripts/slurm/preflight/preflight_external_residue_pca128_all.sbatch similarity index 79% rename from scripts/slurm/preflight/preflight_external_residue_pca128_all.sbatch rename to research/scripts/slurm/preflight/preflight_external_residue_pca128_all.sbatch index 11199bd..4f69d1e 100644 --- a/scripts/slurm/preflight/preflight_external_residue_pca128_all.sbatch +++ b/research/scripts/slurm/preflight/preflight_external_residue_pca128_all.sbatch @@ -25,8 +25,8 @@ cd "$REPO" "$PYTHON" -m rtp_codec.benchmarks.representations.audit_external_residue_alignment \ --dataset-dir "$BASE/cohort" --residue-dir "$BASE/residue-v1/representations" \ --output "$ROOT/RESIDUE_AUDIT.json" --seed 42 -bash -n scripts/slurm/data/fit_external_residue_pca128_all.sbatch \ - scripts/slurm/reports/finalize_external_residue_pca128_all.sbatch \ - scripts/slurm/training/train_external_residue_pca128_remaining.sbatch \ - scripts/slurm/reports/collect_external_residue_pca128_all.sbatch +bash -n research/scripts/slurm/data/fit_external_residue_pca128_all.sbatch \ + research/scripts/slurm/reports/finalize_external_residue_pca128_all.sbatch \ + research/scripts/slurm/training/train_external_residue_pca128_remaining.sbatch \ + research/scripts/slurm/reports/collect_external_residue_pca128_all.sbatch echo status=accepted diff --git a/scripts/slurm/preflight/preflight_external_rtp128_reconstruction.sbatch b/research/scripts/slurm/preflight/preflight_external_rtp128_reconstruction.sbatch similarity index 88% rename from scripts/slurm/preflight/preflight_external_rtp128_reconstruction.sbatch rename to research/scripts/slurm/preflight/preflight_external_rtp128_reconstruction.sbatch index 47c9016..5dfc5ee 100644 --- a/scripts/slurm/preflight/preflight_external_rtp128_reconstruction.sbatch +++ b/research/scripts/slurm/preflight/preflight_external_rtp128_reconstruction.sbatch @@ -23,8 +23,8 @@ cd "$REPO" src/rtp_codec/benchmarks/reconstruction/train_external_model_decoder.py \ src/rtp_codec/benchmarks/reconstruction/collect_external_reconstruction.py bash -n \ - scripts/slurm/training/train_external_rtp128_reconstruction.sbatch \ - scripts/slurm/reports/collect_external_rtp128_reconstruction.sbatch + research/scripts/slurm/training/train_external_rtp128_reconstruction.sbatch \ + research/scripts/slurm/reports/collect_external_rtp128_reconstruction.sbatch "$PYTHON" - "$SOURCE" "$BASE/cohort" "$ROOT" <<'PY' import hashlib @@ -93,8 +93,8 @@ PY sha256sum \ src/rtp_codec/benchmarks/reconstruction/train_external_model_decoder.py \ src/rtp_codec/benchmarks/reconstruction/collect_external_reconstruction.py \ - scripts/slurm/preflight/preflight_external_rtp128_reconstruction.sbatch \ - scripts/slurm/training/train_external_rtp128_reconstruction.sbatch \ - scripts/slurm/reports/collect_external_rtp128_reconstruction.sbatch \ + research/scripts/slurm/preflight/preflight_external_rtp128_reconstruction.sbatch \ + research/scripts/slurm/training/train_external_rtp128_reconstruction.sbatch \ + research/scripts/slurm/reports/collect_external_rtp128_reconstruction.sbatch \ "$ROOT/PREFLIGHT.json" > "$ROOT/PREFLIGHT_HASHES.sha256" echo status=accepted diff --git a/scripts/slurm/preflight/preflight_external_sceptr_pca128.sbatch b/research/scripts/slurm/preflight/preflight_external_sceptr_pca128.sbatch similarity index 81% rename from scripts/slurm/preflight/preflight_external_sceptr_pca128.sbatch rename to research/scripts/slurm/preflight/preflight_external_sceptr_pca128.sbatch index 4928dcb..af35d97 100644 --- a/scripts/slurm/preflight/preflight_external_sceptr_pca128.sbatch +++ b/research/scripts/slurm/preflight/preflight_external_sceptr_pca128.sbatch @@ -29,8 +29,8 @@ test -f "$BASE/residue-v1/representations/sceptr_residue.npy" --residue-dir "$BASE/residue-v1/representations" \ --output "$ROOT/PREFLIGHT.json" bash -n \ - scripts/slurm/data/fit_external_sceptr_pca128.sbatch \ - scripts/slurm/reports/finalize_external_sceptr_pca128.sbatch \ - scripts/slurm/training/train_external_sceptr_pca128_heads.sbatch \ - scripts/slurm/reports/collect_external_sceptr_pca128.sbatch + research/scripts/slurm/data/fit_external_sceptr_pca128.sbatch \ + research/scripts/slurm/reports/finalize_external_sceptr_pca128.sbatch \ + research/scripts/slurm/training/train_external_sceptr_pca128_heads.sbatch \ + research/scripts/slurm/reports/collect_external_sceptr_pca128.sbatch echo status=accepted diff --git a/scripts/slurm/preflight/preflight_phase1_rq1.sbatch b/research/scripts/slurm/preflight/preflight_phase1_rq1.sbatch similarity index 100% rename from scripts/slurm/preflight/preflight_phase1_rq1.sbatch rename to research/scripts/slurm/preflight/preflight_phase1_rq1.sbatch diff --git a/scripts/slurm/preflight/preflight_rq5_depths.sbatch b/research/scripts/slurm/preflight/preflight_rq5_depths.sbatch similarity index 100% rename from scripts/slurm/preflight/preflight_rq5_depths.sbatch rename to research/scripts/slurm/preflight/preflight_rq5_depths.sbatch diff --git a/scripts/slurm/preflight/preflight_rq5_widths.sbatch b/research/scripts/slurm/preflight/preflight_rq5_widths.sbatch similarity index 100% rename from scripts/slurm/preflight/preflight_rq5_widths.sbatch rename to research/scripts/slurm/preflight/preflight_rq5_widths.sbatch diff --git a/scripts/slurm/preflight/preflight_single_aa_challenge.sbatch b/research/scripts/slurm/preflight/preflight_single_aa_challenge.sbatch similarity index 94% rename from scripts/slurm/preflight/preflight_single_aa_challenge.sbatch rename to research/scripts/slurm/preflight/preflight_single_aa_challenge.sbatch index 55edf40..fab3577 100644 --- a/scripts/slurm/preflight/preflight_single_aa_challenge.sbatch +++ b/research/scripts/slurm/preflight/preflight_single_aa_challenge.sbatch @@ -25,7 +25,7 @@ test "$(sha256sum "$PROTOTYPES" | cut -d' ' -f1)" = 38cbb5e75d900ef61476bf3af2ed grep -q 468ddae2107da212bb0db9497a3dc9cc44b00eaf "$MIRPY_PROVENANCE" cd "$ROOT" "$PYTHON" -m compileall -q src/rtp_codec/benchmarks/datasets/prepare_single_aa_challenge.py src/rtp_codec/benchmarks/datasets/validate_single_aa_targets.py src/rtp_codec/benchmarks/analysis/evaluate_single_aa_challenge.py -"$PYTHON" -c "import runpy; ns=runpy.run_path('tests/test_single_aa_challenge.py'); ns['test_mutants_are_unique_one_substitution_and_parent_split_is_disjoint']()" +"$PYTHON" -c "import runpy; ns=runpy.run_path('src/tests/test_single_aa_challenge.py'); ns['test_mutants_are_unique_one_substitution_and_parent_split_is_disjoint']()" PYTHONPATH="$TCREMP_ROOT:$ROOT" "$TCREMP_PYTHON" -c "from tcremp.tcremp_run import main; from mir.embedding.prototype_embedding import PrototypeEmbedding; print('tcremp_import_ok')" "$PYTHON" -m rtp_codec.benchmarks.datasets.prepare_single_aa_challenge \ --data-dir "$ROOT/data/benchmark/trb" --output-dir "$OUT/prepared" \ diff --git a/scripts/slurm/preflight/preflight_vdjdb_epitope.sbatch b/research/scripts/slurm/preflight/preflight_vdjdb_epitope.sbatch similarity index 100% rename from scripts/slurm/preflight/preflight_vdjdb_epitope.sbatch rename to research/scripts/slurm/preflight/preflight_vdjdb_epitope.sbatch diff --git a/scripts/slurm/preflight/preflight_vdjdb_evaluation.sbatch b/research/scripts/slurm/preflight/preflight_vdjdb_evaluation.sbatch similarity index 100% rename from scripts/slurm/preflight/preflight_vdjdb_evaluation.sbatch rename to research/scripts/slurm/preflight/preflight_vdjdb_evaluation.sbatch diff --git a/scripts/slurm/reports/collect_author_global_comparison.sbatch b/research/scripts/slurm/reports/collect_author_global_comparison.sbatch similarity index 63% rename from scripts/slurm/reports/collect_author_global_comparison.sbatch rename to research/scripts/slurm/reports/collect_author_global_comparison.sbatch index 599db7c..e0fcbad 100644 --- a/scripts/slurm/reports/collect_author_global_comparison.sbatch +++ b/research/scripts/slurm/reports/collect_author_global_comparison.sbatch @@ -20,6 +20,6 @@ export PYTHONUNBUFFERED=1 mkdir -p "$BASE/logs" cd "$REPO" -"$PYTHON" -m rtp_codec.benchmarks.reporting.collect_author_global_comparison --old-reconstruction-summary "$OLD/results/legacy/reconstruction/reconstruction_summary.csv" --old-pgen-summary "$OLD/results/legacy/pgen/pgen_summary.csv" --new-reconstruction-dir "$BASE/reconstruction" --new-pgen-dir "$BASE/pgen" --control-pgen-dir "$BASE/pgen-onehot-fixed" --reference-vdjdb-metrics "$REPO/experiments/trb/vdjdb-redcea-clonotypes/evaluation-1426728/metrics.json" --external-vdjdb-summary "$VDJDB_EVAL/external_retrieval_summary.tsv" --output-dir "$OUT" +"$PYTHON" -m rtp_codec.benchmarks.reporting.collect_author_global_comparison --old-reconstruction-summary "$OLD/research/results/legacy/reconstruction/reconstruction_summary.csv" --old-pgen-summary "$OLD/research/results/legacy/pgen/pgen_summary.csv" --new-reconstruction-dir "$BASE/reconstruction" --new-pgen-dir "$BASE/pgen" --control-pgen-dir "$BASE/pgen-onehot-fixed" --reference-vdjdb-metrics "$REPO/experiments/trb/vdjdb-redcea-clonotypes/evaluation-1426728/metrics.json" --external-vdjdb-summary "$VDJDB_EVAL/external_retrieval_summary.tsv" --output-dir "$OUT" sha256sum "$OUT/final_author_global_comparison.tsv" "$OUT/final_author_global_comparison.md" "$OUT/MANIFEST.json" > "$OUT/HASHES.sha256" echo "status=complete output=$OUT" diff --git a/scripts/slurm/reports/collect_external_model_benchmark.sbatch b/research/scripts/slurm/reports/collect_external_model_benchmark.sbatch similarity index 74% rename from scripts/slurm/reports/collect_external_model_benchmark.sbatch rename to research/scripts/slurm/reports/collect_external_model_benchmark.sbatch index a49e8c8..f39899e 100644 --- a/scripts/slurm/reports/collect_external_model_benchmark.sbatch +++ b/research/scripts/slurm/reports/collect_external_model_benchmark.sbatch @@ -13,17 +13,17 @@ PYTHON="${RTP_CODEC_PYTHON:-python}" ROOT="$REPO/experiments/trb/external-model-benchmark" export PYTHONPATH="$REPO/src${PYTHONPATH:+:$PYTHONPATH}" export PYTHONUNBUFFERED=1 -mkdir -p "$ROOT/logs" "$ROOT/results/reconstruction" "$ROOT/results/pgen" +mkdir -p "$ROOT/logs" "$ROOT/research/results/reconstruction" "$ROOT/research/results/pgen" cd "$REPO" "$PYTHON" -m rtp_codec.benchmarks.reconstruction.collect_external_reconstruction \ --runs-dir "$ROOT/reconstruction" \ --bottleneck-dir "$ROOT/bottleneck" \ --bottleneck-dim 64 \ - --output-dir "$ROOT/results/reconstruction" + --output-dir "$ROOT/research/results/reconstruction" "$PYTHON" -m rtp_codec.benchmarks.pgen.collect_external_pgen \ --runs-dir "$ROOT/pgen" \ - --output-dir "$ROOT/results/pgen" -find "$ROOT/results" -type f ! -name HASHES.sha256 ! -name HASHES.sha256.tmp -print0 | sort -z | xargs -0 sha256sum > "$ROOT/results/HASHES.sha256.tmp" -mv "$ROOT/results/HASHES.sha256.tmp" "$ROOT/results/HASHES.sha256" + --output-dir "$ROOT/research/results/pgen" +find "$ROOT/results" -type f ! -name HASHES.sha256 ! -name HASHES.sha256.tmp -print0 | sort -z | xargs -0 sha256sum > "$ROOT/research/results/HASHES.sha256.tmp" +mv "$ROOT/research/results/HASHES.sha256.tmp" "$ROOT/research/results/HASHES.sha256" echo "status=accepted" diff --git a/scripts/slurm/reports/collect_external_pca256_pgen.sbatch b/research/scripts/slurm/reports/collect_external_pca256_pgen.sbatch similarity index 74% rename from scripts/slurm/reports/collect_external_pca256_pgen.sbatch rename to research/scripts/slurm/reports/collect_external_pca256_pgen.sbatch index 7dce419..92f3e6d 100644 --- a/scripts/slurm/reports/collect_external_pca256_pgen.sbatch +++ b/research/scripts/slurm/reports/collect_external_pca256_pgen.sbatch @@ -12,8 +12,8 @@ REPO="${RTP_CODEC_ROOT:-${SLURM_SUBMIT_DIR:-$PWD}}" PYTHON="${RTP_CODEC_PYTHON:-python}" ROOT="$REPO/experiments/trb/external-model-benchmark/residue-pca256-v1" export PYTHONPATH="$REPO/src${PYTHONPATH:+:$PYTHONPATH}" -mkdir -p "$ROOT/results/pgen" +mkdir -p "$ROOT/research/results/pgen" cd "$REPO" -"$PYTHON" -m rtp_codec.benchmarks.pgen.collect_external_pgen --runs-dir "$ROOT/pgen" --output-dir "$ROOT/results/pgen" -sha256sum "$ROOT/results/pgen"/* > "$ROOT/results/pgen/HASHES.sha256" +"$PYTHON" -m rtp_codec.benchmarks.pgen.collect_external_pgen --runs-dir "$ROOT/pgen" --output-dir "$ROOT/research/results/pgen" +sha256sum "$ROOT/research/results/pgen"/* > "$ROOT/research/results/pgen/HASHES.sha256" echo status=accepted diff --git a/scripts/slurm/reports/collect_external_pca256_reconstruction.sbatch b/research/scripts/slurm/reports/collect_external_pca256_reconstruction.sbatch similarity index 71% rename from scripts/slurm/reports/collect_external_pca256_reconstruction.sbatch rename to research/scripts/slurm/reports/collect_external_pca256_reconstruction.sbatch index bd814a8..68962b4 100644 --- a/scripts/slurm/reports/collect_external_pca256_reconstruction.sbatch +++ b/research/scripts/slurm/reports/collect_external_pca256_reconstruction.sbatch @@ -12,10 +12,10 @@ REPO="${RTP_CODEC_ROOT:-${SLURM_SUBMIT_DIR:-$PWD}}" PYTHON="${RTP_CODEC_PYTHON:-python}" ROOT="$REPO/experiments/trb/external-model-benchmark/residue-pca256-v1" export PYTHONPATH="$REPO/src${PYTHONPATH:+:$PYTHONPATH}" -mkdir -p "$ROOT/results/reconstruction" +mkdir -p "$ROOT/research/results/reconstruction" cd "$REPO" "$PYTHON" -m rtp_codec.benchmarks.reconstruction.collect_external_reconstruction \ - --runs-dir "$ROOT/reconstruction" --output-dir "$ROOT/results/reconstruction" \ + --runs-dir "$ROOT/reconstruction" --output-dir "$ROOT/research/results/reconstruction" \ --bottleneck-dir "$ROOT/bottleneck" --bottleneck-dim 256 -sha256sum "$ROOT/results/reconstruction"/* > "$ROOT/results/reconstruction/HASHES.sha256" +sha256sum "$ROOT/research/results/reconstruction"/* > "$ROOT/research/results/reconstruction/HASHES.sha256" echo status=accepted diff --git a/scripts/slurm/reports/collect_external_residue_benchmark.sbatch b/research/scripts/slurm/reports/collect_external_residue_benchmark.sbatch similarity index 86% rename from scripts/slurm/reports/collect_external_residue_benchmark.sbatch rename to research/scripts/slurm/reports/collect_external_residue_benchmark.sbatch index c5d0ff1..ef02012 100644 --- a/scripts/slurm/reports/collect_external_residue_benchmark.sbatch +++ b/research/scripts/slurm/reports/collect_external_residue_benchmark.sbatch @@ -20,6 +20,6 @@ cd "$REPO" --reconstruction-dir "$ROOT/reconstruction" \ --pgen-dir "$ROOT/pgen" \ --output-dir "$ROOT/results" -find "$ROOT/results" -maxdepth 1 -type f ! -name HASHES.sha256 -print0 | sort -z | xargs -0 sha256sum > "$ROOT/results/HASHES.sha256" -cat "$ROOT/results/HASHES.sha256" +find "$ROOT/results" -maxdepth 1 -type f ! -name HASHES.sha256 -print0 | sort -z | xargs -0 sha256sum > "$ROOT/research/results/HASHES.sha256" +cat "$ROOT/research/results/HASHES.sha256" echo "status=complete" diff --git a/scripts/slurm/reports/collect_external_residue_pca128_all.sbatch b/research/scripts/slurm/reports/collect_external_residue_pca128_all.sbatch similarity index 68% rename from scripts/slurm/reports/collect_external_residue_pca128_all.sbatch rename to research/scripts/slurm/reports/collect_external_residue_pca128_all.sbatch index d316695..89590c4 100644 --- a/scripts/slurm/reports/collect_external_residue_pca128_all.sbatch +++ b/research/scripts/slurm/reports/collect_external_residue_pca128_all.sbatch @@ -14,15 +14,15 @@ BASE="$REPO/experiments/trb/external-model-benchmark" ROOT="$BASE/residue-pca128-v1" SCEPTR_ROOT="$BASE/residue-pca128-sceptr-v1" export PYTHONPATH="$REPO/src${PYTHONPATH:+:$PYTHONPATH}" -mkdir -p "$ROOT/results/reconstruction" "$ROOT/results/pgen" +mkdir -p "$ROOT/research/results/reconstruction" "$ROOT/research/results/pgen" cd "$REPO" "$PYTHON" -m rtp_codec.benchmarks.reconstruction.collect_external_reconstruction \ - --runs-dir "$ROOT/reconstruction" --output-dir "$ROOT/results/reconstruction" \ + --runs-dir "$ROOT/reconstruction" --output-dir "$ROOT/research/results/reconstruction" \ --bottleneck-dir "$ROOT/bottleneck" --bottleneck-dim 128 "$PYTHON" -m rtp_codec.benchmarks.pgen.collect_external_pgen \ - --runs-dir "$ROOT/pgen" --output-dir "$ROOT/results/pgen" + --runs-dir "$ROOT/pgen" --output-dir "$ROOT/research/results/pgen" "$PYTHON" -m rtp_codec.benchmarks.reporting.combine_external_pca128_results \ --main-root "$ROOT" --sceptr-root "$SCEPTR_ROOT" -sha256sum "$ROOT/results/reconstruction"/* "$ROOT/results/pgen"/* \ - "$ROOT/results/all_baselines"/* > "$ROOT/results/HASHES.sha256" +sha256sum "$ROOT/research/results/reconstruction"/* "$ROOT/research/results/pgen"/* \ + "$ROOT/research/results/all_baselines"/* > "$ROOT/research/results/HASHES.sha256" echo status=accepted diff --git a/scripts/slurm/reports/collect_external_rtp128_reconstruction.sbatch b/research/scripts/slurm/reports/collect_external_rtp128_reconstruction.sbatch similarity index 80% rename from scripts/slurm/reports/collect_external_rtp128_reconstruction.sbatch rename to research/scripts/slurm/reports/collect_external_rtp128_reconstruction.sbatch index f01053c..84d0ebe 100644 --- a/scripts/slurm/reports/collect_external_rtp128_reconstruction.sbatch +++ b/research/scripts/slurm/reports/collect_external_rtp128_reconstruction.sbatch @@ -14,12 +14,12 @@ PYTHON="${RTP_CODEC_PYTHON:-python}" BASE="$REPO/experiments/trb/external-model-benchmark" ROOT="$BASE/native-rtp128-v1" export PYTHONPATH="$REPO/src${PYTHONPATH:+:$PYTHONPATH}" -mkdir -p "$ROOT/results/reconstruction" +mkdir -p "$ROOT/research/results/reconstruction" cd "$REPO" "$PYTHON" -m rtp_codec.benchmarks.reconstruction.collect_external_reconstruction \ --runs-dir "$ROOT/reconstruction" \ - --output-dir "$ROOT/results/reconstruction" \ + --output-dir "$ROOT/research/results/reconstruction" \ --bottleneck-dir "$ROOT/bottleneck" \ --bottleneck-dim 128 @@ -32,8 +32,8 @@ from pathlib import Path import pandas as pd root = Path(sys.argv[1]) -runs = pd.read_csv(root / "results/legacy/reconstruction/reconstruction_runs.csv") -summary = pd.read_csv(root / "results/legacy/reconstruction/reconstruction_summary.csv") +runs = pd.read_csv(root / "research/results/legacy/reconstruction/reconstruction_runs.csv") +summary = pd.read_csv(root / "research/results/legacy/reconstruction/reconstruction_summary.csv") assert len(runs) == 3 and set(runs.seed) == {42, 43, 44} assert runs.representation.eq("rtp").all() and runs.bottleneck_dim.eq(128).all() assert len(summary) == 1 and summary.loc[0, "representation"] == "rtp" @@ -43,7 +43,7 @@ def sha256(path): return hashlib.sha256(path.read_bytes()).hexdigest() artifacts = {} -for path in sorted((root / "results/reconstruction").glob("*")): +for path in sorted((root / "research/results/reconstruction").glob("*")): if path.is_file(): artifacts[str(path)] = sha256(path) for path in sorted((root / "reconstruction").glob("*/metrics.json")): @@ -64,7 +64,7 @@ report = { print(json.dumps(report, indent=2)) PY -sha256sum "$ROOT/RESULTS.json" "$ROOT/results/reconstruction"/* > "$ROOT/RESULT_HASHES.sha256" +sha256sum "$ROOT/RESULTS.json" "$ROOT/research/results/reconstruction"/* > "$ROOT/RESULT_HASHES.sha256" if grep -R -E -i 'traceback|out of memory|nan|inf' "$ROOT/logs"/*.err; then echo "error/nonfinite signature found" >&2 exit 1 diff --git a/scripts/slurm/reports/collect_external_sceptr_pca128.sbatch b/research/scripts/slurm/reports/collect_external_sceptr_pca128.sbatch similarity index 65% rename from scripts/slurm/reports/collect_external_sceptr_pca128.sbatch rename to research/scripts/slurm/reports/collect_external_sceptr_pca128.sbatch index 8e287ef..25697a1 100644 --- a/scripts/slurm/reports/collect_external_sceptr_pca128.sbatch +++ b/research/scripts/slurm/reports/collect_external_sceptr_pca128.sbatch @@ -12,13 +12,13 @@ REPO="${RTP_CODEC_ROOT:-${SLURM_SUBMIT_DIR:-$PWD}}" PYTHON="${RTP_CODEC_PYTHON:-python}" ROOT="$REPO/experiments/trb/external-model-benchmark/residue-pca128-sceptr-v1" export PYTHONPATH="$REPO/src${PYTHONPATH:+:$PYTHONPATH}" -mkdir -p "$ROOT/results/reconstruction" "$ROOT/results/pgen" +mkdir -p "$ROOT/research/results/reconstruction" "$ROOT/research/results/pgen" cd "$REPO" "$PYTHON" -m rtp_codec.benchmarks.reconstruction.collect_external_reconstruction \ - --runs-dir "$ROOT/reconstruction" --output-dir "$ROOT/results/reconstruction" \ + --runs-dir "$ROOT/reconstruction" --output-dir "$ROOT/research/results/reconstruction" \ --bottleneck-dir "$ROOT/bottleneck" --bottleneck-dim 128 "$PYTHON" -m rtp_codec.benchmarks.pgen.collect_external_pgen \ - --runs-dir "$ROOT/pgen" --output-dir "$ROOT/results/pgen" -sha256sum "$ROOT/results/reconstruction"/* "$ROOT/results/pgen"/* \ - > "$ROOT/results/HASHES.sha256" + --runs-dir "$ROOT/pgen" --output-dir "$ROOT/research/results/pgen" +sha256sum "$ROOT/research/results/reconstruction"/* "$ROOT/research/results/pgen"/* \ + > "$ROOT/research/results/HASHES.sha256" echo status=accepted diff --git a/scripts/slurm/reports/finalize_external_residue_pca128_all.sbatch b/research/scripts/slurm/reports/finalize_external_residue_pca128_all.sbatch similarity index 100% rename from scripts/slurm/reports/finalize_external_residue_pca128_all.sbatch rename to research/scripts/slurm/reports/finalize_external_residue_pca128_all.sbatch diff --git a/scripts/slurm/reports/finalize_external_residue_pca256.sbatch b/research/scripts/slurm/reports/finalize_external_residue_pca256.sbatch similarity index 100% rename from scripts/slurm/reports/finalize_external_residue_pca256.sbatch rename to research/scripts/slurm/reports/finalize_external_residue_pca256.sbatch diff --git a/scripts/slurm/reports/finalize_external_sceptr_pca128.sbatch b/research/scripts/slurm/reports/finalize_external_sceptr_pca128.sbatch similarity index 100% rename from scripts/slurm/reports/finalize_external_sceptr_pca128.sbatch rename to research/scripts/slurm/reports/finalize_external_sceptr_pca128.sbatch diff --git a/scripts/slurm/reports/finalize_vdjdb_epitope_prediction.sbatch b/research/scripts/slurm/reports/finalize_vdjdb_epitope_prediction.sbatch similarity index 100% rename from scripts/slurm/reports/finalize_vdjdb_epitope_prediction.sbatch rename to research/scripts/slurm/reports/finalize_vdjdb_epitope_prediction.sbatch diff --git a/scripts/slurm/training/paper.sbatch b/research/scripts/slurm/training/paper.sbatch similarity index 90% rename from scripts/slurm/training/paper.sbatch rename to research/scripts/slurm/training/paper.sbatch index c3bdace..056afd5 100644 --- a/scripts/slurm/training/paper.sbatch +++ b/research/scripts/slurm/training/paper.sbatch @@ -14,7 +14,7 @@ PYTHON="${RTP_CODEC_PYTHON:-python}" : "${DATA_DIR:?Set DATA_DIR to the locked prepared benchmark}" : "${TOKENIZER_PATH:?Set TOKENIZER_PATH to the DATA-ANCHOR bundle}" cd "$ROOT" -"$PYTHON" -m rtp_codec train --config "configs/paper/$ARM.json" \ +"$PYTHON" -m rtp_codec train --config "research/configs/paper/$ARM.json" \ --data-dir "$DATA_DIR" --tokenizer-path "$TOKENIZER_PATH" \ --output-dir "${OUTPUT_DIR:-artifacts/paper/$ARM-seed42}" \ --device cuda --num-workers "${SLURM_CPUS_PER_TASK:-8}" diff --git a/scripts/slurm/training/smoke_tcremp_geometry_loss.sbatch b/research/scripts/slurm/training/smoke_tcremp_geometry_loss.sbatch similarity index 94% rename from scripts/slurm/training/smoke_tcremp_geometry_loss.sbatch rename to research/scripts/slurm/training/smoke_tcremp_geometry_loss.sbatch index ce9d803..102b5d1 100644 --- a/scripts/slurm/training/smoke_tcremp_geometry_loss.sbatch +++ b/research/scripts/slurm/training/smoke_tcremp_geometry_loss.sbatch @@ -13,7 +13,7 @@ ROOT="${RTP_CODEC_ROOT:-${SLURM_SUBMIT_DIR:-$PWD}}" OUT="$ROOT/experiments/trb/tcremp-geometry-smoke-${SLURM_JOB_ID}" PYTHON="${RTP_CODEC_PYTHON:-python}" cd "$ROOT" -PYTHONPATH="$ROOT/src${PYTHONPATH:+:$PYTHONPATH}" "$PYTHON" tests/test_tcremp_geometry_loss.py +PYTHONPATH="$ROOT/src${PYTHONPATH:+:$PYTHONPATH}" "$PYTHON" src/tests/test_tcremp_geometry_loss.py PYTHONPATH="$ROOT/src${PYTHONPATH:+:$PYTHONPATH}" "$PYTHON" -m rtp_codec.training.multitask \ --data-dir "$ROOT/data/benchmark/trb" --standardizer-path "$ROOT/data/benchmark/trb/target_standardizer.npz" \ --output-dir "$OUT" --train-subset all --pgen-target log10_pgen_1mm \ diff --git a/scripts/slurm/training/train_anchored_tokenizer.sbatch b/research/scripts/slurm/training/train_anchored_tokenizer.sbatch similarity index 100% rename from scripts/slurm/training/train_anchored_tokenizer.sbatch rename to research/scripts/slurm/training/train_anchored_tokenizer.sbatch diff --git a/scripts/slurm/training/train_author_global_onehot_fixed.sbatch b/research/scripts/slurm/training/train_author_global_onehot_fixed.sbatch similarity index 100% rename from scripts/slurm/training/train_author_global_onehot_fixed.sbatch rename to research/scripts/slurm/training/train_author_global_onehot_fixed.sbatch diff --git a/scripts/slurm/training/train_author_global_pgen.sbatch b/research/scripts/slurm/training/train_author_global_pgen.sbatch similarity index 100% rename from scripts/slurm/training/train_author_global_pgen.sbatch rename to research/scripts/slurm/training/train_author_global_pgen.sbatch diff --git a/scripts/slurm/training/train_author_global_pgen_controls.sbatch b/research/scripts/slurm/training/train_author_global_pgen_controls.sbatch similarity index 100% rename from scripts/slurm/training/train_author_global_pgen_controls.sbatch rename to research/scripts/slurm/training/train_author_global_pgen_controls.sbatch diff --git a/scripts/slurm/training/train_author_global_reconstruction.sbatch b/research/scripts/slurm/training/train_author_global_reconstruction.sbatch similarity index 100% rename from scripts/slurm/training/train_author_global_reconstruction.sbatch rename to research/scripts/slurm/training/train_author_global_reconstruction.sbatch diff --git a/scripts/slurm/training/train_data_anchor_objective.sbatch b/research/scripts/slurm/training/train_data_anchor_objective.sbatch similarity index 97% rename from scripts/slurm/training/train_data_anchor_objective.sbatch rename to research/scripts/slurm/training/train_data_anchor_objective.sbatch index 99fd823..075a362 100644 --- a/scripts/slurm/training/train_data_anchor_objective.sbatch +++ b/research/scripts/slurm/training/train_data_anchor_objective.sbatch @@ -23,7 +23,7 @@ DATA_DIR="$ROOT_DIR/data/benchmark/trb" TOKENIZER="$ROOT_DIR/experiments/trb/tokenizers/anchored-seed42/data_anchor/anchored_tokenizer.json" MATRIX_ROOT="$ROOT_DIR/experiments/trb/data-anchor-full-factorial-gate" PREFLIGHT="$MATRIX_ROOT/PREFLIGHT.json" -CONDITION_CONFIG="$MATRIX_ROOT/configs/$CONDITION.json" +CONDITION_CONFIG="$MATRIX_ROOT/research/configs/$CONDITION.json" OUTPUT_DIR="$ROOT_DIR/experiments/trb/data-anchor-$CONDITION-seed42" PYTHON_BIN="${RTP_CODEC_PYTHON:-$(command -v python)}" diff --git a/scripts/slurm/training/train_external_pca256_pgen.sbatch b/research/scripts/slurm/training/train_external_pca256_pgen.sbatch similarity index 100% rename from scripts/slurm/training/train_external_pca256_pgen.sbatch rename to research/scripts/slurm/training/train_external_pca256_pgen.sbatch diff --git a/scripts/slurm/training/train_external_pca256_reconstruction.sbatch b/research/scripts/slurm/training/train_external_pca256_reconstruction.sbatch similarity index 100% rename from scripts/slurm/training/train_external_pca256_reconstruction.sbatch rename to research/scripts/slurm/training/train_external_pca256_reconstruction.sbatch diff --git a/scripts/slurm/training/train_external_pca256_sceptr_reconstruction.sbatch b/research/scripts/slurm/training/train_external_pca256_sceptr_reconstruction.sbatch similarity index 100% rename from scripts/slurm/training/train_external_pca256_sceptr_reconstruction.sbatch rename to research/scripts/slurm/training/train_external_pca256_sceptr_reconstruction.sbatch diff --git a/scripts/slurm/training/train_external_pgen.sbatch b/research/scripts/slurm/training/train_external_pgen.sbatch similarity index 100% rename from scripts/slurm/training/train_external_pgen.sbatch rename to research/scripts/slurm/training/train_external_pgen.sbatch diff --git a/scripts/slurm/training/train_external_pgen_tfidf.sbatch b/research/scripts/slurm/training/train_external_pgen_tfidf.sbatch similarity index 100% rename from scripts/slurm/training/train_external_pgen_tfidf.sbatch rename to research/scripts/slurm/training/train_external_pgen_tfidf.sbatch diff --git a/scripts/slurm/training/train_external_reconstruction.sbatch b/research/scripts/slurm/training/train_external_reconstruction.sbatch similarity index 100% rename from scripts/slurm/training/train_external_reconstruction.sbatch rename to research/scripts/slurm/training/train_external_reconstruction.sbatch diff --git a/scripts/slurm/training/train_external_residue_pca128_remaining.sbatch b/research/scripts/slurm/training/train_external_residue_pca128_remaining.sbatch similarity index 100% rename from scripts/slurm/training/train_external_residue_pca128_remaining.sbatch rename to research/scripts/slurm/training/train_external_residue_pca128_remaining.sbatch diff --git a/scripts/slurm/training/train_external_residue_pgen.sbatch b/research/scripts/slurm/training/train_external_residue_pgen.sbatch similarity index 100% rename from scripts/slurm/training/train_external_residue_pgen.sbatch rename to research/scripts/slurm/training/train_external_residue_pgen.sbatch diff --git a/scripts/slurm/training/train_external_residue_reconstruction.sbatch b/research/scripts/slurm/training/train_external_residue_reconstruction.sbatch similarity index 100% rename from scripts/slurm/training/train_external_residue_reconstruction.sbatch rename to research/scripts/slurm/training/train_external_residue_reconstruction.sbatch diff --git a/scripts/slurm/training/train_external_rtp128_reconstruction.sbatch b/research/scripts/slurm/training/train_external_rtp128_reconstruction.sbatch similarity index 100% rename from scripts/slurm/training/train_external_rtp128_reconstruction.sbatch rename to research/scripts/slurm/training/train_external_rtp128_reconstruction.sbatch diff --git a/scripts/slurm/training/train_external_sceptr_pca128_heads.sbatch b/research/scripts/slurm/training/train_external_sceptr_pca128_heads.sbatch similarity index 100% rename from scripts/slurm/training/train_external_sceptr_pca128_heads.sbatch rename to research/scripts/slurm/training/train_external_sceptr_pca128_heads.sbatch diff --git a/scripts/slurm/training/train_forward.sbatch b/research/scripts/slurm/training/train_forward.sbatch similarity index 98% rename from scripts/slurm/training/train_forward.sbatch rename to research/scripts/slurm/training/train_forward.sbatch index 574afa7..8a39bb6 100644 --- a/scripts/slurm/training/train_forward.sbatch +++ b/research/scripts/slurm/training/train_forward.sbatch @@ -10,7 +10,7 @@ set -euo pipefail -ROOT_DIR="${SLURM_SUBMIT_DIR:-$(cd "$(dirname "${BASH_SOURCE[0]}")/../../.." && pwd)}" +ROOT_DIR="${SLURM_SUBMIT_DIR:-$(cd "$(dirname "${BASH_SOURCE[0]}")/../../../.." && pwd)}" cd "$ROOT_DIR" mkdir -p slurm/logs diff --git a/scripts/slurm/training/train_forward_wandb_grid.sbatch b/research/scripts/slurm/training/train_forward_wandb_grid.sbatch similarity index 100% rename from scripts/slurm/training/train_forward_wandb_grid.sbatch rename to research/scripts/slurm/training/train_forward_wandb_grid.sbatch diff --git a/scripts/slurm/training/train_inverse_wandb_grid.sbatch b/research/scripts/slurm/training/train_inverse_wandb_grid.sbatch similarity index 100% rename from scripts/slurm/training/train_inverse_wandb_grid.sbatch rename to research/scripts/slurm/training/train_inverse_wandb_grid.sbatch diff --git a/scripts/slurm/training/train_multitask.sbatch b/research/scripts/slurm/training/train_multitask.sbatch similarity index 85% rename from scripts/slurm/training/train_multitask.sbatch rename to research/scripts/slurm/training/train_multitask.sbatch index 6b2a9b7..36f1dac 100644 --- a/scripts/slurm/training/train_multitask.sbatch +++ b/research/scripts/slurm/training/train_multitask.sbatch @@ -11,7 +11,7 @@ set -euo pipefail -ROOT_DIR="${SLURM_SUBMIT_DIR:-$(cd "$(dirname "${BASH_SOURCE[0]}")/../../.." && pwd)}" +ROOT_DIR="${SLURM_SUBMIT_DIR:-$(cd "$(dirname "${BASH_SOURCE[0]}")/../../../.." && pwd)}" cd "$ROOT_DIR" export DATA_DIR="${DATA_DIR:-data/benchmark/trb}" export OUTPUT_DIR="${OUTPUT_DIR:-artifacts/multitask/char}" @@ -22,4 +22,4 @@ export BATCH_SIZE="${BATCH_SIZE:-64}" export EPOCHS="${EPOCHS:-40}" export SEED="${SEED:-42}" -bash scripts/training/train_multitask.sh --num-workers "${SLURM_CPUS_PER_TASK:-8}" +bash research/scripts/training/train_multitask.sh --num-workers "${SLURM_CPUS_PER_TASK:-8}" diff --git a/scripts/slurm/training/train_pgen_background_100k_array.sbatch b/research/scripts/slurm/training/train_pgen_background_100k_array.sbatch similarity index 98% rename from scripts/slurm/training/train_pgen_background_100k_array.sbatch rename to research/scripts/slurm/training/train_pgen_background_100k_array.sbatch index bcc8960..958bd6f 100644 --- a/scripts/slurm/training/train_pgen_background_100k_array.sbatch +++ b/research/scripts/slurm/training/train_pgen_background_100k_array.sbatch @@ -12,7 +12,7 @@ set -euo pipefail -ROOT_DIR="${SLURM_SUBMIT_DIR:-$(cd "$(dirname "${BASH_SOURCE[0]}")/../../.." && pwd)}" +ROOT_DIR="${SLURM_SUBMIT_DIR:-$(cd "$(dirname "${BASH_SOURCE[0]}")/../../../.." && pwd)}" cd "$ROOT_DIR" CHAINS=(TRB TRA TRG TRD IGH IGK IGL) diff --git a/scripts/slurm/training/train_pgen_trb_background_100k.sbatch b/research/scripts/slurm/training/train_pgen_trb_background_100k.sbatch similarity index 98% rename from scripts/slurm/training/train_pgen_trb_background_100k.sbatch rename to research/scripts/slurm/training/train_pgen_trb_background_100k.sbatch index e642ecb..aece17f 100644 --- a/scripts/slurm/training/train_pgen_trb_background_100k.sbatch +++ b/research/scripts/slurm/training/train_pgen_trb_background_100k.sbatch @@ -11,7 +11,7 @@ set -euo pipefail -ROOT_DIR="${SLURM_SUBMIT_DIR:-$(cd "$(dirname "${BASH_SOURCE[0]}")/../../.." && pwd)}" +ROOT_DIR="${SLURM_SUBMIT_DIR:-$(cd "$(dirname "${BASH_SOURCE[0]}")/../../../.." && pwd)}" cd "$ROOT_DIR" AIRR_PATH="/projects/immunestatus/vdjrearm/pgen_1mm_background_100k/trb_background_100k_pgen.tsv" diff --git a/scripts/slurm/training/train_phase1_rq1_char.sbatch b/research/scripts/slurm/training/train_phase1_rq1_char.sbatch similarity index 100% rename from scripts/slurm/training/train_phase1_rq1_char.sbatch rename to research/scripts/slurm/training/train_phase1_rq1_char.sbatch diff --git a/scripts/slurm/training/train_phase2_rq23_char.sbatch b/research/scripts/slurm/training/train_phase2_rq23_char.sbatch similarity index 100% rename from scripts/slurm/training/train_phase2_rq23_char.sbatch rename to research/scripts/slurm/training/train_phase2_rq23_char.sbatch diff --git a/scripts/slurm/training/train_rq4_wordpiece.sbatch b/research/scripts/slurm/training/train_rq4_wordpiece.sbatch similarity index 100% rename from scripts/slurm/training/train_rq4_wordpiece.sbatch rename to research/scripts/slurm/training/train_rq4_wordpiece.sbatch diff --git a/scripts/slurm/training/train_rq5_depth.sbatch b/research/scripts/slurm/training/train_rq5_depth.sbatch similarity index 100% rename from scripts/slurm/training/train_rq5_depth.sbatch rename to research/scripts/slurm/training/train_rq5_depth.sbatch diff --git a/scripts/slurm/training/train_rq5_width.sbatch b/research/scripts/slurm/training/train_rq5_width.sbatch similarity index 100% rename from scripts/slurm/training/train_rq5_width.sbatch rename to research/scripts/slurm/training/train_rq5_width.sbatch diff --git a/scripts/slurm/training/train_tcremp_geometry_ablation.sbatch b/research/scripts/slurm/training/train_tcremp_geometry_ablation.sbatch similarity index 100% rename from scripts/slurm/training/train_tcremp_geometry_ablation.sbatch rename to research/scripts/slurm/training/train_tcremp_geometry_ablation.sbatch diff --git a/scripts/slurm/training/train_wordpiece_sweep.sbatch b/research/scripts/slurm/training/train_wordpiece_sweep.sbatch similarity index 100% rename from scripts/slurm/training/train_wordpiece_sweep.sbatch rename to research/scripts/slurm/training/train_wordpiece_sweep.sbatch diff --git a/scripts/training/calc_pgen_1mm.sh b/research/scripts/training/calc_pgen_1mm.sh similarity index 96% rename from scripts/training/calc_pgen_1mm.sh rename to research/scripts/training/calc_pgen_1mm.sh index bcb326c..947e951 100644 --- a/scripts/training/calc_pgen_1mm.sh +++ b/research/scripts/training/calc_pgen_1mm.sh @@ -2,7 +2,7 @@ set -euo pipefail -ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)" +ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../../.." && pwd)" cd "$ROOT_DIR" AIRR_PATH="${AIRR_PATH:-}" diff --git a/scripts/training/tcremp_launch.sh b/research/scripts/training/tcremp_launch.sh similarity index 100% rename from scripts/training/tcremp_launch.sh rename to research/scripts/training/tcremp_launch.sh diff --git a/scripts/training/train_multitask.sh b/research/scripts/training/train_multitask.sh similarity index 100% rename from scripts/training/train_multitask.sh rename to research/scripts/training/train_multitask.sh diff --git a/scripts/training/train_pgen.sh b/research/scripts/training/train_pgen.sh similarity index 97% rename from scripts/training/train_pgen.sh rename to research/scripts/training/train_pgen.sh index 40f5336..6f6f5d9 100644 --- a/scripts/training/train_pgen.sh +++ b/research/scripts/training/train_pgen.sh @@ -2,7 +2,7 @@ set -euo pipefail -ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)" +ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../../.." && pwd)" cd "$ROOT_DIR" AIRR_PATH="${AIRR_PATH:-}" diff --git a/scripts/legacy/run3_all_sequential.sh b/scripts/legacy/run3_all_sequential.sh deleted file mode 100644 index e1b862f..0000000 --- a/scripts/legacy/run3_all_sequential.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/bash -bash scripts/legacy/run3a_individual_maxlen.sh -bash scripts/legacy/run3b_individual_maxlen_maxtokenlen9.sh -bash scripts/legacy/run3c_fixed_maxlen10.sh diff --git a/scripts/legacy/run4_all_sequential.sh b/scripts/legacy/run4_all_sequential.sh deleted file mode 100644 index a6ddc21..0000000 --- a/scripts/legacy/run4_all_sequential.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/bash -export PYTHONPATH="$PWD/src${PYTHONPATH:+:$PYTHONPATH}" -bash scripts/legacy/run4a_individual_maxlen_maxtokenlen9_anchored.sh -bash scripts/legacy/run4b_individual_maxlen_maxtokenlen9_anchored_dropout.sh diff --git a/scripts/legacy/run5_all_sequential.sh b/scripts/legacy/run5_all_sequential.sh deleted file mode 100644 index 7b64970..0000000 --- a/scripts/legacy/run5_all_sequential.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/bash -export PYTHONPATH="$PWD/src${PYTHONPATH:+:$PYTHONPATH}" -bash scripts/legacy/run5a_hidden128.sh -bash scripts/legacy/run5b_blocks3.sh -bash scripts/legacy/run5c_hidden128_blocks3.sh -bash scripts/legacy/run5d_hidden96_blocks3.sh diff --git a/src/rtp_codec/benchmarks/datasets/prepare_vdjdb_redcea_clonotypes.py b/src/rtp_codec/benchmarks/datasets/prepare_vdjdb_redcea_clonotypes.py index f982c64..60f982c 100644 --- a/src/rtp_codec/benchmarks/datasets/prepare_vdjdb_redcea_clonotypes.py +++ b/src/rtp_codec/benchmarks/datasets/prepare_vdjdb_redcea_clonotypes.py @@ -180,7 +180,7 @@ def main() -> None: "sha256": sha256(args.cluster_members), "git_commit": args.source_git_commit, "git_blob": args.source_git_blob, - "expected_repository_path": "results/redcea/cluster_members_TRB.txt", + "expected_repository_path": "research/results/redcea/cluster_members_TRB.txt", }, "cohort": { "path": str(cohort_path), "sha256": sha256(cohort_path), diff --git a/src/rtp_codec/benchmarks/pgen/collect_external_pgen.py b/src/rtp_codec/benchmarks/pgen/collect_external_pgen.py index 6c686a5..5fb4d49 100644 --- a/src/rtp_codec/benchmarks/pgen/collect_external_pgen.py +++ b/src/rtp_codec/benchmarks/pgen/collect_external_pgen.py @@ -24,7 +24,7 @@ def parse_args(): p = argparse.ArgumentParser(description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter) p.add_argument("--runs-dir", default="artifacts/benchmark/pgen") - p.add_argument("--output-dir", default="results/pgen") + p.add_argument("--output-dir", default="research/results/pgen") return p.parse_args() diff --git a/src/rtp_codec/benchmarks/pgen/collect_pgen.py b/src/rtp_codec/benchmarks/pgen/collect_pgen.py index 0daaa40..d26ad7d 100644 --- a/src/rtp_codec/benchmarks/pgen/collect_pgen.py +++ b/src/rtp_codec/benchmarks/pgen/collect_pgen.py @@ -24,7 +24,7 @@ def parse_args(): p = argparse.ArgumentParser(description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter) p.add_argument("--runs-dir", default="artifacts/benchmark/pgen") - p.add_argument("--output-dir", default="results/pgen") + p.add_argument("--output-dir", default="research/results/pgen") return p.parse_args() diff --git a/src/rtp_codec/benchmarks/reconstruction/collect_external_reconstruction.py b/src/rtp_codec/benchmarks/reconstruction/collect_external_reconstruction.py index fd6207c..8442903 100644 --- a/src/rtp_codec/benchmarks/reconstruction/collect_external_reconstruction.py +++ b/src/rtp_codec/benchmarks/reconstruction/collect_external_reconstruction.py @@ -29,7 +29,7 @@ def parse_args(): p = argparse.ArgumentParser(description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter) p.add_argument("--runs-dir", default="artifacts/benchmark/reconstruction") p.add_argument("--bottleneck-dir", default="data/benchmark/trb/bottleneck") - p.add_argument("--output-dir", default="results/reconstruction") + p.add_argument("--output-dir", default="research/results/reconstruction") p.add_argument("--bottleneck-dim", type=int, default=64) return p.parse_args() diff --git a/src/rtp_codec/benchmarks/reconstruction/collect_reconstruction.py b/src/rtp_codec/benchmarks/reconstruction/collect_reconstruction.py index fd6207c..8442903 100644 --- a/src/rtp_codec/benchmarks/reconstruction/collect_reconstruction.py +++ b/src/rtp_codec/benchmarks/reconstruction/collect_reconstruction.py @@ -29,7 +29,7 @@ def parse_args(): p = argparse.ArgumentParser(description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter) p.add_argument("--runs-dir", default="artifacts/benchmark/reconstruction") p.add_argument("--bottleneck-dir", default="data/benchmark/trb/bottleneck") - p.add_argument("--output-dir", default="results/reconstruction") + p.add_argument("--output-dir", default="research/results/reconstruction") p.add_argument("--bottleneck-dim", type=int, default=64) return p.parse_args() diff --git a/src/rtp_codec/benchmarks/runtime/benchmark_speed.py b/src/rtp_codec/benchmarks/runtime/benchmark_speed.py index 6c853ba..87134ef 100644 --- a/src/rtp_codec/benchmarks/runtime/benchmark_speed.py +++ b/src/rtp_codec/benchmarks/runtime/benchmark_speed.py @@ -30,7 +30,7 @@ def parse_args(): p = argparse.ArgumentParser(description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter) p.add_argument("--dataset-dir", default="data/benchmark/trb") - p.add_argument("--output-dir", default="results/pgen") + p.add_argument("--output-dir", default="research/results/pgen") p.add_argument("--device", default="auto", choices=("auto", "cpu", "cuda")) p.add_argument("--n-sequences", type=int, default=5000) p.add_argument("--batch-size", type=int, default=256) diff --git a/src/rtp_codec/experiments/sweeps/submit_wandb_grid.py b/src/rtp_codec/experiments/sweeps/submit_wandb_grid.py index bf60755..0e1b2a2 100644 --- a/src/rtp_codec/experiments/sweeps/submit_wandb_grid.py +++ b/src/rtp_codec/experiments/sweeps/submit_wandb_grid.py @@ -161,14 +161,14 @@ def main(): args, "forward", FORWARD_GRID, - scripts_root / "scripts" / "slurm" / "training" / "train_forward_wandb_grid.sbatch", + scripts_root / "research" / "scripts" / "slurm" / "training" / "train_forward_wandb_grid.sbatch", ) if args.model in {"inverse", "both"}: total += submit_model( args, "inverse", INVERSE_GRID, - scripts_root / "scripts" / "slurm" / "training" / "train_inverse_wandb_grid.sbatch", + scripts_root / "research" / "scripts" / "slurm" / "training" / "train_inverse_wandb_grid.sbatch", ) print(f"submitted_jobs={total}") diff --git a/src/rtp_codec/paths.py b/src/rtp_codec/paths.py index f6d27cb..553bbbe 100644 --- a/src/rtp_codec/paths.py +++ b/src/rtp_codec/paths.py @@ -10,6 +10,6 @@ def repository_root() -> Path: raise FileNotFoundError(f"RTP_CODEC_ROOT is not a repository checkout: {root}") return root for root in Path(__file__).resolve().parents: - if (root / "pyproject.toml").is_file() and (root / "scripts").is_dir(): + if (root / "pyproject.toml").is_file() and (root / "research" / "scripts").is_dir(): return root raise FileNotFoundError("This launcher requires a source checkout; set RTP_CODEC_ROOT.") diff --git a/tests/test_anchored_tokenization.py b/src/tests/test_anchored_tokenization.py similarity index 100% rename from tests/test_anchored_tokenization.py rename to src/tests/test_anchored_tokenization.py diff --git a/tests/test_author_global_embeddings.py b/src/tests/test_author_global_embeddings.py similarity index 100% rename from tests/test_author_global_embeddings.py rename to src/tests/test_author_global_embeddings.py diff --git a/tests/test_data_anchor_factorial.py b/src/tests/test_data_anchor_factorial.py similarity index 100% rename from tests/test_data_anchor_factorial.py rename to src/tests/test_data_anchor_factorial.py diff --git a/tests/test_external_model_benchmark.py b/src/tests/test_external_model_benchmark.py similarity index 100% rename from tests/test_external_model_benchmark.py rename to src/tests/test_external_model_benchmark.py diff --git a/tests/test_external_residue_benchmark.py b/src/tests/test_external_residue_benchmark.py similarity index 100% rename from tests/test_external_residue_benchmark.py rename to src/tests/test_external_residue_benchmark.py diff --git a/tests/test_integration_compatibility.py b/src/tests/test_integration_compatibility.py similarity index 100% rename from tests/test_integration_compatibility.py rename to src/tests/test_integration_compatibility.py diff --git a/tests/test_latent_secondary.py b/src/tests/test_latent_secondary.py similarity index 100% rename from tests/test_latent_secondary.py rename to src/tests/test_latent_secondary.py diff --git a/tests/test_latent_sufficiency.py b/src/tests/test_latent_sufficiency.py similarity index 100% rename from tests/test_latent_sufficiency.py rename to src/tests/test_latent_sufficiency.py diff --git a/tests/test_multitask_baselines.py b/src/tests/test_multitask_baselines.py similarity index 96% rename from tests/test_multitask_baselines.py rename to src/tests/test_multitask_baselines.py index 2005687..5d400de 100644 --- a/tests/test_multitask_baselines.py +++ b/src/tests/test_multitask_baselines.py @@ -118,12 +118,12 @@ def test_tiny_locked_benchmark_trains_and_writes_terminal_artifacts(self): logging.shutdown() def test_phase1_configs_are_matched_except_condition_and_weights(self): - root = Path(__file__).resolve().parents[1] + root = Path(__file__).resolve().parents[2] r = json.loads( - (root / "configs/trb/rq1-char-r-seed42/experiment_config.json").read_text() + (root / "research/configs/trb/rq1-char-r-seed42/experiment_config.json").read_text() ) rtp = json.loads( - (root / "configs/trb/rq1-char-rtp-seed42/experiment_config.json").read_text() + (root / "research/configs/trb/rq1-char-rtp-seed42/experiment_config.json").read_text() ) for key in ( "base_git_revision", diff --git a/tests/test_multitask_pipeline.py b/src/tests/test_multitask_pipeline.py similarity index 100% rename from tests/test_multitask_pipeline.py rename to src/tests/test_multitask_pipeline.py diff --git a/tests/test_prepare_trb_joint.py b/src/tests/test_prepare_trb_joint.py similarity index 100% rename from tests/test_prepare_trb_joint.py rename to src/tests/test_prepare_trb_joint.py diff --git a/tests/test_public_inference.py b/src/tests/test_public_inference.py similarity index 97% rename from tests/test_public_inference.py rename to src/tests/test_public_inference.py index 75b578a..a5c14b5 100644 --- a/tests/test_public_inference.py +++ b/src/tests/test_public_inference.py @@ -65,8 +65,8 @@ def test_tsv_cli_writes_matrix_and_metadata(checkpoint, tmp_path): def test_paper_preset_accepts_explicit_overrides(): - root = Path(__file__).resolve().parents[1] - path = root / "configs/paper/rtp.json" + root = Path(__file__).resolve().parents[2] + path = root / "research/configs/paper/rtp.json" arguments = training_arguments(["--config", str(path), "--epochs", "1", "--device", "cpu"]) from rtp_codec.training.multitask import parse_args with patch("sys.argv", ["train", *arguments]): diff --git a/tests/test_single_aa_challenge.py b/src/tests/test_single_aa_challenge.py similarity index 100% rename from tests/test_single_aa_challenge.py rename to src/tests/test_single_aa_challenge.py diff --git a/tests/test_single_aa_evaluation.py b/src/tests/test_single_aa_evaluation.py similarity index 100% rename from tests/test_single_aa_evaluation.py rename to src/tests/test_single_aa_evaluation.py diff --git a/tests/test_tcremp_geometry_loss.py b/src/tests/test_tcremp_geometry_loss.py similarity index 100% rename from tests/test_tcremp_geometry_loss.py rename to src/tests/test_tcremp_geometry_loss.py diff --git a/tests/test_vdjdb_cohort.py b/src/tests/test_vdjdb_cohort.py similarity index 100% rename from tests/test_vdjdb_cohort.py rename to src/tests/test_vdjdb_cohort.py diff --git a/tests/test_vdjdb_epitope_prediction.py b/src/tests/test_vdjdb_epitope_prediction.py similarity index 100% rename from tests/test_vdjdb_epitope_prediction.py rename to src/tests/test_vdjdb_epitope_prediction.py diff --git a/tests/test_vdjdb_redcea_clonotypes.py b/src/tests/test_vdjdb_redcea_clonotypes.py similarity index 100% rename from tests/test_vdjdb_redcea_clonotypes.py rename to src/tests/test_vdjdb_redcea_clonotypes.py diff --git a/tests/test_vdjdb_redcea_evaluation.py b/src/tests/test_vdjdb_redcea_evaluation.py similarity index 100% rename from tests/test_vdjdb_redcea_evaluation.py rename to src/tests/test_vdjdb_redcea_evaluation.py diff --git a/tests/test_vdjdb_viral_motif_top10.py b/src/tests/test_vdjdb_viral_motif_top10.py similarity index 100% rename from tests/test_vdjdb_viral_motif_top10.py rename to src/tests/test_vdjdb_viral_motif_top10.py diff --git a/tests/test_vdjdb_ylq.py b/src/tests/test_vdjdb_ylq.py similarity index 100% rename from tests/test_vdjdb_ylq.py rename to src/tests/test_vdjdb_ylq.py diff --git a/tests/test_vdjdb_ylq_motif_pooled.py b/src/tests/test_vdjdb_ylq_motif_pooled.py similarity index 100% rename from tests/test_vdjdb_ylq_motif_pooled.py rename to src/tests/test_vdjdb_ylq_motif_pooled.py diff --git a/tests/test_wordpiece_sweep.py b/src/tests/test_wordpiece_sweep.py similarity index 100% rename from tests/test_wordpiece_sweep.py rename to src/tests/test_wordpiece_sweep.py

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≫~IZy4k$d*xVc&nI;nEwCHDxslvpbO;^hhI?zl5fTXST5P7d3q zz3?z+Q2B0~LTYiqqd=ak6JRvoM@eRk+Ck=#ia$#^4fV{?ZUkK^-It+TGa(^EYCqAe zg)kDc`=A08_^dZ61J7P7iS8~pD1qTFw$pkm3&*^IYcDfasldpu;(?LhSAB2BmcL{;8GquSL1vzP zNS5jSyM@b_tFCMI0kR-LGakz!RhT$52!ED<+WaS@nBhf=PLZ5EzQXNSmA$Da{dCBb z-KmzGVM?>=xUEL=68VNKQ-O@_v0q=so1k{+mno1i35i@~_9zF*1&UG9*!yFZ2nBYM zXJzzAcjTh;lZo?~wSg1ageLPk>81k`*A6+7V>jxMyu)cn@JG1=WGwbTd~HDK-YW8? z`~Ce@T_W1m9l8Q@iTHjPuv;S>^6r(pe2mQr#hqudz13hu~7>)Ev0I-|Ld z545|SwN%`k+YNoT(T3UfP$z{XtG#yn*rIG&WU9x&Mw$DwPvS*;_Af=YeYF8?B3$l> zR;%i0JiQh2L_n`F14`IUR(UbpA>bjL$`6lk{l)3bT80H4F{MEWzM3&@3{X3=`Aj%E zdp&eF&y{@Y`Mmbw7>Z)!&#+F%%fF^=H$Gf^(cfc6C`k_C&94=tbye-~9(P}g@)ZqD zNY(^4euIU#=E>d|P2Qe@OU?_bSqH^*g^*O6JqXD>cAiWPm=a>2jCQ^fzx*EKopbWx zrh#1I!<*2uI3>7*A9XKO8tnyk?I>UDV}uS*$Xubyjw2X~bhA={ctY_P)qT}I^P7_{ zic8yJwa-(j!$(M*@f>@mx*>1Aj}=4|Kutdba?-pl>9mA|Uq+a`s8$#@xTBPtvPKeV zhQn!UV^SeLE$P8VyLdN82`;?6vg>D`ZSzNwle0h9E`kEc^yzZlD0lUfgV}kuf*}X@ z7jz0^$rGiaT+}lJ$Oi4XFQ@wLVq%u0kER8}#u{ktFkjAZRaLUMq&RzEgin0*G_g=O0_2?av=6-L)|pPdtyA z+%2l}-≫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�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