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.
Files changed (267) hide show
  1. fedgwas-0.0.1/.flwr/.gitignore +1 -0
  2. fedgwas-0.0.1/.github/workflows/deploy-docs.yml +61 -0
  3. fedgwas-0.0.1/.github/workflows/publish-pypi.yml +57 -0
  4. fedgwas-0.0.1/.gitignore +145 -0
  5. fedgwas-0.0.1/LICENSE +21 -0
  6. fedgwas-0.0.1/PKG-INFO +287 -0
  7. fedgwas-0.0.1/README.md +241 -0
  8. fedgwas-0.0.1/cluster_deployment/README.md +92 -0
  9. fedgwas-0.0.1/cluster_deployment/docs/CLUSTER_USER_GUIDE.md +631 -0
  10. fedgwas-0.0.1/cluster_deployment/scripts/check-cluster-clock-skew.sh +66 -0
  11. fedgwas-0.0.1/cluster_deployment/scripts/cluster-config-template.sh +8 -0
  12. fedgwas-0.0.1/cluster_deployment/scripts/cluster-diagnose.sh +100 -0
  13. fedgwas-0.0.1/cluster_deployment/scripts/cluster-run-app.sh +143 -0
  14. fedgwas-0.0.1/cluster_deployment/scripts/cluster-start-client.sh +148 -0
  15. fedgwas-0.0.1/cluster_deployment/scripts/cluster-start-server.sh +44 -0
  16. fedgwas-0.0.1/cluster_deployment/scripts/cluster-status.sh +16 -0
  17. fedgwas-0.0.1/cluster_deployment/scripts/cluster-stop-all.sh +15 -0
  18. fedgwas-0.0.1/cluster_deployment/scripts/cluster-verify-data.sh +99 -0
  19. fedgwas-0.0.1/cluster_deployment/scripts/download-flwr-wheels.sh +22 -0
  20. fedgwas-0.0.1/cluster_deployment/scripts/setup-cluster-node.sh +196 -0
  21. fedgwas-0.0.1/configs/config.yaml +36 -0
  22. fedgwas-0.0.1/configs/config_template.yaml +36 -0
  23. fedgwas-0.0.1/docs/CURRENT_VERSION.md +639 -0
  24. fedgwas-0.0.1/docs/DEVELOPMENT.md +406 -0
  25. fedgwas-0.0.1/docs/RELEASE.md +141 -0
  26. fedgwas-0.0.1/docs/website/content/api-reference/api.md +69 -0
  27. fedgwas-0.0.1/docs/website/content/api-reference/modules/association.md +35 -0
  28. fedgwas-0.0.1/docs/website/content/api-reference/modules/client.md +44 -0
  29. fedgwas-0.0.1/docs/website/content/api-reference/modules/kinship.md +36 -0
  30. fedgwas-0.0.1/docs/website/content/api-reference/modules/quality-control.md +44 -0
  31. fedgwas-0.0.1/docs/website/content/api-reference/modules/server.md +49 -0
  32. fedgwas-0.0.1/docs/website/content/api-reference/outputs.md +62 -0
  33. fedgwas-0.0.1/docs/website/content/api-reference/parameters.md +9 -0
  34. fedgwas-0.0.1/docs/website/content/api-reference/sim-cli.md +33 -0
  35. fedgwas-0.0.1/docs/website/content/examples/1000genomes.md +30 -0
  36. fedgwas-0.0.1/docs/website/content/examples/overview.md +12 -0
  37. fedgwas-0.0.1/docs/website/content/examples/performance-small.md +44 -0
  38. fedgwas-0.0.1/docs/website/content/examples/three-node-deployment.md +185 -0
  39. fedgwas-0.0.1/docs/website/content/examples/tiny-correctness.md +42 -0
  40. fedgwas-0.0.1/docs/website/content/get-started/getting-started/federated-deployment.md +148 -0
  41. fedgwas-0.0.1/docs/website/content/get-started/getting-started/local-simulation.md +80 -0
  42. fedgwas-0.0.1/docs/website/content/get-started/getting-started/next-steps.md +65 -0
  43. fedgwas-0.0.1/docs/website/content/get-started/getting-started/prerequisites.md +47 -0
  44. fedgwas-0.0.1/docs/website/content/get-started/intro.md +147 -0
  45. fedgwas-0.0.1/docs/website/content/user-guide/design/architecture.md +81 -0
  46. fedgwas-0.0.1/docs/website/content/user-guide/design/gwas-components.md +55 -0
  47. fedgwas-0.0.1/docs/website/content/user-guide/design/parameters.md +163 -0
  48. fedgwas-0.0.1/docs/website/content/user-guide/design/privacy-masking.md +42 -0
  49. fedgwas-0.0.1/docs/website/content/user-guide/design/workflow.md +69 -0
  50. fedgwas-0.0.1/docs/website/content/user-guide/experiments/overview.md +71 -0
  51. fedgwas-0.0.1/docs/website/content/user-guide/experiments/runner.md +77 -0
  52. fedgwas-0.0.1/docs/website/content/user-guide/federated-deployment/cli-deployment.md +201 -0
  53. fedgwas-0.0.1/docs/website/content/user-guide/federated-deployment/client-deployment.md +14 -0
  54. fedgwas-0.0.1/docs/website/content/user-guide/federated-deployment/installation.md +218 -0
  55. fedgwas-0.0.1/docs/website/content/user-guide/federated-deployment/legacy-cluster-scripts.md +9 -0
  56. fedgwas-0.0.1/docs/website/content/user-guide/federated-deployment/script-deployment.md +211 -0
  57. fedgwas-0.0.1/docs/website/content/user-guide/federated-deployment/server-deployment.md +14 -0
  58. fedgwas-0.0.1/docs/website/content/user-guide/getting-started/configuration.md +112 -0
  59. fedgwas-0.0.1/docs/website/content/user-guide/getting-started/deployment.md +17 -0
  60. fedgwas-0.0.1/docs/website/content/user-guide/getting-started/simulation.md +98 -0
  61. fedgwas-0.0.1/docs/website/content/user-guide/local-simulation/cli_simulation.md +357 -0
  62. fedgwas-0.0.1/docs/website/content/user-guide/local-simulation/config-and-data.md +369 -0
  63. fedgwas-0.0.1/docs/website/content/user-guide/local-simulation/evaluation.md +164 -0
  64. fedgwas-0.0.1/docs/website/content/user-guide/local-simulation/experiments.md +154 -0
  65. fedgwas-0.0.1/docs/website/content/user-guide/local-simulation/installation.md +108 -0
  66. fedgwas-0.0.1/docs/website/content/user-guide/local-simulation/run-experiment.md +142 -0
  67. fedgwas-0.0.1/docs/website/content/user-guide/troubleshooting.md +56 -0
  68. fedgwas-0.0.1/docs/website/docusaurus.config.js +187 -0
  69. fedgwas-0.0.1/docs/website/images/Federated_settings.png +0 -0
  70. fedgwas-0.0.1/docs/website/images/architecture-current.svg +136 -0
  71. fedgwas-0.0.1/docs/website/images/current_overview.png +0 -0
  72. fedgwas-0.0.1/docs/website/images/illustration.png +0 -0
  73. fedgwas-0.0.1/docs/website/images/logo-readme.png +0 -0
  74. fedgwas-0.0.1/docs/website/images/logo.png +0 -0
  75. fedgwas-0.0.1/docs/website/package-lock.json +28564 -0
  76. fedgwas-0.0.1/docs/website/package.json +45 -0
  77. fedgwas-0.0.1/docs/website/sidebarsDocs.js +62 -0
  78. fedgwas-0.0.1/docs/website/sidebarsExamples.js +9 -0
  79. fedgwas-0.0.1/docs/website/sidebarsGetStarted.js +29 -0
  80. fedgwas-0.0.1/docs/website/sidebarsReference.js +18 -0
  81. fedgwas-0.0.1/docs/website/sidebarsUserGuide.js +55 -0
  82. fedgwas-0.0.1/docs/website/src/css/custom.css +62 -0
  83. fedgwas-0.0.1/docs/website/src/pages/index.js +209 -0
  84. fedgwas-0.0.1/docs/website/src/pages/index.module.css +260 -0
  85. fedgwas-0.0.1/docs/website/versions.json +1 -0
  86. fedgwas-0.0.1/examples/01tiny-synthetic-data/README.md +0 -0
  87. fedgwas-0.0.1/examples/02small-data-performance-evaluation/README.md +0 -0
  88. fedgwas-0.0.1/examples/03real-data-1000-genomes/README.md +0 -0
  89. fedgwas-0.0.1/examples/04three-node-deployment/README.md +175 -0
  90. fedgwas-0.0.1/experiments/README.md +198 -0
  91. fedgwas-0.0.1/experiments/correctness/tiny_even/README.md +90 -0
  92. fedgwas-0.0.1/experiments/correctness/tiny_even/config.yaml +63 -0
  93. fedgwas-0.0.1/experiments/correctness/tiny_even/configs/center_1/config.yaml +43 -0
  94. fedgwas-0.0.1/experiments/correctness/tiny_even/configs/center_2/config.yaml +43 -0
  95. fedgwas-0.0.1/experiments/correctness/tiny_even/configs/server/config.yaml +3 -0
  96. fedgwas-0.0.1/experiments/performance/medium_even/README.md +87 -0
  97. fedgwas-0.0.1/experiments/performance/medium_even/config.yaml +60 -0
  98. fedgwas-0.0.1/experiments/performance/medium_even/configs/center_1/config.yaml +41 -0
  99. fedgwas-0.0.1/experiments/performance/medium_even/configs/center_2/config.yaml +41 -0
  100. fedgwas-0.0.1/experiments/performance/medium_even/configs/server/config.yaml +3 -0
  101. fedgwas-0.0.1/experiments/performance/scales.yaml +27 -0
  102. fedgwas-0.0.1/experiments/performance/small_even/README.md +57 -0
  103. fedgwas-0.0.1/experiments/performance/small_even/config.yaml +60 -0
  104. fedgwas-0.0.1/experiments/performance/small_even/configs/center_1/config.yaml +43 -0
  105. fedgwas-0.0.1/experiments/performance/small_even/configs/center_2/config.yaml +43 -0
  106. fedgwas-0.0.1/experiments/performance/small_even/configs/server/config.yaml +3 -0
  107. fedgwas-0.0.1/experiments/real_world/1000genomes/README.md +245 -0
  108. fedgwas-0.0.1/experiments/real_world/1000genomes/config.yaml +23 -0
  109. fedgwas-0.0.1/experiments/real_world/1000genomes/configs/center_1/config.yaml +41 -0
  110. fedgwas-0.0.1/experiments/real_world/1000genomes/configs/center_2/config.yaml +41 -0
  111. fedgwas-0.0.1/experiments/real_world/1000genomes/configs/server/config.yaml +3 -0
  112. fedgwas-0.0.1/experiments/real_world/1000genomes/download_subset.sh +95 -0
  113. fedgwas-0.0.1/experiments/real_world/1000genomes/manuscript/PLOT_COMPARISON.md +73 -0
  114. fedgwas-0.0.1/experiments/real_world/1000genomes/manuscript/README.md +81 -0
  115. fedgwas-0.0.1/experiments/real_world/1000genomes/manuscript/VISUALIZATION_GUIDE.md +73 -0
  116. fedgwas-0.0.1/experiments/real_world/1000genomes/manuscript/baseline_validation_report.md +117 -0
  117. fedgwas-0.0.1/experiments/real_world/1000genomes/manuscript/figures/king_correlation.png +0 -0
  118. fedgwas-0.0.1/experiments/real_world/1000genomes/manuscript/figures/lr_correlation.png +0 -0
  119. fedgwas-0.0.1/experiments/real_world/1000genomes/manuscript/figures/manhattan_baseline.png +0 -0
  120. fedgwas-0.0.1/experiments/real_world/1000genomes/manuscript/figures/manhattan_comparison.png +0 -0
  121. fedgwas-0.0.1/experiments/real_world/1000genomes/manuscript/figures/manhattan_federated.png +0 -0
  122. fedgwas-0.0.1/experiments/real_world/1000genomes/manuscript/figures/qq_baseline.png +0 -0
  123. fedgwas-0.0.1/experiments/real_world/1000genomes/manuscript/figures/qq_federated.png +0 -0
  124. fedgwas-0.0.1/experiments/real_world/1000genomes/manuscript/manuscript_sections.md +39 -0
  125. fedgwas-0.0.1/experiments/real_world/1000genomes/manuscript/summary.json +31 -0
  126. fedgwas-0.0.1/experiments/real_world/1000genomes/manuscript/tables/coverage_table.md +9 -0
  127. fedgwas-0.0.1/experiments/real_world/1000genomes/manuscript/tables/coverage_table.tex +16 -0
  128. fedgwas-0.0.1/experiments/real_world/1000genomes/manuscript/tables/filtering_table.md +9 -0
  129. fedgwas-0.0.1/experiments/real_world/1000genomes/manuscript/tables/filtering_table.tex +15 -0
  130. fedgwas-0.0.1/experiments/real_world/1000genomes/manuscript/tables/king_table.md +9 -0
  131. fedgwas-0.0.1/experiments/real_world/1000genomes/manuscript/tables/lr_table.md +6 -0
  132. fedgwas-0.0.1/experiments/real_world/1000genomes/manuscript/tables/qc_table.md +9 -0
  133. fedgwas-0.0.1/experiments/real_world/1000genomes/manuscript/tables/qc_table.tex +12 -0
  134. fedgwas-0.0.1/experiments/real_world/1000genomes/manuscript/threshold_analysis/RECOMMENDATIONS.md +60 -0
  135. fedgwas-0.0.1/experiments/real_world/1000genomes/manuscript/threshold_analysis/threshold_sensitivity_5e-8.png +0 -0
  136. fedgwas-0.0.1/experiments/real_world/1000genomes/manuscript/threshold_analysis/threshold_sensitivity_results.csv +41 -0
  137. fedgwas-0.0.1/experiments/real_world/1000genomes/manuscript/threshold_analysis/threshold_sensitivity_summary.md +27 -0
  138. fedgwas-0.0.1/experiments/real_world/1000genomes/run_evaluation.sh +60 -0
  139. fedgwas-0.0.1/experiments/real_world/1000genomes/run_experiment.sh +31 -0
  140. fedgwas-0.0.1/experiments/real_world/README.md +231 -0
  141. fedgwas-0.0.1/experiments/real_world/phenotype_generation/README.md +124 -0
  142. fedgwas-0.0.1/experiments/real_world/phenotype_generation/__init__.py +19 -0
  143. fedgwas-0.0.1/experiments/real_world/phenotype_generation/generate_phenotypes.py +312 -0
  144. fedgwas-0.0.1/experiments/real_world/phenotype_generation/models.py +360 -0
  145. fedgwas-0.0.1/experiments/tools/analyze_threshold_sensitivity.py +288 -0
  146. fedgwas-0.0.1/experiments/tools/apply_run_retention.py +60 -0
  147. fedgwas-0.0.1/experiments/tools/collect_run_metrics.py +195 -0
  148. fedgwas-0.0.1/experiments/tools/evaluation/README.md +79 -0
  149. fedgwas-0.0.1/experiments/tools/evaluation/collect_real_world_results.py +233 -0
  150. fedgwas-0.0.1/experiments/tools/evaluation/evaluate_all.py +200 -0
  151. fedgwas-0.0.1/experiments/tools/evaluation/king/analyze_king_partial_debug.py +401 -0
  152. fedgwas-0.0.1/experiments/tools/evaluation/king/compare_king_from_accumulator.py +314 -0
  153. fedgwas-0.0.1/experiments/tools/evaluation/lr/lr_evaluator.py +813 -0
  154. fedgwas-0.0.1/experiments/tools/evaluation/lr/sf_gwas_comparison.py +411 -0
  155. fedgwas-0.0.1/experiments/tools/evaluation/metrics_collector.py +429 -0
  156. fedgwas-0.0.1/experiments/tools/evaluation/qc/investigate_mismatches.py +315 -0
  157. fedgwas-0.0.1/experiments/tools/evaluation/qc/qc_evaluator.py +266 -0
  158. fedgwas-0.0.1/experiments/tools/filter_multiallelic.py +400 -0
  159. fedgwas-0.0.1/experiments/tools/fix_snp_ids.py +60 -0
  160. fedgwas-0.0.1/experiments/tools/generate_baseline.py +564 -0
  161. fedgwas-0.0.1/experiments/tools/generate_manuscript_materials.py +1455 -0
  162. fedgwas-0.0.1/experiments/tools/setup_real_world_experiment.py +301 -0
  163. fedgwas-0.0.1/experiments/tools/summarize_scalability_table.py +112 -0
  164. fedgwas-0.0.1/pipeline/__init__.py +0 -0
  165. fedgwas-0.0.1/pipeline/cli/__init__.py +2 -0
  166. fedgwas-0.0.1/pipeline/cli/deploy.py +358 -0
  167. fedgwas-0.0.1/pipeline/cli/sim.py +1003 -0
  168. fedgwas-0.0.1/pipeline/cli/simulation/__init__.py +7 -0
  169. fedgwas-0.0.1/pipeline/cli/simulation/examples.py +270 -0
  170. fedgwas-0.0.1/pipeline/cli/simulation/outputs.py +63 -0
  171. fedgwas-0.0.1/pipeline/cli/simulation/paths.py +219 -0
  172. fedgwas-0.0.1/pipeline/cli/simulation/presets.py +207 -0
  173. fedgwas-0.0.1/pipeline/cli/simulation/real_data.py +200 -0
  174. fedgwas-0.0.1/pipeline/cli/simulation/setup.py +373 -0
  175. fedgwas-0.0.1/pipeline/cli/simulation/summary.py +291 -0
  176. fedgwas-0.0.1/pipeline/cli/simulation/templates.py +289 -0
  177. fedgwas-0.0.1/pipeline/cli/simulation/validation.py +150 -0
  178. fedgwas-0.0.1/pipeline/client_app.py +1334 -0
  179. fedgwas-0.0.1/pipeline/clients/__init__.py +3 -0
  180. fedgwas-0.0.1/pipeline/clients/base_client.py +743 -0
  181. fedgwas-0.0.1/pipeline/clients/c2c_payloads.py +38 -0
  182. fedgwas-0.0.1/pipeline/clients/client_qc_aggregator.py +184 -0
  183. fedgwas-0.0.1/pipeline/clients/client_to_client.py +152 -0
  184. fedgwas-0.0.1/pipeline/clients/config.yaml +26 -0
  185. fedgwas-0.0.1/pipeline/clients/data_loder.py +189 -0
  186. fedgwas-0.0.1/pipeline/clients/flwr_config.py +29 -0
  187. fedgwas-0.0.1/pipeline/clients/iterative_king.py +944 -0
  188. fedgwas-0.0.1/pipeline/clients/iterative_lr.py +472 -0
  189. fedgwas-0.0.1/pipeline/clients/local_qc.py +275 -0
  190. fedgwas-0.0.1/pipeline/clients/logger_manager.py +106 -0
  191. fedgwas-0.0.1/pipeline/clients/lr_privacy.py +61 -0
  192. fedgwas-0.0.1/pipeline/clients/seed_sync.py +203 -0
  193. fedgwas-0.0.1/pipeline/evaluation/README.md +79 -0
  194. fedgwas-0.0.1/pipeline/evaluation/__init__.py +0 -0
  195. fedgwas-0.0.1/pipeline/evaluation/collect_real_world_results.py +228 -0
  196. fedgwas-0.0.1/pipeline/evaluation/evaluate_all.py +254 -0
  197. fedgwas-0.0.1/pipeline/evaluation/king/__init__.py +0 -0
  198. fedgwas-0.0.1/pipeline/evaluation/king/analyze_king_partial_debug.py +401 -0
  199. fedgwas-0.0.1/pipeline/evaluation/king/compare_king_from_accumulator.py +314 -0
  200. fedgwas-0.0.1/pipeline/evaluation/lr/__init__.py +0 -0
  201. fedgwas-0.0.1/pipeline/evaluation/lr/lr_evaluator.py +813 -0
  202. fedgwas-0.0.1/pipeline/evaluation/lr/sf_gwas_comparison.py +411 -0
  203. fedgwas-0.0.1/pipeline/evaluation/metrics_collector.py +429 -0
  204. fedgwas-0.0.1/pipeline/evaluation/qc/__init__.py +0 -0
  205. fedgwas-0.0.1/pipeline/evaluation/qc/investigate_mismatches.py +315 -0
  206. fedgwas-0.0.1/pipeline/evaluation/qc/qc_evaluator.py +266 -0
  207. fedgwas-0.0.1/pipeline/server/aggregator_king.py +456 -0
  208. fedgwas-0.0.1/pipeline/server/aggregator_lr.py +454 -0
  209. fedgwas-0.0.1/pipeline/server/prg_masking.py +197 -0
  210. fedgwas-0.0.1/pipeline/server/strategy_strict.py +513 -0
  211. fedgwas-0.0.1/pipeline/server_app.py +190 -0
  212. fedgwas-0.0.1/pipeline/simulation/simulated_data/generate_synthetic_data.py +1086 -0
  213. fedgwas-0.0.1/pipeline/tools/__init__.py +1 -0
  214. fedgwas-0.0.1/pipeline/tools/analyze_threshold_sensitivity.py +288 -0
  215. fedgwas-0.0.1/pipeline/tools/apply_run_retention.py +60 -0
  216. fedgwas-0.0.1/pipeline/tools/collect_run_metrics.py +195 -0
  217. fedgwas-0.0.1/pipeline/tools/filter_multiallelic.py +400 -0
  218. fedgwas-0.0.1/pipeline/tools/fix_snp_ids.py +60 -0
  219. fedgwas-0.0.1/pipeline/tools/generate_baseline.py +607 -0
  220. fedgwas-0.0.1/pipeline/tools/generate_manuscript_materials.py +1447 -0
  221. fedgwas-0.0.1/pipeline/tools/setup_real_world_experiment.py +301 -0
  222. fedgwas-0.0.1/pipeline/tools/summarize_scalability_table.py +112 -0
  223. fedgwas-0.0.1/pipeline/utils/client_data_loader.py +7 -0
  224. fedgwas-0.0.1/pipeline/utils/monitoring_config.py +107 -0
  225. fedgwas-0.0.1/pipeline/utils/performance/__init__.py +17 -0
  226. fedgwas-0.0.1/pipeline/utils/performance/monitoring_runtime.py +215 -0
  227. fedgwas-0.0.1/pipeline/utils/performance/network_monitor.py +368 -0
  228. fedgwas-0.0.1/pipeline/utils/performance/performance_monitoring.py +526 -0
  229. fedgwas-0.0.1/pipeline/utils/retention_config.py +124 -0
  230. fedgwas-0.0.1/pipeline/utils/run_retention.py +272 -0
  231. fedgwas-0.0.1/plink/plink_linux/LICENSE +674 -0
  232. fedgwas-0.0.1/plink/plink_linux/plink +0 -0
  233. fedgwas-0.0.1/plink/plink_linux/plink2 +0 -0
  234. fedgwas-0.0.1/plink/plink_linux/prettify +0 -0
  235. fedgwas-0.0.1/plink/plink_linux/toy.map +2 -0
  236. fedgwas-0.0.1/plink/plink_linux/toy.ped +2 -0
  237. fedgwas-0.0.1/plink/plink_mac/LICENSE +674 -0
  238. fedgwas-0.0.1/plink/plink_mac/plink +0 -0
  239. fedgwas-0.0.1/plink/plink_mac/plink2 +0 -0
  240. fedgwas-0.0.1/plink/plink_mac/prettify +0 -0
  241. fedgwas-0.0.1/plink/plink_mac/toy.map +2 -0
  242. fedgwas-0.0.1/plink/plink_mac/toy.ped +2 -0
  243. fedgwas-0.0.1/plink/plink_win/LICENSE +674 -0
  244. fedgwas-0.0.1/plink/plink_win/plink.exe +0 -0
  245. fedgwas-0.0.1/plink/plink_win/prettify.exe +0 -0
  246. fedgwas-0.0.1/plink/plink_win/toy.map +2 -0
  247. fedgwas-0.0.1/plink/plink_win/toy.ped +2 -0
  248. fedgwas-0.0.1/pyproject.toml +98 -0
  249. fedgwas-0.0.1/tests/test_association.py +47 -0
  250. fedgwas-0.0.1/tests/test_cli_deploy.py +166 -0
  251. fedgwas-0.0.1/tests/test_cli_sim.py +880 -0
  252. fedgwas-0.0.1/tests/test_evaluate_all.py +139 -0
  253. fedgwas-0.0.1/tests/test_generate_baseline_tool.py +86 -0
  254. fedgwas-0.0.1/tests/test_king_federated_unit.py +216 -0
  255. fedgwas-0.0.1/tests/test_kinship.py +86 -0
  256. fedgwas-0.0.1/tests/test_monitoring_config.py +18 -0
  257. fedgwas-0.0.1/tests/test_monitoring_runtime.py +31 -0
  258. fedgwas-0.0.1/tests/test_performance_monitor_append.py +32 -0
  259. fedgwas-0.0.1/tests/test_prg_masking.py +242 -0
  260. fedgwas-0.0.1/tests/test_qc.py +47 -0
  261. fedgwas-0.0.1/tests/test_quality_control.py +87 -0
  262. fedgwas-0.0.1/tests/test_reader.py +36 -0
  263. fedgwas-0.0.1/tests/test_run_retention.py +46 -0
  264. fedgwas-0.0.1/tests/test_synthetic_data.py +496 -0
  265. fedgwas-0.0.1/tests/test_visualization.py +57 -0
  266. fedgwas-0.0.1/tests/test_visualization_comprehensive.py +395 -0
  267. 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
@@ -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
+ [![PyPI](https://img.shields.io/pypi/v/FedGWAS.svg)](https://pypi.org/project/FedGWAS/)
54
+ [![Documentation](https://img.shields.io/badge/docs-GitHub%20Pages-2f8f83)](https://idsla.github.io/Fed-GWAS/)
55
+ [![Deploy documentation](https://github.com/idsla/Fed-GWAS/actions/workflows/deploy-docs.yml/badge.svg)](https://github.com/idsla/Fed-GWAS/actions/workflows/deploy-docs.yml)
56
+ [![License](https://img.shields.io/badge/license-MIT-blue.svg)](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">&#9993;</a>
286
+ - Dr. Sitao Min <a href="mailto:sitaomin1994@gmail.com" aria-label="Email Dr. Sitao Min">&#9993;</a>
287
+ - Dr. Jaideep Vaidya <a href="mailto:jsvaidya@business.rutgers.edu" aria-label="Email Dr. Jaideep Vaidya">&#9993;</a>