FedGWAS 0.0.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- fedgwas-0.0.1/.flwr/.gitignore +1 -0
- fedgwas-0.0.1/.github/workflows/deploy-docs.yml +61 -0
- fedgwas-0.0.1/.github/workflows/publish-pypi.yml +57 -0
- fedgwas-0.0.1/.gitignore +145 -0
- fedgwas-0.0.1/LICENSE +21 -0
- fedgwas-0.0.1/PKG-INFO +287 -0
- fedgwas-0.0.1/README.md +241 -0
- fedgwas-0.0.1/cluster_deployment/README.md +92 -0
- fedgwas-0.0.1/cluster_deployment/docs/CLUSTER_USER_GUIDE.md +631 -0
- fedgwas-0.0.1/cluster_deployment/scripts/check-cluster-clock-skew.sh +66 -0
- fedgwas-0.0.1/cluster_deployment/scripts/cluster-config-template.sh +8 -0
- fedgwas-0.0.1/cluster_deployment/scripts/cluster-diagnose.sh +100 -0
- fedgwas-0.0.1/cluster_deployment/scripts/cluster-run-app.sh +143 -0
- fedgwas-0.0.1/cluster_deployment/scripts/cluster-start-client.sh +148 -0
- fedgwas-0.0.1/cluster_deployment/scripts/cluster-start-server.sh +44 -0
- fedgwas-0.0.1/cluster_deployment/scripts/cluster-status.sh +16 -0
- fedgwas-0.0.1/cluster_deployment/scripts/cluster-stop-all.sh +15 -0
- fedgwas-0.0.1/cluster_deployment/scripts/cluster-verify-data.sh +99 -0
- fedgwas-0.0.1/cluster_deployment/scripts/download-flwr-wheels.sh +22 -0
- fedgwas-0.0.1/cluster_deployment/scripts/setup-cluster-node.sh +196 -0
- fedgwas-0.0.1/configs/config.yaml +36 -0
- fedgwas-0.0.1/configs/config_template.yaml +36 -0
- fedgwas-0.0.1/docs/CURRENT_VERSION.md +639 -0
- fedgwas-0.0.1/docs/DEVELOPMENT.md +406 -0
- fedgwas-0.0.1/docs/RELEASE.md +141 -0
- fedgwas-0.0.1/docs/website/content/api-reference/api.md +69 -0
- fedgwas-0.0.1/docs/website/content/api-reference/modules/association.md +35 -0
- fedgwas-0.0.1/docs/website/content/api-reference/modules/client.md +44 -0
- fedgwas-0.0.1/docs/website/content/api-reference/modules/kinship.md +36 -0
- fedgwas-0.0.1/docs/website/content/api-reference/modules/quality-control.md +44 -0
- fedgwas-0.0.1/docs/website/content/api-reference/modules/server.md +49 -0
- fedgwas-0.0.1/docs/website/content/api-reference/outputs.md +62 -0
- fedgwas-0.0.1/docs/website/content/api-reference/parameters.md +9 -0
- fedgwas-0.0.1/docs/website/content/api-reference/sim-cli.md +33 -0
- fedgwas-0.0.1/docs/website/content/examples/1000genomes.md +30 -0
- fedgwas-0.0.1/docs/website/content/examples/overview.md +12 -0
- fedgwas-0.0.1/docs/website/content/examples/performance-small.md +44 -0
- fedgwas-0.0.1/docs/website/content/examples/three-node-deployment.md +185 -0
- fedgwas-0.0.1/docs/website/content/examples/tiny-correctness.md +42 -0
- fedgwas-0.0.1/docs/website/content/get-started/getting-started/federated-deployment.md +148 -0
- fedgwas-0.0.1/docs/website/content/get-started/getting-started/local-simulation.md +80 -0
- fedgwas-0.0.1/docs/website/content/get-started/getting-started/next-steps.md +65 -0
- fedgwas-0.0.1/docs/website/content/get-started/getting-started/prerequisites.md +47 -0
- fedgwas-0.0.1/docs/website/content/get-started/intro.md +147 -0
- fedgwas-0.0.1/docs/website/content/user-guide/design/architecture.md +81 -0
- fedgwas-0.0.1/docs/website/content/user-guide/design/gwas-components.md +55 -0
- fedgwas-0.0.1/docs/website/content/user-guide/design/parameters.md +163 -0
- fedgwas-0.0.1/docs/website/content/user-guide/design/privacy-masking.md +42 -0
- fedgwas-0.0.1/docs/website/content/user-guide/design/workflow.md +69 -0
- fedgwas-0.0.1/docs/website/content/user-guide/experiments/overview.md +71 -0
- fedgwas-0.0.1/docs/website/content/user-guide/experiments/runner.md +77 -0
- fedgwas-0.0.1/docs/website/content/user-guide/federated-deployment/cli-deployment.md +201 -0
- fedgwas-0.0.1/docs/website/content/user-guide/federated-deployment/client-deployment.md +14 -0
- fedgwas-0.0.1/docs/website/content/user-guide/federated-deployment/installation.md +218 -0
- fedgwas-0.0.1/docs/website/content/user-guide/federated-deployment/legacy-cluster-scripts.md +9 -0
- fedgwas-0.0.1/docs/website/content/user-guide/federated-deployment/script-deployment.md +211 -0
- fedgwas-0.0.1/docs/website/content/user-guide/federated-deployment/server-deployment.md +14 -0
- fedgwas-0.0.1/docs/website/content/user-guide/getting-started/configuration.md +112 -0
- fedgwas-0.0.1/docs/website/content/user-guide/getting-started/deployment.md +17 -0
- fedgwas-0.0.1/docs/website/content/user-guide/getting-started/simulation.md +98 -0
- fedgwas-0.0.1/docs/website/content/user-guide/local-simulation/cli_simulation.md +357 -0
- fedgwas-0.0.1/docs/website/content/user-guide/local-simulation/config-and-data.md +369 -0
- fedgwas-0.0.1/docs/website/content/user-guide/local-simulation/evaluation.md +164 -0
- fedgwas-0.0.1/docs/website/content/user-guide/local-simulation/experiments.md +154 -0
- fedgwas-0.0.1/docs/website/content/user-guide/local-simulation/installation.md +108 -0
- fedgwas-0.0.1/docs/website/content/user-guide/local-simulation/run-experiment.md +142 -0
- fedgwas-0.0.1/docs/website/content/user-guide/troubleshooting.md +56 -0
- fedgwas-0.0.1/docs/website/docusaurus.config.js +187 -0
- fedgwas-0.0.1/docs/website/images/Federated_settings.png +0 -0
- fedgwas-0.0.1/docs/website/images/architecture-current.svg +136 -0
- fedgwas-0.0.1/docs/website/images/current_overview.png +0 -0
- fedgwas-0.0.1/docs/website/images/illustration.png +0 -0
- fedgwas-0.0.1/docs/website/images/logo-readme.png +0 -0
- fedgwas-0.0.1/docs/website/images/logo.png +0 -0
- fedgwas-0.0.1/docs/website/package-lock.json +28564 -0
- fedgwas-0.0.1/docs/website/package.json +45 -0
- fedgwas-0.0.1/docs/website/sidebarsDocs.js +62 -0
- fedgwas-0.0.1/docs/website/sidebarsExamples.js +9 -0
- fedgwas-0.0.1/docs/website/sidebarsGetStarted.js +29 -0
- fedgwas-0.0.1/docs/website/sidebarsReference.js +18 -0
- fedgwas-0.0.1/docs/website/sidebarsUserGuide.js +55 -0
- fedgwas-0.0.1/docs/website/src/css/custom.css +62 -0
- fedgwas-0.0.1/docs/website/src/pages/index.js +209 -0
- fedgwas-0.0.1/docs/website/src/pages/index.module.css +260 -0
- fedgwas-0.0.1/docs/website/versions.json +1 -0
- fedgwas-0.0.1/examples/01tiny-synthetic-data/README.md +0 -0
- fedgwas-0.0.1/examples/02small-data-performance-evaluation/README.md +0 -0
- fedgwas-0.0.1/examples/03real-data-1000-genomes/README.md +0 -0
- fedgwas-0.0.1/examples/04three-node-deployment/README.md +175 -0
- fedgwas-0.0.1/experiments/README.md +198 -0
- fedgwas-0.0.1/experiments/correctness/tiny_even/README.md +90 -0
- fedgwas-0.0.1/experiments/correctness/tiny_even/config.yaml +63 -0
- fedgwas-0.0.1/experiments/correctness/tiny_even/configs/center_1/config.yaml +43 -0
- fedgwas-0.0.1/experiments/correctness/tiny_even/configs/center_2/config.yaml +43 -0
- fedgwas-0.0.1/experiments/correctness/tiny_even/configs/server/config.yaml +3 -0
- fedgwas-0.0.1/experiments/performance/medium_even/README.md +87 -0
- fedgwas-0.0.1/experiments/performance/medium_even/config.yaml +60 -0
- fedgwas-0.0.1/experiments/performance/medium_even/configs/center_1/config.yaml +41 -0
- fedgwas-0.0.1/experiments/performance/medium_even/configs/center_2/config.yaml +41 -0
- fedgwas-0.0.1/experiments/performance/medium_even/configs/server/config.yaml +3 -0
- fedgwas-0.0.1/experiments/performance/scales.yaml +27 -0
- fedgwas-0.0.1/experiments/performance/small_even/README.md +57 -0
- fedgwas-0.0.1/experiments/performance/small_even/config.yaml +60 -0
- fedgwas-0.0.1/experiments/performance/small_even/configs/center_1/config.yaml +43 -0
- fedgwas-0.0.1/experiments/performance/small_even/configs/center_2/config.yaml +43 -0
- fedgwas-0.0.1/experiments/performance/small_even/configs/server/config.yaml +3 -0
- fedgwas-0.0.1/experiments/real_world/1000genomes/README.md +245 -0
- fedgwas-0.0.1/experiments/real_world/1000genomes/config.yaml +23 -0
- fedgwas-0.0.1/experiments/real_world/1000genomes/configs/center_1/config.yaml +41 -0
- fedgwas-0.0.1/experiments/real_world/1000genomes/configs/center_2/config.yaml +41 -0
- fedgwas-0.0.1/experiments/real_world/1000genomes/configs/server/config.yaml +3 -0
- fedgwas-0.0.1/experiments/real_world/1000genomes/download_subset.sh +95 -0
- fedgwas-0.0.1/experiments/real_world/1000genomes/manuscript/PLOT_COMPARISON.md +73 -0
- fedgwas-0.0.1/experiments/real_world/1000genomes/manuscript/README.md +81 -0
- fedgwas-0.0.1/experiments/real_world/1000genomes/manuscript/VISUALIZATION_GUIDE.md +73 -0
- fedgwas-0.0.1/experiments/real_world/1000genomes/manuscript/baseline_validation_report.md +117 -0
- fedgwas-0.0.1/experiments/real_world/1000genomes/manuscript/figures/king_correlation.png +0 -0
- fedgwas-0.0.1/experiments/real_world/1000genomes/manuscript/figures/lr_correlation.png +0 -0
- fedgwas-0.0.1/experiments/real_world/1000genomes/manuscript/figures/manhattan_baseline.png +0 -0
- fedgwas-0.0.1/experiments/real_world/1000genomes/manuscript/figures/manhattan_comparison.png +0 -0
- fedgwas-0.0.1/experiments/real_world/1000genomes/manuscript/figures/manhattan_federated.png +0 -0
- fedgwas-0.0.1/experiments/real_world/1000genomes/manuscript/figures/qq_baseline.png +0 -0
- fedgwas-0.0.1/experiments/real_world/1000genomes/manuscript/figures/qq_federated.png +0 -0
- fedgwas-0.0.1/experiments/real_world/1000genomes/manuscript/manuscript_sections.md +39 -0
- fedgwas-0.0.1/experiments/real_world/1000genomes/manuscript/summary.json +31 -0
- fedgwas-0.0.1/experiments/real_world/1000genomes/manuscript/tables/coverage_table.md +9 -0
- fedgwas-0.0.1/experiments/real_world/1000genomes/manuscript/tables/coverage_table.tex +16 -0
- fedgwas-0.0.1/experiments/real_world/1000genomes/manuscript/tables/filtering_table.md +9 -0
- fedgwas-0.0.1/experiments/real_world/1000genomes/manuscript/tables/filtering_table.tex +15 -0
- fedgwas-0.0.1/experiments/real_world/1000genomes/manuscript/tables/king_table.md +9 -0
- fedgwas-0.0.1/experiments/real_world/1000genomes/manuscript/tables/lr_table.md +6 -0
- fedgwas-0.0.1/experiments/real_world/1000genomes/manuscript/tables/qc_table.md +9 -0
- fedgwas-0.0.1/experiments/real_world/1000genomes/manuscript/tables/qc_table.tex +12 -0
- fedgwas-0.0.1/experiments/real_world/1000genomes/manuscript/threshold_analysis/RECOMMENDATIONS.md +60 -0
- fedgwas-0.0.1/experiments/real_world/1000genomes/manuscript/threshold_analysis/threshold_sensitivity_5e-8.png +0 -0
- fedgwas-0.0.1/experiments/real_world/1000genomes/manuscript/threshold_analysis/threshold_sensitivity_results.csv +41 -0
- fedgwas-0.0.1/experiments/real_world/1000genomes/manuscript/threshold_analysis/threshold_sensitivity_summary.md +27 -0
- fedgwas-0.0.1/experiments/real_world/1000genomes/run_evaluation.sh +60 -0
- fedgwas-0.0.1/experiments/real_world/1000genomes/run_experiment.sh +31 -0
- fedgwas-0.0.1/experiments/real_world/README.md +231 -0
- fedgwas-0.0.1/experiments/real_world/phenotype_generation/README.md +124 -0
- fedgwas-0.0.1/experiments/real_world/phenotype_generation/__init__.py +19 -0
- fedgwas-0.0.1/experiments/real_world/phenotype_generation/generate_phenotypes.py +312 -0
- fedgwas-0.0.1/experiments/real_world/phenotype_generation/models.py +360 -0
- fedgwas-0.0.1/experiments/tools/analyze_threshold_sensitivity.py +288 -0
- fedgwas-0.0.1/experiments/tools/apply_run_retention.py +60 -0
- fedgwas-0.0.1/experiments/tools/collect_run_metrics.py +195 -0
- fedgwas-0.0.1/experiments/tools/evaluation/README.md +79 -0
- fedgwas-0.0.1/experiments/tools/evaluation/collect_real_world_results.py +233 -0
- fedgwas-0.0.1/experiments/tools/evaluation/evaluate_all.py +200 -0
- fedgwas-0.0.1/experiments/tools/evaluation/king/analyze_king_partial_debug.py +401 -0
- fedgwas-0.0.1/experiments/tools/evaluation/king/compare_king_from_accumulator.py +314 -0
- fedgwas-0.0.1/experiments/tools/evaluation/lr/lr_evaluator.py +813 -0
- fedgwas-0.0.1/experiments/tools/evaluation/lr/sf_gwas_comparison.py +411 -0
- fedgwas-0.0.1/experiments/tools/evaluation/metrics_collector.py +429 -0
- fedgwas-0.0.1/experiments/tools/evaluation/qc/investigate_mismatches.py +315 -0
- fedgwas-0.0.1/experiments/tools/evaluation/qc/qc_evaluator.py +266 -0
- fedgwas-0.0.1/experiments/tools/filter_multiallelic.py +400 -0
- fedgwas-0.0.1/experiments/tools/fix_snp_ids.py +60 -0
- fedgwas-0.0.1/experiments/tools/generate_baseline.py +564 -0
- fedgwas-0.0.1/experiments/tools/generate_manuscript_materials.py +1455 -0
- fedgwas-0.0.1/experiments/tools/setup_real_world_experiment.py +301 -0
- fedgwas-0.0.1/experiments/tools/summarize_scalability_table.py +112 -0
- fedgwas-0.0.1/pipeline/__init__.py +0 -0
- fedgwas-0.0.1/pipeline/cli/__init__.py +2 -0
- fedgwas-0.0.1/pipeline/cli/deploy.py +358 -0
- fedgwas-0.0.1/pipeline/cli/sim.py +1003 -0
- fedgwas-0.0.1/pipeline/cli/simulation/__init__.py +7 -0
- fedgwas-0.0.1/pipeline/cli/simulation/examples.py +270 -0
- fedgwas-0.0.1/pipeline/cli/simulation/outputs.py +63 -0
- fedgwas-0.0.1/pipeline/cli/simulation/paths.py +219 -0
- fedgwas-0.0.1/pipeline/cli/simulation/presets.py +207 -0
- fedgwas-0.0.1/pipeline/cli/simulation/real_data.py +200 -0
- fedgwas-0.0.1/pipeline/cli/simulation/setup.py +373 -0
- fedgwas-0.0.1/pipeline/cli/simulation/summary.py +291 -0
- fedgwas-0.0.1/pipeline/cli/simulation/templates.py +289 -0
- fedgwas-0.0.1/pipeline/cli/simulation/validation.py +150 -0
- fedgwas-0.0.1/pipeline/client_app.py +1334 -0
- fedgwas-0.0.1/pipeline/clients/__init__.py +3 -0
- fedgwas-0.0.1/pipeline/clients/base_client.py +743 -0
- fedgwas-0.0.1/pipeline/clients/c2c_payloads.py +38 -0
- fedgwas-0.0.1/pipeline/clients/client_qc_aggregator.py +184 -0
- fedgwas-0.0.1/pipeline/clients/client_to_client.py +152 -0
- fedgwas-0.0.1/pipeline/clients/config.yaml +26 -0
- fedgwas-0.0.1/pipeline/clients/data_loder.py +189 -0
- fedgwas-0.0.1/pipeline/clients/flwr_config.py +29 -0
- fedgwas-0.0.1/pipeline/clients/iterative_king.py +944 -0
- fedgwas-0.0.1/pipeline/clients/iterative_lr.py +472 -0
- fedgwas-0.0.1/pipeline/clients/local_qc.py +275 -0
- fedgwas-0.0.1/pipeline/clients/logger_manager.py +106 -0
- fedgwas-0.0.1/pipeline/clients/lr_privacy.py +61 -0
- fedgwas-0.0.1/pipeline/clients/seed_sync.py +203 -0
- fedgwas-0.0.1/pipeline/evaluation/README.md +79 -0
- fedgwas-0.0.1/pipeline/evaluation/__init__.py +0 -0
- fedgwas-0.0.1/pipeline/evaluation/collect_real_world_results.py +228 -0
- fedgwas-0.0.1/pipeline/evaluation/evaluate_all.py +254 -0
- fedgwas-0.0.1/pipeline/evaluation/king/__init__.py +0 -0
- fedgwas-0.0.1/pipeline/evaluation/king/analyze_king_partial_debug.py +401 -0
- fedgwas-0.0.1/pipeline/evaluation/king/compare_king_from_accumulator.py +314 -0
- fedgwas-0.0.1/pipeline/evaluation/lr/__init__.py +0 -0
- fedgwas-0.0.1/pipeline/evaluation/lr/lr_evaluator.py +813 -0
- fedgwas-0.0.1/pipeline/evaluation/lr/sf_gwas_comparison.py +411 -0
- fedgwas-0.0.1/pipeline/evaluation/metrics_collector.py +429 -0
- fedgwas-0.0.1/pipeline/evaluation/qc/__init__.py +0 -0
- fedgwas-0.0.1/pipeline/evaluation/qc/investigate_mismatches.py +315 -0
- fedgwas-0.0.1/pipeline/evaluation/qc/qc_evaluator.py +266 -0
- fedgwas-0.0.1/pipeline/server/aggregator_king.py +456 -0
- fedgwas-0.0.1/pipeline/server/aggregator_lr.py +454 -0
- fedgwas-0.0.1/pipeline/server/prg_masking.py +197 -0
- fedgwas-0.0.1/pipeline/server/strategy_strict.py +513 -0
- fedgwas-0.0.1/pipeline/server_app.py +190 -0
- fedgwas-0.0.1/pipeline/simulation/simulated_data/generate_synthetic_data.py +1086 -0
- fedgwas-0.0.1/pipeline/tools/__init__.py +1 -0
- fedgwas-0.0.1/pipeline/tools/analyze_threshold_sensitivity.py +288 -0
- fedgwas-0.0.1/pipeline/tools/apply_run_retention.py +60 -0
- fedgwas-0.0.1/pipeline/tools/collect_run_metrics.py +195 -0
- fedgwas-0.0.1/pipeline/tools/filter_multiallelic.py +400 -0
- fedgwas-0.0.1/pipeline/tools/fix_snp_ids.py +60 -0
- fedgwas-0.0.1/pipeline/tools/generate_baseline.py +607 -0
- fedgwas-0.0.1/pipeline/tools/generate_manuscript_materials.py +1447 -0
- fedgwas-0.0.1/pipeline/tools/setup_real_world_experiment.py +301 -0
- fedgwas-0.0.1/pipeline/tools/summarize_scalability_table.py +112 -0
- fedgwas-0.0.1/pipeline/utils/client_data_loader.py +7 -0
- fedgwas-0.0.1/pipeline/utils/monitoring_config.py +107 -0
- fedgwas-0.0.1/pipeline/utils/performance/__init__.py +17 -0
- fedgwas-0.0.1/pipeline/utils/performance/monitoring_runtime.py +215 -0
- fedgwas-0.0.1/pipeline/utils/performance/network_monitor.py +368 -0
- fedgwas-0.0.1/pipeline/utils/performance/performance_monitoring.py +526 -0
- fedgwas-0.0.1/pipeline/utils/retention_config.py +124 -0
- fedgwas-0.0.1/pipeline/utils/run_retention.py +272 -0
- fedgwas-0.0.1/plink/plink_linux/LICENSE +674 -0
- fedgwas-0.0.1/plink/plink_linux/plink +0 -0
- fedgwas-0.0.1/plink/plink_linux/plink2 +0 -0
- fedgwas-0.0.1/plink/plink_linux/prettify +0 -0
- fedgwas-0.0.1/plink/plink_linux/toy.map +2 -0
- fedgwas-0.0.1/plink/plink_linux/toy.ped +2 -0
- fedgwas-0.0.1/plink/plink_mac/LICENSE +674 -0
- fedgwas-0.0.1/plink/plink_mac/plink +0 -0
- fedgwas-0.0.1/plink/plink_mac/plink2 +0 -0
- fedgwas-0.0.1/plink/plink_mac/prettify +0 -0
- fedgwas-0.0.1/plink/plink_mac/toy.map +2 -0
- fedgwas-0.0.1/plink/plink_mac/toy.ped +2 -0
- fedgwas-0.0.1/plink/plink_win/LICENSE +674 -0
- fedgwas-0.0.1/plink/plink_win/plink.exe +0 -0
- fedgwas-0.0.1/plink/plink_win/prettify.exe +0 -0
- fedgwas-0.0.1/plink/plink_win/toy.map +2 -0
- fedgwas-0.0.1/plink/plink_win/toy.ped +2 -0
- fedgwas-0.0.1/pyproject.toml +98 -0
- fedgwas-0.0.1/tests/test_association.py +47 -0
- fedgwas-0.0.1/tests/test_cli_deploy.py +166 -0
- fedgwas-0.0.1/tests/test_cli_sim.py +880 -0
- fedgwas-0.0.1/tests/test_evaluate_all.py +139 -0
- fedgwas-0.0.1/tests/test_generate_baseline_tool.py +86 -0
- fedgwas-0.0.1/tests/test_king_federated_unit.py +216 -0
- fedgwas-0.0.1/tests/test_kinship.py +86 -0
- fedgwas-0.0.1/tests/test_monitoring_config.py +18 -0
- fedgwas-0.0.1/tests/test_monitoring_runtime.py +31 -0
- fedgwas-0.0.1/tests/test_performance_monitor_append.py +32 -0
- fedgwas-0.0.1/tests/test_prg_masking.py +242 -0
- fedgwas-0.0.1/tests/test_qc.py +47 -0
- fedgwas-0.0.1/tests/test_quality_control.py +87 -0
- fedgwas-0.0.1/tests/test_reader.py +36 -0
- fedgwas-0.0.1/tests/test_run_retention.py +46 -0
- fedgwas-0.0.1/tests/test_synthetic_data.py +496 -0
- fedgwas-0.0.1/tests/test_visualization.py +57 -0
- fedgwas-0.0.1/tests/test_visualization_comprehensive.py +395 -0
- fedgwas-0.0.1/uv.lock +3753 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.credentials
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
name: Deploy documentation
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
tags:
|
|
6
|
+
- '*'
|
|
7
|
+
workflow_dispatch:
|
|
8
|
+
|
|
9
|
+
permissions:
|
|
10
|
+
contents: read
|
|
11
|
+
pages: write
|
|
12
|
+
id-token: write
|
|
13
|
+
|
|
14
|
+
concurrency:
|
|
15
|
+
group: github-pages
|
|
16
|
+
cancel-in-progress: false
|
|
17
|
+
|
|
18
|
+
jobs:
|
|
19
|
+
build:
|
|
20
|
+
name: Build Docusaurus site
|
|
21
|
+
runs-on: ubuntu-latest
|
|
22
|
+
|
|
23
|
+
steps:
|
|
24
|
+
- name: Checkout
|
|
25
|
+
uses: actions/checkout@v4
|
|
26
|
+
|
|
27
|
+
- name: Set up Node.js
|
|
28
|
+
uses: actions/setup-node@v4
|
|
29
|
+
with:
|
|
30
|
+
node-version: 20
|
|
31
|
+
cache: npm
|
|
32
|
+
cache-dependency-path: docs/website/package-lock.json
|
|
33
|
+
|
|
34
|
+
- name: Install dependencies
|
|
35
|
+
working-directory: docs/website
|
|
36
|
+
run: npm ci
|
|
37
|
+
|
|
38
|
+
- name: Build documentation
|
|
39
|
+
working-directory: docs/website
|
|
40
|
+
run: npm run build
|
|
41
|
+
|
|
42
|
+
- name: Configure GitHub Pages
|
|
43
|
+
uses: actions/configure-pages@v5
|
|
44
|
+
|
|
45
|
+
- name: Upload Pages artifact
|
|
46
|
+
uses: actions/upload-pages-artifact@v3
|
|
47
|
+
with:
|
|
48
|
+
path: docs/website/build
|
|
49
|
+
|
|
50
|
+
deploy:
|
|
51
|
+
name: Deploy to GitHub Pages
|
|
52
|
+
needs: build
|
|
53
|
+
runs-on: ubuntu-latest
|
|
54
|
+
environment:
|
|
55
|
+
name: github-pages
|
|
56
|
+
url: ${{ steps.deployment.outputs.page_url }}
|
|
57
|
+
|
|
58
|
+
steps:
|
|
59
|
+
- name: Deploy
|
|
60
|
+
id: deployment
|
|
61
|
+
uses: actions/deploy-pages@v4
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
name: Publish Python package
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
release:
|
|
5
|
+
types: [published]
|
|
6
|
+
|
|
7
|
+
permissions:
|
|
8
|
+
contents: read
|
|
9
|
+
|
|
10
|
+
jobs:
|
|
11
|
+
build:
|
|
12
|
+
name: Build distribution
|
|
13
|
+
runs-on: ubuntu-latest
|
|
14
|
+
|
|
15
|
+
steps:
|
|
16
|
+
- name: Checkout
|
|
17
|
+
uses: actions/checkout@v4
|
|
18
|
+
|
|
19
|
+
- name: Set up Python
|
|
20
|
+
uses: actions/setup-python@v5
|
|
21
|
+
with:
|
|
22
|
+
python-version: "3.11"
|
|
23
|
+
|
|
24
|
+
- name: Install build tools
|
|
25
|
+
run: python -m pip install --upgrade build twine
|
|
26
|
+
|
|
27
|
+
- name: Build distributions
|
|
28
|
+
run: python -m build
|
|
29
|
+
|
|
30
|
+
- name: Check distributions
|
|
31
|
+
run: python -m twine check dist/*
|
|
32
|
+
|
|
33
|
+
- name: Upload distributions
|
|
34
|
+
uses: actions/upload-artifact@v4
|
|
35
|
+
with:
|
|
36
|
+
name: python-package-distributions
|
|
37
|
+
path: dist/
|
|
38
|
+
|
|
39
|
+
publish:
|
|
40
|
+
name: Publish to PyPI
|
|
41
|
+
needs: build
|
|
42
|
+
runs-on: ubuntu-latest
|
|
43
|
+
environment:
|
|
44
|
+
name: pypi
|
|
45
|
+
url: https://pypi.org/project/FedGWAS/
|
|
46
|
+
permissions:
|
|
47
|
+
id-token: write
|
|
48
|
+
|
|
49
|
+
steps:
|
|
50
|
+
- name: Download distributions
|
|
51
|
+
uses: actions/download-artifact@v4
|
|
52
|
+
with:
|
|
53
|
+
name: python-package-distributions
|
|
54
|
+
path: dist/
|
|
55
|
+
|
|
56
|
+
- name: Publish distributions to PyPI
|
|
57
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
fedgwas-0.0.1/.gitignore
ADDED
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
.venv
|
|
2
|
+
dist/
|
|
3
|
+
sdist/
|
|
4
|
+
**/__pycache__/
|
|
5
|
+
.pytest_cache/
|
|
6
|
+
*.pyc
|
|
7
|
+
.mypy_cache/
|
|
8
|
+
docs/website/.docusaurus/
|
|
9
|
+
|
|
10
|
+
# Local-only docs (not shipped)
|
|
11
|
+
docs/paper/
|
|
12
|
+
docs/old_docs/
|
|
13
|
+
docs/prd/
|
|
14
|
+
docs/README_old.md
|
|
15
|
+
|
|
16
|
+
# Data
|
|
17
|
+
user_data/
|
|
18
|
+
|
|
19
|
+
# Logs
|
|
20
|
+
logs
|
|
21
|
+
npm-debug.log*
|
|
22
|
+
yarn-debug.log*
|
|
23
|
+
yarn-error.log*
|
|
24
|
+
dev-debug.log
|
|
25
|
+
|
|
26
|
+
# Dependency directories
|
|
27
|
+
docs/website/node_modules/
|
|
28
|
+
docs/website/build/
|
|
29
|
+
|
|
30
|
+
# Environment variables
|
|
31
|
+
.env
|
|
32
|
+
|
|
33
|
+
# Editor directories and files
|
|
34
|
+
.idea
|
|
35
|
+
.vscode
|
|
36
|
+
*.suo
|
|
37
|
+
*.ntvs*
|
|
38
|
+
*.njsproj
|
|
39
|
+
*.sln
|
|
40
|
+
*.sw?
|
|
41
|
+
|
|
42
|
+
# OS specific
|
|
43
|
+
.DS_Store
|
|
44
|
+
**/.DS_Store
|
|
45
|
+
|
|
46
|
+
# Legacy/archived directories
|
|
47
|
+
archived/
|
|
48
|
+
bin/
|
|
49
|
+
centers/
|
|
50
|
+
data/
|
|
51
|
+
|
|
52
|
+
# Unused / local-only pipeline paths
|
|
53
|
+
pipeline/exerpiements.md
|
|
54
|
+
pipeline/experiments.md
|
|
55
|
+
pipeline/visualization_archived/
|
|
56
|
+
pipeline/server/strategy.py
|
|
57
|
+
pipeline/server/strategy_new.py
|
|
58
|
+
pipeline/server/aggregator_qc.py
|
|
59
|
+
pipeline/utils/bloom_filter.py
|
|
60
|
+
|
|
61
|
+
# Redundant/outdated documentation
|
|
62
|
+
Readme_pipeline.md
|
|
63
|
+
EXPERIMENT_RUNNER_README.md
|
|
64
|
+
.pre-commit-config.yaml
|
|
65
|
+
!cluster_deployment/docs/
|
|
66
|
+
!cluster_deployment/docs/**
|
|
67
|
+
|
|
68
|
+
# Docker (local workflow only; cluster deployment is under cluster_deployment/)
|
|
69
|
+
docker/
|
|
70
|
+
.dockerignore
|
|
71
|
+
|
|
72
|
+
# Performance manuscript drafts (local only; configs stay in repo)
|
|
73
|
+
experiments/performance/README.md
|
|
74
|
+
experiments/performance/appendix_sections.md
|
|
75
|
+
experiments/performance/appendix_table.md
|
|
76
|
+
experiments/performance/appendix_table.tex
|
|
77
|
+
experiments/performance/manuscript_sections.md
|
|
78
|
+
|
|
79
|
+
# Local notes, reports, and archives (not shipped)
|
|
80
|
+
experiments/real_world/1000genomes/EXPERIMENT_STATUS.md
|
|
81
|
+
ISSUES_REPORT.md
|
|
82
|
+
ISSUES_REPORT_UPDATED.md
|
|
83
|
+
plan.md
|
|
84
|
+
experiments.docx
|
|
85
|
+
InfoSummit_kinship.pdf
|
|
86
|
+
mkdocs.yml
|
|
87
|
+
pipeline.pdf
|
|
88
|
+
pipeline.zip
|
|
89
|
+
plink.zip
|
|
90
|
+
results/
|
|
91
|
+
|
|
92
|
+
# Experiment run outputs and synthetic data artifacts
|
|
93
|
+
experiments/**/results/
|
|
94
|
+
experiments/**/results_*/
|
|
95
|
+
experiments/*/*/results/
|
|
96
|
+
experiments/**/data/**/*.bed
|
|
97
|
+
experiments/**/data/**/*.bim
|
|
98
|
+
experiments/**/data/**/*.fam
|
|
99
|
+
experiments/**/data/**/*.log
|
|
100
|
+
experiments/**/data/**/*.kin0
|
|
101
|
+
experiments/**/data/**/*.assoc*
|
|
102
|
+
experiments/**/data/**/*.genome
|
|
103
|
+
experiments/**/data/**/*.hwe
|
|
104
|
+
experiments/**/data/**/*.imiss
|
|
105
|
+
experiments/**/data/**/*.lmiss
|
|
106
|
+
experiments/**/data/**/*.frq
|
|
107
|
+
experiments/**/intermediate/
|
|
108
|
+
**/__pycache__/
|
|
109
|
+
|
|
110
|
+
# Task / cluster bundles
|
|
111
|
+
fedgwas-cluster.tar.gz
|
|
112
|
+
cluster_deployment/wheels/
|
|
113
|
+
|
|
114
|
+
# Log files
|
|
115
|
+
*.log
|
|
116
|
+
**/*.log
|
|
117
|
+
|
|
118
|
+
# PLINK output files
|
|
119
|
+
*.bed
|
|
120
|
+
*.bim
|
|
121
|
+
*.fam
|
|
122
|
+
*.kin0
|
|
123
|
+
*.assoc*
|
|
124
|
+
*.genome
|
|
125
|
+
*.hwe
|
|
126
|
+
*.imiss
|
|
127
|
+
*.lmiss
|
|
128
|
+
*.frq
|
|
129
|
+
|
|
130
|
+
# Large data files (duplicate patterns for safety)
|
|
131
|
+
*.bed
|
|
132
|
+
*.bim
|
|
133
|
+
*.fam
|
|
134
|
+
|
|
135
|
+
# claude
|
|
136
|
+
.claude/
|
|
137
|
+
.venv/
|
|
138
|
+
claude.md
|
|
139
|
+
.windsurfrules
|
|
140
|
+
README-task-manager.md
|
|
141
|
+
.env.example
|
|
142
|
+
/scripts/
|
|
143
|
+
.cursor/*
|
|
144
|
+
.test_scenario_a.py
|
|
145
|
+
my_study/
|
fedgwas-0.0.1/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 idsla
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
fedgwas-0.0.1/PKG-INFO
ADDED
|
@@ -0,0 +1,287 @@
|
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
|
+
Name: FedGWAS
|
|
3
|
+
Version: 0.0.1
|
|
4
|
+
Summary: Federated genome-wide association study pipeline built with Flower and PLINK
|
|
5
|
+
Project-URL: Homepage, https://github.com/idsla/Fed-GWAS
|
|
6
|
+
Project-URL: Repository, https://github.com/idsla/Fed-GWAS
|
|
7
|
+
Project-URL: Issues, https://github.com/idsla/Fed-GWAS/issues
|
|
8
|
+
Project-URL: Documentation, https://idsla.github.io/Fed-GWAS/
|
|
9
|
+
Author: idsla
|
|
10
|
+
License: MIT
|
|
11
|
+
License-File: LICENSE
|
|
12
|
+
Keywords: bioinformatics,federated-learning,flower,gwas,plink
|
|
13
|
+
Classifier: Development Status :: 4 - Beta
|
|
14
|
+
Classifier: Intended Audience :: Science/Research
|
|
15
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
16
|
+
Classifier: Operating System :: OS Independent
|
|
17
|
+
Classifier: Programming Language :: Python :: 3
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
19
|
+
Classifier: Topic :: Scientific/Engineering :: Bio-Informatics
|
|
20
|
+
Requires-Python: >=3.11
|
|
21
|
+
Requires-Dist: flwr[simulation]<1.20,>=1.19.0
|
|
22
|
+
Requires-Dist: matplotlib>=3.10.9
|
|
23
|
+
Requires-Dist: mkdocs>=1.6.1
|
|
24
|
+
Requires-Dist: numpy>=1.21.0
|
|
25
|
+
Requires-Dist: pandas-plink>=2.3.1
|
|
26
|
+
Requires-Dist: pandas>=2.2.2
|
|
27
|
+
Requires-Dist: phe>=1.5.0
|
|
28
|
+
Requires-Dist: pycryptodomex>=3.19.0
|
|
29
|
+
Requires-Dist: pyplink>=1.3.7
|
|
30
|
+
Requires-Dist: pysnptools>=0.5.13
|
|
31
|
+
Requires-Dist: pyyaml>=6.0.0
|
|
32
|
+
Requires-Dist: quarto-cli>=1.9.38
|
|
33
|
+
Requires-Dist: rich>=13.0.0
|
|
34
|
+
Requires-Dist: scipy>=1.9.0
|
|
35
|
+
Requires-Dist: typer>=0.12.0
|
|
36
|
+
Provides-Extra: dev
|
|
37
|
+
Requires-Dist: flake8-docstrings>=1.7.0; extra == 'dev'
|
|
38
|
+
Requires-Dist: flake8>=7.1.0; extra == 'dev'
|
|
39
|
+
Requires-Dist: isort>=5.13.2; extra == 'dev'
|
|
40
|
+
Requires-Dist: mypy>=1.10.1; extra == 'dev'
|
|
41
|
+
Requires-Dist: pre-commit>=3.7.1; extra == 'dev'
|
|
42
|
+
Requires-Dist: pylint>=3.2.5; extra == 'dev'
|
|
43
|
+
Requires-Dist: pytest>=8.2.2; extra == 'dev'
|
|
44
|
+
Requires-Dist: tox>=4.16.0; extra == 'dev'
|
|
45
|
+
Description-Content-Type: text/markdown
|
|
46
|
+
|
|
47
|
+
<p align="center">
|
|
48
|
+
<img src="https://raw.githubusercontent.com/idsla/Fed-GWAS/main/docs/website/images/logo-readme.png" alt="FedGWAS logo" width="640">
|
|
49
|
+
</p>
|
|
50
|
+
|
|
51
|
+
# FedGWAS: a lightweight federated pipeline for privacy-preserving GWAS screening
|
|
52
|
+
|
|
53
|
+
[](https://pypi.org/project/FedGWAS/)
|
|
54
|
+
[](https://idsla.github.io/Fed-GWAS/)
|
|
55
|
+
[](https://github.com/idsla/Fed-GWAS/actions/workflows/deploy-docs.yml)
|
|
56
|
+
[](LICENSE)
|
|
57
|
+
|
|
58
|
+
## Overview
|
|
59
|
+
|
|
60
|
+
FedGWAS is a lightweight federated pipeline for privacy-preserving GWAS screening across distributed genomic datasets. It coordinates federated quality control, KING-based relatedness screening, and logistic-regression association screening under a client–server architecture, while keeping genotype-level computations local to participating clients. FedGWAS uses Flower for federated coordination, PLINK for genetics operations, and encryption, shuffling, anonymization, and lightweight secret-sharing so that the server can relay selected protocol messages without decrypting them.
|
|
61
|
+
|
|
62
|
+
Use FedGWAS when multiple participating institutions need a shared GWAS screening lifecycle and cannot pool individual-level genotype data.
|
|
63
|
+
|
|
64
|
+
<p align="center">
|
|
65
|
+
<img src="https://raw.githubusercontent.com/idsla/Fed-GWAS/main/docs/website/images/current_overview.png" alt="FedGWAS workflow illustration" width="100%">
|
|
66
|
+
</p>
|
|
67
|
+
|
|
68
|
+
To get started and learn how to use FedGWAS, use the following resources:
|
|
69
|
+
|
|
70
|
+
- Documentation site: [Documentation](https://idsla.github.io/Fed-GWAS/)
|
|
71
|
+
- Examples gallery: [Examples](https://idsla.github.io/Fed-GWAS/examples/overview)
|
|
72
|
+
- API reference: [API Reference](https://idsla.github.io/Fed-GWAS/api-reference/api)
|
|
73
|
+
- Technical details: [Technical Details](https://idsla.github.io/Fed-GWAS/user-guide/design/workflow)
|
|
74
|
+
|
|
75
|
+
## Prerequisites
|
|
76
|
+
|
|
77
|
+
FedGWAS requires Python 3.11 or later, Flower, and PLINK. Input genotypes use [PLINK 1.9](https://www.cog-genomics.org/plink/1.9/) binary format (`plink` on `PATH` or configured per client). KING-based relatedness screening also needs [PLINK 2](https://www.cog-genomics.org/plink/2.0/) available as `plink2`. VCF input is supported via conversion to PLINK-compatible representations where configured.
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
plink --version
|
|
81
|
+
plink2 --version
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
For repository-based runs, you can also set the PLINK path in each client config if your environment does not expose `plink` globally.
|
|
85
|
+
|
|
86
|
+
## FedGWAS Local Simulation Guide
|
|
87
|
+
|
|
88
|
+
Local simulation mode runs the full FedGWAS screening workflow on one machine by launching multiple simulated clients and a federated server through Flower. Use it to validate an installation, create simulation experiments from preset settings and generated data, prototype client (center) configs, and compare federated outputs against a centralized baseline without setting up a real federated deployment.
|
|
89
|
+
|
|
90
|
+
You can start local simulation in either of two ways:
|
|
91
|
+
|
|
92
|
+
1. Recommended: install from PyPI and use `fedgwas-sim` command line interface (CLI)
|
|
93
|
+
2. Repository/local workflow: clone this repository and run the old scripts directly
|
|
94
|
+
|
|
95
|
+
Both workflows require:
|
|
96
|
+
|
|
97
|
+
- Python 3.11 or later
|
|
98
|
+
- PLINK 1.9 (`plink`) and PLINK 2 (`plink2`) available on `PATH` or configured locally
|
|
99
|
+
- Flower installed through the package or local environment
|
|
100
|
+
|
|
101
|
+
### Recommended: PyPI CLI Workflow
|
|
102
|
+
|
|
103
|
+
Install the package:
|
|
104
|
+
|
|
105
|
+
```bash
|
|
106
|
+
python -m pip install FedGWAS
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
Verify that the simulation CLI is available:
|
|
110
|
+
|
|
111
|
+
```bash
|
|
112
|
+
fedgwas-sim --help
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
Create a standalone study directory and run the tiny two-client simulation:
|
|
116
|
+
|
|
117
|
+
```bash
|
|
118
|
+
mkdir my_study
|
|
119
|
+
cd my_study
|
|
120
|
+
|
|
121
|
+
# initialize study project directory
|
|
122
|
+
fedgwas-sim init
|
|
123
|
+
# setup data and configurations
|
|
124
|
+
fedgwas-sim setup-experiment syn-tiny --seed 42
|
|
125
|
+
# validation and run simulation
|
|
126
|
+
fedgwas-sim check
|
|
127
|
+
fedgwas-sim run --rounds 100
|
|
128
|
+
# evaluation and results collection
|
|
129
|
+
fedgwas-sim baseline generate --output data/centralized_baseline
|
|
130
|
+
fedgwas-sim evaluate results --baseline data/centralized_baseline --king
|
|
131
|
+
fedgwas-sim results collect --label tiny_run
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
The usage of the CLI can be found in the [documentation site](https://idsla.github.io/Fed-GWAS/user-guide/cli-simulation).
|
|
135
|
+
|
|
136
|
+
### Repository/Local Script Workflow
|
|
137
|
+
|
|
138
|
+
Clone the repository if you want the old direct script workflow, bundled experiment files, cluster deployment scripts, documentation source, or developer tooling:
|
|
139
|
+
|
|
140
|
+
```bash
|
|
141
|
+
git clone https://github.com/idsla/Fed-GWAS.git
|
|
142
|
+
cd Fed-GWAS
|
|
143
|
+
python -m pip install -e .
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
With `uv`, you can install the local environment with:
|
|
147
|
+
|
|
148
|
+
```bash
|
|
149
|
+
git clone https://github.com/idsla/Fed-GWAS.git
|
|
150
|
+
cd Fed-GWAS
|
|
151
|
+
uv sync --python 3.11
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
Generate synthetic data:
|
|
155
|
+
|
|
156
|
+
```bash
|
|
157
|
+
python pipeline/simulation/simulated_data/generate_synthetic_data.py \
|
|
158
|
+
--scale tiny \
|
|
159
|
+
--partition-strategy even \
|
|
160
|
+
--seed 42 \
|
|
161
|
+
--output-dir experiments/correctness/tiny_even/data
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
Generate the centralized baseline:
|
|
165
|
+
|
|
166
|
+
```bash
|
|
167
|
+
python experiments/tools/generate_baseline.py \
|
|
168
|
+
experiments/correctness/tiny_even/config.yaml
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
Run the federated simulation:
|
|
172
|
+
|
|
173
|
+
```bash
|
|
174
|
+
flwr run . local-simulation --stream
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
Or run with explicit release-smoke settings:
|
|
178
|
+
|
|
179
|
+
```bash
|
|
180
|
+
flwr run . local-simulation --stream --run-config \
|
|
181
|
+
'simulation=true num-server-rounds=100 config_path="experiments/correctness/tiny_even/configs"'
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
Evaluate the run:
|
|
185
|
+
|
|
186
|
+
```bash
|
|
187
|
+
python experiments/tools/evaluation/evaluate_all.py \
|
|
188
|
+
experiments/correctness/tiny_even/results_2 \
|
|
189
|
+
--baseline experiments/correctness/tiny_even/data/tiny/centralized_baseline \
|
|
190
|
+
--king
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
If you changed the active config output paths, pass the results directory from those config files instead.
|
|
194
|
+
|
|
195
|
+
### Example Simulation Experiments
|
|
196
|
+
|
|
197
|
+
We have a few preset experiments with generated data and configs in the repository for testing and demonstration. You can find the details of these example experiments in the documentation and the experiment directories:
|
|
198
|
+
|
|
199
|
+
- Tiny experiment details: [experiments/correctness/tiny_even/README.md](experiments/correctness/tiny_even/README.md)
|
|
200
|
+
|
|
201
|
+
- Small experiment details: [experiments/performance/small_even/README.md](experiments/performance/small_even/README.md)
|
|
202
|
+
|
|
203
|
+
- Real-world data experiment details: [experiments/real_world/1000genomes/README.md](experiments/real_world/1000genomes/README.md)
|
|
204
|
+
|
|
205
|
+
## FedGWAS Cluster Deployment Guide
|
|
206
|
+
|
|
207
|
+
Use federated deployment when the server and clients should run as separate Flower processes, usually on separate machines. One coordinating **server** runs SuperLink and submits the app. Each participating **client** runs a SuperNode with its own center config and local PLINK data.
|
|
208
|
+
|
|
209
|
+
FedGWAS provides two equivalent deployment modes. Both wrap `flower-superlink`, `flower-supernode`, and `flwr run . local-deployment`. Use Flower 1.19.x on every node. Pick one mode for a given run; do not mix them.
|
|
210
|
+
|
|
211
|
+
### CLI
|
|
212
|
+
|
|
213
|
+
```bash
|
|
214
|
+
fedgwas-deploy server start --host 0.0.0.0 --daemon --log-file /tmp/superlink.log
|
|
215
|
+
|
|
216
|
+
fedgwas-deploy client start \
|
|
217
|
+
--server <server-ip> \
|
|
218
|
+
--center-id <k> \
|
|
219
|
+
--config configs/center_k.yaml \
|
|
220
|
+
--daemon
|
|
221
|
+
|
|
222
|
+
fedgwas-deploy server run --server <server-ip> --rounds 20 --scale tiny
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
Stop on each node separately: `fedgwas-deploy server stop` on the server, `fedgwas-deploy client stop` on each client.
|
|
226
|
+
|
|
227
|
+
### Script deployment
|
|
228
|
+
|
|
229
|
+
Clone this repository on each node and run the wrappers from the repository root:
|
|
230
|
+
|
|
231
|
+
```bash
|
|
232
|
+
nohup cluster_deployment/scripts/cluster-start-server.sh --server-ip 0.0.0.0 \
|
|
233
|
+
> /tmp/superlink.log 2>&1 &
|
|
234
|
+
|
|
235
|
+
cluster_deployment/scripts/cluster-start-client.sh \
|
|
236
|
+
--server-ip <server-ip> \
|
|
237
|
+
--client-id <k> \
|
|
238
|
+
--config configs/center_k.yaml
|
|
239
|
+
|
|
240
|
+
cluster_deployment/scripts/cluster-run-app.sh \
|
|
241
|
+
--server-ip <server-ip> \
|
|
242
|
+
--rounds 20 \
|
|
243
|
+
--scale tiny
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
Stop on each node separately: `cluster_deployment/scripts/cluster-stop-all.sh`.
|
|
247
|
+
|
|
248
|
+
Guides:
|
|
249
|
+
|
|
250
|
+
- Get Started: [Federated Deployment](https://idsla.github.io/Fed-GWAS/get-started/federated-deployment)
|
|
251
|
+
- [CLI Deployment](https://idsla.github.io/Fed-GWAS/user-guide/federated-deployment/cli-deployment)
|
|
252
|
+
- [Script Deployment](https://idsla.github.io/Fed-GWAS/user-guide/federated-deployment/script-deployment)
|
|
253
|
+
- Worked example: [examples/04three-node-deployment](examples/04three-node-deployment/README.md)
|
|
254
|
+
|
|
255
|
+
## Federated Protocol Summary
|
|
256
|
+
|
|
257
|
+
FedGWAS implements a four-stage GWAS screening lifecycle. These conceptual stages are realized as coordinated federated rounds (including initialization, chunking, and aggregation):
|
|
258
|
+
|
|
259
|
+
1. Privacy-preserving initialization: clients exchange encrypted seed shares via the server, which acts only as a message relay, and derive a shared global seed
|
|
260
|
+
2. Federated quality control: local sample-level missingness filtering, then encrypted variant-level summaries for harmonized MAF, missingness, and Hardy–Weinberg filters
|
|
261
|
+
3. KING-based relatedness screening: chunked, anonymized kinship estimation
|
|
262
|
+
4. Federated association screening: privacy-preserving tokens for local logistic-regression filtering, then federated logistic regression
|
|
263
|
+
|
|
264
|
+
The current implementation uses encryption, shuffling, anonymization, and lightweight secret-sharing. The server relays encrypted client-to-client payloads for selected stages and does not decrypt those payloads. Logging, metrics, and production- versus research-oriented output retention are configured separately and are not screening stages. See [CURRENT_VERSION.md](docs/CURRENT_VERSION.md) for the current privacy model, stage contracts, and limitations.
|
|
265
|
+
|
|
266
|
+
Population stratification handling, continuous traits, and association models other than case–control logistic regression are not part of the current screening protocol.
|
|
267
|
+
|
|
268
|
+
## Troubleshooting (Common Issues)
|
|
269
|
+
|
|
270
|
+
- `plink` or `plink2` not found: install PLINK 1.9 and PLINK 2, and make sure both are on `PATH` or set in the client config.
|
|
271
|
+
- Flower uses the wrong config: pass `--run-config 'config_path="..."'`.
|
|
272
|
+
- Empty or missing results: generate the tiny synthetic data and baseline before running.
|
|
273
|
+
- TestPyPI or PyPI install fails for a new release: check that the version in `pyproject.toml` has been published and that dependency resolution can reach normal PyPI.
|
|
274
|
+
|
|
275
|
+
## License
|
|
276
|
+
|
|
277
|
+
FedGWAS is distributed under the MIT License. See [LICENSE](LICENSE).
|
|
278
|
+
|
|
279
|
+
## Contributors and Creator
|
|
280
|
+
|
|
281
|
+
Software development is hosted at the [Rutgers Institute in Data Science, Learning, and Application](https://sites.rutgers.edu/idsla/). The accompanying paper authors are Xinyue Wang (Renmin University of China), Sitao Min, and Jaideep Vaidya (Rutgers University).
|
|
282
|
+
|
|
283
|
+
**Contributors**:
|
|
284
|
+
|
|
285
|
+
- Dr. Xinyue Wang <a href="mailto:xinyue.wang@ruc.edu.cn" aria-label="Email Dr. Xinyue Wang">✉</a>
|
|
286
|
+
- Dr. Sitao Min <a href="mailto:sitaomin1994@gmail.com" aria-label="Email Dr. Sitao Min">✉</a>
|
|
287
|
+
- Dr. Jaideep Vaidya <a href="mailto:jsvaidya@business.rutgers.edu" aria-label="Email Dr. Jaideep Vaidya">✉</a>
|