pyaging 0.3.0__tar.gz → 0.3.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 (450) hide show
  1. {pyaging-0.3.0 → pyaging-0.3.1}/Makefile +2 -2
  2. {pyaging-0.3.0 → pyaging-0.3.1}/PKG-INFO +8 -10
  3. {pyaging-0.3.0 → pyaging-0.3.1}/README.md +8 -10
  4. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/huggingface/README.md +2 -2
  5. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/camilloh3k27ac.ipynb +6 -6
  6. {pyaging-0.3.0/docs/source/clock_notebooks → pyaging-0.3.1/clocks/notebooks}/camilloh3k27me3.ipynb +6 -6
  7. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/camilloh3k36me3.ipynb +6 -6
  8. {pyaging-0.3.0/docs/source/clock_notebooks → pyaging-0.3.1/clocks/notebooks}/camilloh3k4me1.ipynb +6 -6
  9. {pyaging-0.3.0/docs/source/clock_notebooks → pyaging-0.3.1/clocks/notebooks}/camilloh3k4me3.ipynb +6 -6
  10. {pyaging-0.3.0/docs/source/clock_notebooks → pyaging-0.3.1/clocks/notebooks}/camilloh3k9ac.ipynb +6 -6
  11. {pyaging-0.3.0/docs/source/clock_notebooks → pyaging-0.3.1/clocks/notebooks}/camilloh3k9me3.ipynb +6 -6
  12. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/camillopanhistone.ipynb +6 -6
  13. {pyaging-0.3.0 → pyaging-0.3.1}/docs/_static/clock_explorer.css +8 -0
  14. {pyaging-0.3.0 → pyaging-0.3.1}/docs/_static/clock_explorer.js +37 -22
  15. {pyaging-0.3.0 → pyaging-0.3.1}/docs/_static/clock_explorer_core.js +10 -1
  16. {pyaging-0.3.0 → pyaging-0.3.1}/docs/_static/clock_glossary.csv +174 -174
  17. pyaging-0.3.1/docs/_static/clocks.json +1 -0
  18. {pyaging-0.3.0 → pyaging-0.3.1}/docs/_static/custom.css +2 -1
  19. {pyaging-0.3.0 → pyaging-0.3.1}/docs/_static/tests/clock_explorer_core.test.js +10 -3
  20. {pyaging-0.3.0 → pyaging-0.3.1}/docs/environment.yml +1 -1
  21. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/camilloh3k27ac.ipynb +6 -6
  22. {pyaging-0.3.0/clocks/notebooks → pyaging-0.3.1/docs/source/clock_notebooks}/camilloh3k27me3.ipynb +6 -6
  23. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/camilloh3k36me3.ipynb +6 -6
  24. {pyaging-0.3.0/clocks/notebooks → pyaging-0.3.1/docs/source/clock_notebooks}/camilloh3k4me1.ipynb +6 -6
  25. {pyaging-0.3.0/clocks/notebooks → pyaging-0.3.1/docs/source/clock_notebooks}/camilloh3k4me3.ipynb +6 -6
  26. {pyaging-0.3.0/clocks/notebooks → pyaging-0.3.1/docs/source/clock_notebooks}/camilloh3k9ac.ipynb +6 -6
  27. {pyaging-0.3.0/clocks/notebooks → pyaging-0.3.1/docs/source/clock_notebooks}/camilloh3k9me3.ipynb +6 -6
  28. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/camillopanhistone.ipynb +6 -6
  29. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/make_clock_data.py +6 -6
  30. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/test_make_clock_data.py +15 -7
  31. {pyaging-0.3.0 → pyaging-0.3.1/docs/source}/tutorials/tutorial_histonemarkchipseq.ipynb +3 -3
  32. pyaging-0.3.1/docs/superpowers/plans/2026-07-12-documentation-catalog-polish.md +267 -0
  33. pyaging-0.3.1/docs/superpowers/specs/2026-07-12-documentation-catalog-polish-design.md +112 -0
  34. {pyaging-0.3.0 → pyaging-0.3.1}/pyaging/__init__.py +1 -1
  35. {pyaging-0.3.0 → pyaging-0.3.1}/pyaging/data/_data.py +1 -1
  36. {pyaging-0.3.0 → pyaging-0.3.1}/pyaging/predict/_pred.py +1 -1
  37. {pyaging-0.3.0 → pyaging-0.3.1}/pyaging/predict/_pred_utils.py +2 -2
  38. {pyaging-0.3.0 → pyaging-0.3.1}/pyaging/preprocess/_preprocess.py +1 -1
  39. {pyaging-0.3.0 → pyaging-0.3.1}/pyaging/preprocess/_preprocess_utils.py +1 -1
  40. {pyaging-0.3.0 → pyaging-0.3.1}/pyaging/utils/_hf.py +5 -3
  41. {pyaging-0.3.0 → pyaging-0.3.1}/pyaging/utils/_utils.py +7 -7
  42. {pyaging-0.3.0 → pyaging-0.3.1}/pyproject.toml +1 -1
  43. {pyaging-0.3.0 → pyaging-0.3.1}/tests/integration/test_hf_smoke.py +3 -0
  44. {pyaging-0.3.0 → pyaging-0.3.1}/tests/test_release_configuration.py +28 -18
  45. pyaging-0.3.1/tests/test_version.py +8 -0
  46. {pyaging-0.3.0 → pyaging-0.3.1}/tests/utils/test_hf.py +10 -2
  47. {pyaging-0.3.0/docs/source → pyaging-0.3.1}/tutorials/tutorial_histonemarkchipseq.ipynb +3 -3
  48. {pyaging-0.3.0 → pyaging-0.3.1}/uv.lock +1 -1
  49. pyaging-0.3.0/docs/_static/clocks.json +0 -1
  50. pyaging-0.3.0/tests/test_version.py +0 -8
  51. {pyaging-0.3.0 → pyaging-0.3.1}/.cursor/rules/best-practices.mdc +0 -0
  52. {pyaging-0.3.0 → pyaging-0.3.1}/.github/workflows/ci.yml +0 -0
  53. {pyaging-0.3.0 → pyaging-0.3.1}/.github/workflows/release.yml +0 -0
  54. {pyaging-0.3.0 → pyaging-0.3.1}/.gitignore +0 -0
  55. {pyaging-0.3.0 → pyaging-0.3.1}/.pre-commit-config.yaml +0 -0
  56. {pyaging-0.3.0 → pyaging-0.3.1}/LICENSE +0 -0
  57. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/abec.ipynb +0 -0
  58. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/adbahadosingh.ipynb +0 -0
  59. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/altumage.ipynb +0 -0
  60. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/bitage.ipynb +0 -0
  61. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/bocklandt.ipynb +0 -0
  62. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/bohlin.ipynb +0 -0
  63. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/cabec.ipynb +0 -0
  64. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/cellpopage.ipynb +0 -0
  65. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/compil6.ipynb +0 -0
  66. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/corticalclock.ipynb +0 -0
  67. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/cpgptgrimage3.ipynb +0 -0
  68. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/cpgptpcgrimage3.ipynb +0 -0
  69. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/ctsliver.ipynb +0 -0
  70. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/cvdwesterman.ipynb +0 -0
  71. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/deconvolutebloodepicbcell.ipynb +0 -0
  72. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/deconvolutebloodepiccd4tcell.ipynb +0 -0
  73. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/deconvolutebloodepiccd8tcell.ipynb +0 -0
  74. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/deconvolutebloodepicmonocyte.ipynb +0 -0
  75. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/deconvolutebloodepicneutrophil.ipynb +0 -0
  76. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/deconvolutebloodepicnkcell.ipynb +0 -0
  77. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/depressionbarbu.ipynb +0 -0
  78. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/dnamfili.ipynb +0 -0
  79. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/dnamfitage.ipynb +0 -0
  80. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/dnamfitagegaitf.ipynb +0 -0
  81. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/dnamfitagegaitm.ipynb +0 -0
  82. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/dnamfitagegripf.ipynb +0 -0
  83. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/dnamfitagegripm.ipynb +0 -0
  84. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/dnamfitagevo2max.ipynb +0 -0
  85. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/dnamic.ipynb +0 -0
  86. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/dnamphenoage.ipynb +0 -0
  87. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/dnamstress.ipynb +0 -0
  88. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/dnamtl.ipynb +0 -0
  89. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/downsyndrome.ipynb +0 -0
  90. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/dunedinpace.ipynb +0 -0
  91. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/dunedinpoam38.ipynb +0 -0
  92. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/eabec.ipynb +0 -0
  93. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/encen100.ipynb +0 -0
  94. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/encen40.ipynb +0 -0
  95. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/ensembleagehumanmouse.ipynb +0 -0
  96. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/ensembleagestatic.ipynb +0 -0
  97. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/ensembleagestatictop.ipynb +0 -0
  98. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/epicga.ipynb +0 -0
  99. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/epicmithyper.ipynb +0 -0
  100. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/epicmithypo.ipynb +0 -0
  101. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/epitoc1.ipynb +0 -0
  102. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/epitoc2.ipynb +0 -0
  103. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/epitoc3.ipynb +0 -0
  104. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/garagnani.ipynb +0 -0
  105. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/gliasin.ipynb +0 -0
  106. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/grimage.ipynb +0 -0
  107. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/grimage2.ipynb +0 -0
  108. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/grimage2adm.ipynb +0 -0
  109. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/grimage2b2m.ipynb +0 -0
  110. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/grimage2cystatinc.ipynb +0 -0
  111. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/grimage2gdf15.ipynb +0 -0
  112. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/grimage2leptin.ipynb +0 -0
  113. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/grimage2loga1c.ipynb +0 -0
  114. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/grimage2logcrp.ipynb +0 -0
  115. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/grimage2packyrs.ipynb +0 -0
  116. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/grimage2pai1.ipynb +0 -0
  117. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/grimage2timp1.ipynb +0 -0
  118. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/han.ipynb +0 -0
  119. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/hannum.ipynb +0 -0
  120. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/hep.ipynb +0 -0
  121. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/hepatoxu.ipynb +0 -0
  122. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/horvath2013.ipynb +0 -0
  123. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/hrsinchphenoage.ipynb +0 -0
  124. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/hypoclock.ipynb +0 -0
  125. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/intrinclock.ipynb +0 -0
  126. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/knight.ipynb +0 -0
  127. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/leecontrol.ipynb +0 -0
  128. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/leerefinedrobust.ipynb +0 -0
  129. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/leerobust.ipynb +0 -0
  130. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/lin.ipynb +0 -0
  131. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/mammalian1.ipynb +0 -0
  132. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/mammalian2.ipynb +0 -0
  133. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/mammalian3.ipynb +0 -0
  134. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/mammalianblood2.ipynb +0 -0
  135. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/mammalianblood3.ipynb +0 -0
  136. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/mammalianfemale.ipynb +0 -0
  137. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/mammalianlifespan.ipynb +0 -0
  138. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/mammalianskin2.ipynb +0 -0
  139. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/mammalianskin3.ipynb +0 -0
  140. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/mayne.ipynb +0 -0
  141. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/mccartneyalcohol.ipynb +0 -0
  142. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/mccartneybmi.ipynb +0 -0
  143. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/mccartneybodyfat.ipynb +0 -0
  144. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/mccartneyeducation.ipynb +0 -0
  145. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/mccartneyhdlcholesterol.ipynb +0 -0
  146. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/mccartneyldlcholesterol.ipynb +0 -0
  147. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/mccartneysmoking.ipynb +0 -0
  148. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/mccartneytotalcholesterol.ipynb +0 -0
  149. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/mccartneytotalhdlratio.ipynb +0 -0
  150. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/mccartneywhr.ipynb +0 -0
  151. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/meer.ipynb +0 -0
  152. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/neusin.ipynb +0 -0
  153. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/ocampoatac1.ipynb +0 -0
  154. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/ocampoatac2.ipynb +0 -0
  155. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/pasta.ipynb +0 -0
  156. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/pastamouse.ipynb +0 -0
  157. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/pcdnamtl.ipynb +0 -0
  158. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/pcgrimage.ipynb +0 -0
  159. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/pchannum.ipynb +0 -0
  160. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/pchorvath2013.ipynb +0 -0
  161. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/pcphenoage.ipynb +0 -0
  162. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/pcskinandblood.ipynb +0 -0
  163. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/pedbe.ipynb +0 -0
  164. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/petkovich.ipynb +0 -0
  165. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/phenoage.ipynb +0 -0
  166. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/pipekelasticnet.ipynb +0 -0
  167. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/pipekfilteredh.ipynb +0 -0
  168. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/pipekretrainedh.ipynb +0 -0
  169. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/prostatecancerkirby.ipynb +0 -0
  170. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/reedbmi.ipynb +0 -0
  171. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/reg.ipynb +0 -0
  172. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/replitali.ipynb +0 -0
  173. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/replitalinorm.ipynb +0 -0
  174. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/retroelementagev1.ipynb +0 -0
  175. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/retroelementagev2.ipynb +0 -0
  176. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/senchronoage.ipynb +0 -0
  177. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/sencultureage.ipynb +0 -0
  178. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/senmortalityage.ipynb +0 -0
  179. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/skinandblood.ipynb +0 -0
  180. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/stemtoc.ipynb +0 -0
  181. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/stemtocvitro.ipynb +0 -0
  182. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/stoch.ipynb +0 -0
  183. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/stocp.ipynb +0 -0
  184. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/stocz.ipynb +0 -0
  185. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/stubbs.ipynb +0 -0
  186. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/systemsage.ipynb +0 -0
  187. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/systemsageblood.ipynb +0 -0
  188. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/systemsagebrain.ipynb +0 -0
  189. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/systemsageheart.ipynb +0 -0
  190. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/systemsagehormone.ipynb +0 -0
  191. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/systemsageimmune.ipynb +0 -0
  192. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/systemsageinflammation.ipynb +0 -0
  193. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/systemsagekidney.ipynb +0 -0
  194. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/systemsageliver.ipynb +0 -0
  195. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/systemsagelung.ipynb +0 -0
  196. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/systemsagemetabolic.ipynb +0 -0
  197. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/systemsagemusculoskeletal.ipynb +0 -0
  198. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/template.ipynb +0 -0
  199. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/thompson.ipynb +0 -0
  200. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/twelvecelldeconvolutebloodepicbas.ipynb +0 -0
  201. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/twelvecelldeconvolutebloodepicbmem.ipynb +0 -0
  202. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/twelvecelldeconvolutebloodepicbnv.ipynb +0 -0
  203. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/twelvecelldeconvolutebloodepiccd4mem.ipynb +0 -0
  204. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/twelvecelldeconvolutebloodepiccd4nv.ipynb +0 -0
  205. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/twelvecelldeconvolutebloodepiccd8mem.ipynb +0 -0
  206. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/twelvecelldeconvolutebloodepiccd8nv.ipynb +0 -0
  207. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/twelvecelldeconvolutebloodepiceos.ipynb +0 -0
  208. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/twelvecelldeconvolutebloodepicmono.ipynb +0 -0
  209. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/twelvecelldeconvolutebloodepicneu.ipynb +0 -0
  210. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/twelvecelldeconvolutebloodepicnk.ipynb +0 -0
  211. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/twelvecelldeconvolutebloodepictreg.ipynb +0 -0
  212. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/vidalbralo.ipynb +0 -0
  213. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/weidner.ipynb +0 -0
  214. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/wu.ipynb +0 -0
  215. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/xchrom.ipynb +0 -0
  216. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/ychrom.ipynb +0 -0
  217. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/yingadaptage.ipynb +0 -0
  218. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/yingcausage.ipynb +0 -0
  219. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/yingdamage.ipynb +0 -0
  220. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/zhangblup.ipynb +0 -0
  221. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/zhangen.ipynb +0 -0
  222. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/notebooks/zhangmortality.ipynb +0 -0
  223. {pyaging-0.3.0 → pyaging-0.3.1}/clocks/update_all_clocks.py +0 -0
  224. {pyaging-0.3.0 → pyaging-0.3.1}/docs/Makefile +0 -0
  225. {pyaging-0.3.0 → pyaging-0.3.1}/docs/_static/logo.png +0 -0
  226. {pyaging-0.3.0 → pyaging-0.3.1}/docs/_static/pyaging_graphical_abstract.pdf +0 -0
  227. {pyaging-0.3.0 → pyaging-0.3.1}/docs/_static/pyaging_graphical_abstract.png +0 -0
  228. {pyaging-0.3.0 → pyaging-0.3.1}/docs/make.bat +0 -0
  229. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_glossary.rst +0 -0
  230. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_implementation.rst +0 -0
  231. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/abec.ipynb +0 -0
  232. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/adbahadosingh.ipynb +0 -0
  233. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/altumage.ipynb +0 -0
  234. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/bitage.ipynb +0 -0
  235. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/bocklandt.ipynb +0 -0
  236. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/bohlin.ipynb +0 -0
  237. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/cabec.ipynb +0 -0
  238. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/cellpopage.ipynb +0 -0
  239. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/compil6.ipynb +0 -0
  240. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/corticalclock.ipynb +0 -0
  241. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/cpgptgrimage3.ipynb +0 -0
  242. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/cpgptpcgrimage3.ipynb +0 -0
  243. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/ctsliver.ipynb +0 -0
  244. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/cvdwesterman.ipynb +0 -0
  245. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/deconvolutebloodepicbcell.ipynb +0 -0
  246. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/deconvolutebloodepiccd4tcell.ipynb +0 -0
  247. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/deconvolutebloodepiccd8tcell.ipynb +0 -0
  248. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/deconvolutebloodepicmonocyte.ipynb +0 -0
  249. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/deconvolutebloodepicneutrophil.ipynb +0 -0
  250. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/deconvolutebloodepicnkcell.ipynb +0 -0
  251. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/depressionbarbu.ipynb +0 -0
  252. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/dnamfili.ipynb +0 -0
  253. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/dnamfitage.ipynb +0 -0
  254. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/dnamfitagegaitf.ipynb +0 -0
  255. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/dnamfitagegaitm.ipynb +0 -0
  256. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/dnamfitagegripf.ipynb +0 -0
  257. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/dnamfitagegripm.ipynb +0 -0
  258. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/dnamfitagevo2max.ipynb +0 -0
  259. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/dnamic.ipynb +0 -0
  260. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/dnamphenoage.ipynb +0 -0
  261. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/dnamstress.ipynb +0 -0
  262. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/dnamtl.ipynb +0 -0
  263. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/downsyndrome.ipynb +0 -0
  264. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/dunedinpace.ipynb +0 -0
  265. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/dunedinpoam38.ipynb +0 -0
  266. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/eabec.ipynb +0 -0
  267. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/encen100.ipynb +0 -0
  268. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/encen40.ipynb +0 -0
  269. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/ensembleagehumanmouse.ipynb +0 -0
  270. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/ensembleagestatic.ipynb +0 -0
  271. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/ensembleagestatictop.ipynb +0 -0
  272. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/epicga.ipynb +0 -0
  273. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/epicmithyper.ipynb +0 -0
  274. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/epicmithypo.ipynb +0 -0
  275. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/epitoc1.ipynb +0 -0
  276. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/epitoc2.ipynb +0 -0
  277. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/epitoc3.ipynb +0 -0
  278. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/garagnani.ipynb +0 -0
  279. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/gliasin.ipynb +0 -0
  280. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/grimage.ipynb +0 -0
  281. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/grimage2.ipynb +0 -0
  282. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/grimage2adm.ipynb +0 -0
  283. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/grimage2b2m.ipynb +0 -0
  284. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/grimage2cystatinc.ipynb +0 -0
  285. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/grimage2gdf15.ipynb +0 -0
  286. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/grimage2leptin.ipynb +0 -0
  287. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/grimage2loga1c.ipynb +0 -0
  288. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/grimage2logcrp.ipynb +0 -0
  289. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/grimage2packyrs.ipynb +0 -0
  290. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/grimage2pai1.ipynb +0 -0
  291. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/grimage2timp1.ipynb +0 -0
  292. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/han.ipynb +0 -0
  293. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/hannum.ipynb +0 -0
  294. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/hep.ipynb +0 -0
  295. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/hepatoxu.ipynb +0 -0
  296. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/horvath2013.ipynb +0 -0
  297. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/hrsinchphenoage.ipynb +0 -0
  298. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/hypoclock.ipynb +0 -0
  299. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/intrinclock.ipynb +0 -0
  300. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/knight.ipynb +0 -0
  301. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/leecontrol.ipynb +0 -0
  302. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/leerefinedrobust.ipynb +0 -0
  303. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/leerobust.ipynb +0 -0
  304. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/lin.ipynb +0 -0
  305. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/mammalian1.ipynb +0 -0
  306. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/mammalian2.ipynb +0 -0
  307. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/mammalian3.ipynb +0 -0
  308. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/mammalianblood2.ipynb +0 -0
  309. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/mammalianblood3.ipynb +0 -0
  310. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/mammalianfemale.ipynb +0 -0
  311. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/mammalianlifespan.ipynb +0 -0
  312. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/mammalianskin2.ipynb +0 -0
  313. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/mammalianskin3.ipynb +0 -0
  314. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/mayne.ipynb +0 -0
  315. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/mccartneyalcohol.ipynb +0 -0
  316. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/mccartneybmi.ipynb +0 -0
  317. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/mccartneybodyfat.ipynb +0 -0
  318. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/mccartneyeducation.ipynb +0 -0
  319. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/mccartneyhdlcholesterol.ipynb +0 -0
  320. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/mccartneyldlcholesterol.ipynb +0 -0
  321. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/mccartneysmoking.ipynb +0 -0
  322. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/mccartneytotalcholesterol.ipynb +0 -0
  323. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/mccartneytotalhdlratio.ipynb +0 -0
  324. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/mccartneywhr.ipynb +0 -0
  325. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/meer.ipynb +0 -0
  326. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/neusin.ipynb +0 -0
  327. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/ocampoatac1.ipynb +0 -0
  328. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/ocampoatac2.ipynb +0 -0
  329. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/pasta.ipynb +0 -0
  330. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/pastamouse.ipynb +0 -0
  331. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/pcdnamtl.ipynb +0 -0
  332. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/pcgrimage.ipynb +0 -0
  333. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/pchannum.ipynb +0 -0
  334. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/pchorvath2013.ipynb +0 -0
  335. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/pcphenoage.ipynb +0 -0
  336. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/pcskinandblood.ipynb +0 -0
  337. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/pedbe.ipynb +0 -0
  338. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/petkovich.ipynb +0 -0
  339. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/phenoage.ipynb +0 -0
  340. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/pipekelasticnet.ipynb +0 -0
  341. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/pipekfilteredh.ipynb +0 -0
  342. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/pipekretrainedh.ipynb +0 -0
  343. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/prostatecancerkirby.ipynb +0 -0
  344. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/reedbmi.ipynb +0 -0
  345. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/reg.ipynb +0 -0
  346. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/replitali.ipynb +0 -0
  347. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/replitalinorm.ipynb +0 -0
  348. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/retroelementagev1.ipynb +0 -0
  349. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/retroelementagev2.ipynb +0 -0
  350. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/senchronoage.ipynb +0 -0
  351. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/sencultureage.ipynb +0 -0
  352. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/senmortalityage.ipynb +0 -0
  353. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/skinandblood.ipynb +0 -0
  354. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/stemtoc.ipynb +0 -0
  355. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/stemtocvitro.ipynb +0 -0
  356. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/stoch.ipynb +0 -0
  357. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/stocp.ipynb +0 -0
  358. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/stocz.ipynb +0 -0
  359. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/stubbs.ipynb +0 -0
  360. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/systemsage.ipynb +0 -0
  361. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/systemsageblood.ipynb +0 -0
  362. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/systemsagebrain.ipynb +0 -0
  363. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/systemsageheart.ipynb +0 -0
  364. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/systemsagehormone.ipynb +0 -0
  365. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/systemsageimmune.ipynb +0 -0
  366. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/systemsageinflammation.ipynb +0 -0
  367. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/systemsagekidney.ipynb +0 -0
  368. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/systemsageliver.ipynb +0 -0
  369. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/systemsagelung.ipynb +0 -0
  370. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/systemsagemetabolic.ipynb +0 -0
  371. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/systemsagemusculoskeletal.ipynb +0 -0
  372. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/template.ipynb +0 -0
  373. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/thompson.ipynb +0 -0
  374. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/twelvecelldeconvolutebloodepicbas.ipynb +0 -0
  375. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/twelvecelldeconvolutebloodepicbmem.ipynb +0 -0
  376. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/twelvecelldeconvolutebloodepicbnv.ipynb +0 -0
  377. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/twelvecelldeconvolutebloodepiccd4mem.ipynb +0 -0
  378. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/twelvecelldeconvolutebloodepiccd4nv.ipynb +0 -0
  379. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/twelvecelldeconvolutebloodepiccd8mem.ipynb +0 -0
  380. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/twelvecelldeconvolutebloodepiccd8nv.ipynb +0 -0
  381. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/twelvecelldeconvolutebloodepiceos.ipynb +0 -0
  382. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/twelvecelldeconvolutebloodepicmono.ipynb +0 -0
  383. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/twelvecelldeconvolutebloodepicneu.ipynb +0 -0
  384. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/twelvecelldeconvolutebloodepicnk.ipynb +0 -0
  385. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/twelvecelldeconvolutebloodepictreg.ipynb +0 -0
  386. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/vidalbralo.ipynb +0 -0
  387. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/weidner.ipynb +0 -0
  388. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/wu.ipynb +0 -0
  389. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/xchrom.ipynb +0 -0
  390. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/ychrom.ipynb +0 -0
  391. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/yingadaptage.ipynb +0 -0
  392. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/yingcausage.ipynb +0 -0
  393. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/yingdamage.ipynb +0 -0
  394. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/zhangblup.ipynb +0 -0
  395. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/zhangen.ipynb +0 -0
  396. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/clock_notebooks/zhangmortality.ipynb +0 -0
  397. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/conf.py +0 -0
  398. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/index.rst +0 -0
  399. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/installation.rst +0 -0
  400. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/pyaging.data.rst +0 -0
  401. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/pyaging.models.rst +0 -0
  402. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/pyaging.predict.rst +0 -0
  403. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/pyaging.preprocess.rst +0 -0
  404. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/pyaging.rst +0 -0
  405. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/pyaging.utils.rst +0 -0
  406. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/tutorials/index.rst +0 -0
  407. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/tutorials/tutorial_atacseq.ipynb +0 -0
  408. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/tutorials/tutorial_bloodchemistry.ipynb +0 -0
  409. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/tutorials/tutorial_cpgptgrimage3.ipynb +0 -0
  410. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/tutorials/tutorial_dnam_illumina_human_array.ipynb +0 -0
  411. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/tutorials/tutorial_dnam_illumina_mammalian_array.ipynb +0 -0
  412. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/tutorials/tutorial_dnam_rrbs.ipynb +0 -0
  413. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/tutorials/tutorial_rnaseq.ipynb +0 -0
  414. {pyaging-0.3.0 → pyaging-0.3.1}/docs/source/tutorials/tutorial_utils.ipynb +0 -0
  415. {pyaging-0.3.0 → pyaging-0.3.1}/docs/superpowers/plans/2026-07-05-docs-redesign.md +0 -0
  416. {pyaging-0.3.0 → pyaging-0.3.1}/docs/superpowers/plans/2026-07-06-catalog-and-landing-polish.md +0 -0
  417. {pyaging-0.3.0 → pyaging-0.3.1}/docs/superpowers/plans/2026-07-11-hugging-face-data-host-migration.md +0 -0
  418. {pyaging-0.3.0 → pyaging-0.3.1}/docs/superpowers/specs/2026-07-04-missing-clocks-design.md +0 -0
  419. {pyaging-0.3.0 → pyaging-0.3.1}/docs/superpowers/specs/2026-07-05-docs-redesign-design.md +0 -0
  420. {pyaging-0.3.0 → pyaging-0.3.1}/docs/superpowers/specs/2026-07-06-catalog-and-landing-polish-design.md +0 -0
  421. {pyaging-0.3.0 → pyaging-0.3.1}/docs/superpowers/specs/2026-07-11-hugging-face-data-host-migration-design.md +0 -0
  422. {pyaging-0.3.0 → pyaging-0.3.1}/pyaging/data/__init__.py +0 -0
  423. {pyaging-0.3.0 → pyaging-0.3.1}/pyaging/logger/__init__.py +0 -0
  424. {pyaging-0.3.0 → pyaging-0.3.1}/pyaging/logger/_logger.py +0 -0
  425. {pyaging-0.3.0 → pyaging-0.3.1}/pyaging/models/__init__.py +0 -0
  426. {pyaging-0.3.0 → pyaging-0.3.1}/pyaging/models/_base_models.py +0 -0
  427. {pyaging-0.3.0 → pyaging-0.3.1}/pyaging/models/_models.py +0 -0
  428. {pyaging-0.3.0 → pyaging-0.3.1}/pyaging/predict/__init__.py +0 -0
  429. {pyaging-0.3.0 → pyaging-0.3.1}/pyaging/predict/_postprocessing.py +0 -0
  430. {pyaging-0.3.0 → pyaging-0.3.1}/pyaging/predict/_preprocessing.py +0 -0
  431. {pyaging-0.3.0 → pyaging-0.3.1}/pyaging/preprocess/__init__.py +0 -0
  432. {pyaging-0.3.0 → pyaging-0.3.1}/pyaging/utils/__init__.py +0 -0
  433. {pyaging-0.3.0 → pyaging-0.3.1}/readthedocs.yaml +0 -0
  434. {pyaging-0.3.0 → pyaging-0.3.1}/tests/__init__.py +0 -0
  435. {pyaging-0.3.0 → pyaging-0.3.1}/tests/data/test_hf_data.py +0 -0
  436. {pyaging-0.3.0 → pyaging-0.3.1}/tests/predict/test_gold_standard.py +0 -0
  437. {pyaging-0.3.0 → pyaging-0.3.1}/tests/predict/test_hf_loading.py +0 -0
  438. {pyaging-0.3.0 → pyaging-0.3.1}/tests/preprocess/test_hf_metadata.py +0 -0
  439. {pyaging-0.3.0 → pyaging-0.3.1}/tests/test_no_aws_dependencies.py +0 -0
  440. {pyaging-0.3.0 → pyaging-0.3.1}/tests/test_notebook_hosts.py +0 -0
  441. {pyaging-0.3.0 → pyaging-0.3.1}/tests/test_update_all_clocks.py +0 -0
  442. {pyaging-0.3.0 → pyaging-0.3.1}/tests/utils/test_download.py +0 -0
  443. {pyaging-0.3.0 → pyaging-0.3.1}/tutorials/tutorial_atacseq.ipynb +0 -0
  444. {pyaging-0.3.0 → pyaging-0.3.1}/tutorials/tutorial_bloodchemistry.ipynb +0 -0
  445. {pyaging-0.3.0 → pyaging-0.3.1}/tutorials/tutorial_cpgptgrimage3.ipynb +0 -0
  446. {pyaging-0.3.0 → pyaging-0.3.1}/tutorials/tutorial_dnam_illumina_human_array.ipynb +0 -0
  447. {pyaging-0.3.0 → pyaging-0.3.1}/tutorials/tutorial_dnam_illumina_mammalian_array.ipynb +0 -0
  448. {pyaging-0.3.0 → pyaging-0.3.1}/tutorials/tutorial_dnam_rrbs.ipynb +0 -0
  449. {pyaging-0.3.0 → pyaging-0.3.1}/tutorials/tutorial_rnaseq.ipynb +0 -0
  450. {pyaging-0.3.0 → pyaging-0.3.1}/tutorials/tutorial_utils.ipynb +0 -0
@@ -1,6 +1,6 @@
1
1
  .PHONY: lint format update build install update-clocks-notebooks update-all-clocks verify-hf-auth verify-hf-data-repo-public create-hf-data-repo upload-clocks-to-hf upload-static-data-to-hf process-tutorials test test-tutorials docs version commit tag release release-slim
2
2
 
3
- VERSION ?= v0.3.0
3
+ VERSION ?= v0.3.1
4
4
  HF_REPO_ID ?= lucascamillomd/pyaging-data
5
5
  HF_REPO_OWNER ?= lucascamillomd
6
6
  HF_STATIC_DIR ?= hf_static_data
@@ -101,7 +101,7 @@ docs:
101
101
  @echo "Building documentation..."
102
102
  cp tutorials/*.ipynb docs/source/tutorials
103
103
  cp clocks/notebooks/*.ipynb docs/source/clock_notebooks
104
- @cd docs && make html || { echo "Documentation build failed"; exit 1; }
104
+ uv run make -C docs html
105
105
 
106
106
  version:
107
107
  @echo "Updating version in pyproject.toml to $(VERSION)..."
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pyaging
3
- Version: 0.3.0
3
+ Version: 0.3.1
4
4
  Summary: A Python-based compendium of GPU-optimized aging clocks.
5
5
  Project-URL: homepage, https://github.com/lucascamillomd/pyaging
6
6
  Project-URL: repository, https://github.com/lucascamillomd/pyaging
@@ -41,15 +41,13 @@ Description-Content-Type: text/markdown
41
41
 
42
42
  ##
43
43
 
44
- [![test](https://github.com/lucascamillomd/pyaging/actions/workflows/test.yml/badge.svg)](https://github.com/lucascamillomd/pyaging/actions/workflows/test.yml)
45
- [![build](https://github.com/lucascamillomd/pyaging/actions/workflows/build.yml/badge.svg)](https://github.com/lucascamillomd/pyaging/actions/workflows/build.yml)
46
- [![publish](https://github.com/lucascamillomd/pyaging/actions/workflows/publish.yml/badge.svg)](https://github.com/lucascamillomd/pyaging/actions/workflows/publish.yml)
47
- [![release](https://github.com/lucascamillomd/pyaging/actions/workflows/release.yml/badge.svg)](https://github.com/lucascamillomd/pyaging/actions/workflows/release.yml)
48
- [![documentation](https://readthedocs.org/projects/pyaging/badge/?version=latest)](https://pyaging.readthedocs.io/en/latest/)
44
+ [![CI](https://github.com/lucascamillomd/pyaging/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/lucascamillomd/pyaging/actions/workflows/ci.yml)
45
+ [![Release](https://github.com/lucascamillomd/pyaging/actions/workflows/release.yml/badge.svg)](https://github.com/lucascamillomd/pyaging/actions/workflows/release.yml)
46
+ [![Documentation](https://readthedocs.org/projects/pyaging/badge/?version=latest)](https://pyaging.readthedocs.io/en/latest/)
49
47
  [![DOI](https://img.shields.io/badge/DOI-10.1093%2Fbioinformatics%2Fbtae200-blue.svg)](https://doi.org/10.1093/bioinformatics/btae200)
50
- [![upload](https://img.shields.io/pypi/v/pyaging?logo=PyPI)](https://pypi.org/project/pyaging/)
51
- [![download](https://static.pepy.tech/badge/pyaging)](https://pepy.tech/project/pyaging)
52
- [![star](https://img.shields.io/github/stars/lucascamillomd/pyaging?logo=GitHub&color=red)](https://github.com/lucascamillomd/pyaging/stargazers)
48
+ [![PyPI](https://img.shields.io/pypi/v/pyaging?logo=pypi)](https://pypi.org/project/pyaging/)
49
+ [![Downloads](https://static.pepy.tech/badge/pyaging)](https://pepy.tech/project/pyaging)
50
+ [![Stars](https://img.shields.io/github/stars/lucascamillomd/pyaging.svg?label=stars&style=flat&logo=github&color=red)](https://github.com/lucascamillomd/pyaging/stargazers)
53
51
 
54
52
  ## 🐍 **pyaging**: a Python-based compendium of GPU-optimized aging clocks
55
53
 
@@ -83,4 +81,4 @@ To cite `pyaging`, please use the following:
83
81
  url = {https://doi.org/10.1093/bioinformatics/btae200},
84
82
  eprint = {https://academic.oup.com/bioinformatics/advance-article-pdf/doi/10.1093/bioinformatics/btae200/57218155/btae200.pdf},
85
83
  }
86
- ```
84
+ ```
@@ -4,15 +4,13 @@
4
4
 
5
5
  ##
6
6
 
7
- [![test](https://github.com/lucascamillomd/pyaging/actions/workflows/test.yml/badge.svg)](https://github.com/lucascamillomd/pyaging/actions/workflows/test.yml)
8
- [![build](https://github.com/lucascamillomd/pyaging/actions/workflows/build.yml/badge.svg)](https://github.com/lucascamillomd/pyaging/actions/workflows/build.yml)
9
- [![publish](https://github.com/lucascamillomd/pyaging/actions/workflows/publish.yml/badge.svg)](https://github.com/lucascamillomd/pyaging/actions/workflows/publish.yml)
10
- [![release](https://github.com/lucascamillomd/pyaging/actions/workflows/release.yml/badge.svg)](https://github.com/lucascamillomd/pyaging/actions/workflows/release.yml)
11
- [![documentation](https://readthedocs.org/projects/pyaging/badge/?version=latest)](https://pyaging.readthedocs.io/en/latest/)
12
- [![DOI](https://img.shields.io/badge/DOI-10.1093%2Fbioinformatics%2Fbtae200-blue.svg)](https://doi.org/10.1093/bioinformatics/btae200)
13
- [![upload](https://img.shields.io/pypi/v/pyaging?logo=PyPI)](https://pypi.org/project/pyaging/)
14
- [![download](https://static.pepy.tech/badge/pyaging)](https://pepy.tech/project/pyaging)
15
- [![star](https://img.shields.io/github/stars/lucascamillomd/pyaging?logo=GitHub&color=red)](https://github.com/lucascamillomd/pyaging/stargazers)
7
+ [![CI](https://github.com/lucascamillomd/pyaging/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/lucascamillomd/pyaging/actions/workflows/ci.yml)
8
+ [![Release](https://github.com/lucascamillomd/pyaging/actions/workflows/release.yml/badge.svg)](https://github.com/lucascamillomd/pyaging/actions/workflows/release.yml)
9
+ [![Documentation](https://readthedocs.org/projects/pyaging/badge/?version=latest)](https://pyaging.readthedocs.io/en/latest/)
10
+ [![DOI](https://img.shields.io/badge/DOI-10.1093%2Fbioinformatics%2Fbtae200-blue.svg)](https://doi.org/10.1093/bioinformatics/btae200)
11
+ [![PyPI](https://img.shields.io/pypi/v/pyaging?logo=pypi)](https://pypi.org/project/pyaging/)
12
+ [![Downloads](https://static.pepy.tech/badge/pyaging)](https://pepy.tech/project/pyaging)
13
+ [![Stars](https://img.shields.io/github/stars/lucascamillomd/pyaging.svg?label=stars&style=flat&logo=github&color=red)](https://github.com/lucascamillomd/pyaging/stargazers)
16
14
 
17
15
  ## 🐍 **pyaging**: a Python-based compendium of GPU-optimized aging clocks
18
16
 
@@ -46,4 +44,4 @@ To cite `pyaging`, please use the following:
46
44
  url = {https://doi.org/10.1093/bioinformatics/btae200},
47
45
  eprint = {https://academic.oup.com/bioinformatics/advance-article-pdf/doi/10.1093/bioinformatics/btae200/57218155/btae200.pdf},
48
46
  }
49
- ```
47
+ ```
@@ -20,8 +20,8 @@ This public repository contains the model weights and data files used by
20
20
  - Root-level example files support the pyaging tutorials.
21
21
  - `supporting_files/` contains dependencies used to construct or document clocks.
22
22
 
23
- Files used by the Python package are intentionally stored at the repository root so
24
- `hf_hub_download(..., local_dir="pyaging_data")` preserves existing flat local paths.
23
+ Files used by the Python package are intentionally stored at the repository root and
24
+ downloaded through the standard Hugging Face cache.
25
25
  The `main` branch is the live data release and may change independently of the Python
26
26
  package version.
27
27
 
@@ -148,10 +148,10 @@
148
148
  "model.metadata[\"clock_name\"] = 'camilloh3k27ac'\n",
149
149
  "model.metadata[\"data_type\"] = 'histone mark'\n",
150
150
  "model.metadata[\"species\"] = 'Homo sapiens'\n",
151
- "model.metadata[\"year\"] = 2023\n",
151
+ "model.metadata[\"year\"] = 2025\n",
152
152
  "model.metadata[\"approved_by_author\"] = '✅'\n",
153
- "model.metadata[\"citation\"] = \"de Lima Camillo, Lucas Paulo, et al. \\\"Histone mark age of human tissues and cells.\\\" bioRxiv (2023): 2023-08.\"\n",
154
- "model.metadata[\"doi\"] = 'https://doi.org/10.1101/2023.08.21.554165'\n",
153
+ "model.metadata[\"citation\"] = \"de Lima Camillo, Lucas Paulo, et al. \\\"Histone mark age of human tissues and cell types.\\\" Science Advances 11.1 (2025): eadk9373.\"\n",
154
+ "model.metadata[\"doi\"] = 'https://doi.org/10.1126/sciadv.adk9373'\n",
155
155
  "model.metadata[\"research_only\"] = None\n",
156
156
  "model.metadata[\"notes\"] = \"Chronological-age predictor built with a deep neural network from genome-wide H3K27ac ChIP-seq signal, a mark of active enhancers and promoters, as part of a pan-tissue family of histone-mark aging clocks spanning human tissues and cell types.\"\n",
157
157
  "model.metadata[\"tissue\"] = 'Multi-tissue (82 human tissue/cell types, ENCODE ChIP-seq biosamples, n=359 for H3K27ac)'\n",
@@ -160,7 +160,7 @@
160
160
  "model.metadata[\"model_type\"] = 'PCA + elastic net'\n",
161
161
  "model.metadata[\"platform\"] = 'ChIP-seq'\n",
162
162
  "model.metadata[\"population\"] = 'Humans, multiple tissues/cell types, embryonic through 90+ years, ~equal sex split'\n",
163
- "model.metadata[\"journal\"] = 'bioRxiv (Cold Spring Harbor Laboratory)'\n",
163
+ "model.metadata[\"journal\"] = 'Science Advances'\n",
164
164
  "model.metadata[\"last_author\"] = 'Ritambhara Singh'\n",
165
165
  "model.metadata[\"n_features\"] = 1275\n",
166
166
  "model.metadata[\"citations\"] = 4\n",
@@ -438,10 +438,10 @@
438
438
  "training: True\n",
439
439
  "metadata: {'approved_by_author': '✅',\n",
440
440
  " 'citation': 'de Lima Camillo, Lucas Paulo, et al. \"Histone mark age of human '\n",
441
- " 'tissues and cells.\" bioRxiv (2023): 2023-08.',\n",
441
+ " 'tissues and cells.\" Science Advances 11.1 (2025): eadk9373.',\n",
442
442
  " 'clock_name': 'camilloh3k27ac',\n",
443
443
  " 'data_type': 'histone mark',\n",
444
- " 'doi': 'https://doi.org/10.1101/2023.08.21.554165',\n",
444
+ " 'doi': 'https://doi.org/10.1126/sciadv.adk9373',\n",
445
445
  " 'notes': None,\n",
446
446
  " 'research_only': None,\n",
447
447
  " 'species': 'Homo sapiens',\n",
@@ -148,10 +148,10 @@
148
148
  "model.metadata[\"clock_name\"] = 'camilloh3k27me3'\n",
149
149
  "model.metadata[\"data_type\"] = 'histone mark'\n",
150
150
  "model.metadata[\"species\"] = 'Homo sapiens'\n",
151
- "model.metadata[\"year\"] = 2023\n",
151
+ "model.metadata[\"year\"] = 2025\n",
152
152
  "model.metadata[\"approved_by_author\"] = '✅'\n",
153
- "model.metadata[\"citation\"] = \"de Lima Camillo, Lucas Paulo, et al. \\\"Histone mark age of human tissues and cells.\\\" bioRxiv (2023): 2023-08.\"\n",
154
- "model.metadata[\"doi\"] = 'https://doi.org/10.1101/2023.08.21.554165'\n",
153
+ "model.metadata[\"citation\"] = \"de Lima Camillo, Lucas Paulo, et al. \\\"Histone mark age of human tissues and cell types.\\\" Science Advances 11.1 (2025): eadk9373.\"\n",
154
+ "model.metadata[\"doi\"] = 'https://doi.org/10.1126/sciadv.adk9373'\n",
155
155
  "model.metadata[\"research_only\"] = None\n",
156
156
  "model.metadata[\"notes\"] = \"Chronological-age predictor built with a deep neural network from genome-wide H3K27me3 ChIP-seq signal, a Polycomb-associated repressive mark, as part of a pan-tissue family of histone-mark aging clocks spanning human tissues and cell types.\"\n",
157
157
  "model.metadata[\"tissue\"] = 'Multi-tissue (pan-tissue human tissues and cell types, ~82 tissues/biosamples; ENCODE ChIP-seq)'\n",
@@ -160,7 +160,7 @@
160
160
  "model.metadata[\"model_type\"] = 'PCA + elastic net'\n",
161
161
  "model.metadata[\"platform\"] = 'ChIP-seq'\n",
162
162
  "model.metadata[\"population\"] = 'Pan-age humans (embryonic to elderly), pan-tissue'\n",
163
- "model.metadata[\"journal\"] = 'bioRxiv (Cold Spring Harbor Laboratory)'\n",
163
+ "model.metadata[\"journal\"] = 'Science Advances'\n",
164
164
  "model.metadata[\"last_author\"] = 'Ritambhara Singh'\n",
165
165
  "model.metadata[\"n_features\"] = 922\n",
166
166
  "model.metadata[\"citations\"] = 4\n",
@@ -438,10 +438,10 @@
438
438
  "training: True\n",
439
439
  "metadata: {'approved_by_author': '✅',\n",
440
440
  " 'citation': 'de Lima Camillo, Lucas Paulo, et al. \"Histone mark age of human '\n",
441
- " 'tissues and cells.\" bioRxiv (2023): 2023-08.',\n",
441
+ " 'tissues and cells.\" Science Advances 11.1 (2025): eadk9373.',\n",
442
442
  " 'clock_name': 'camilloh3k27me3',\n",
443
443
  " 'data_type': 'histone mark',\n",
444
- " 'doi': 'https://doi.org/10.1101/2023.08.21.554165',\n",
444
+ " 'doi': 'https://doi.org/10.1126/sciadv.adk9373',\n",
445
445
  " 'notes': None,\n",
446
446
  " 'research_only': None,\n",
447
447
  " 'species': 'Homo sapiens',\n",
@@ -148,10 +148,10 @@
148
148
  "model.metadata[\"clock_name\"] = 'camilloh3k36me3'\n",
149
149
  "model.metadata[\"data_type\"] = 'histone mark'\n",
150
150
  "model.metadata[\"species\"] = 'Homo sapiens'\n",
151
- "model.metadata[\"year\"] = 2023\n",
151
+ "model.metadata[\"year\"] = 2025\n",
152
152
  "model.metadata[\"approved_by_author\"] = '✅'\n",
153
- "model.metadata[\"citation\"] = \"de Lima Camillo, Lucas Paulo, et al. \\\"Histone mark age of human tissues and cells.\\\" bioRxiv (2023): 2023-08.\"\n",
154
- "model.metadata[\"doi\"] = 'https://doi.org/10.1101/2023.08.21.554165'\n",
153
+ "model.metadata[\"citation\"] = \"de Lima Camillo, Lucas Paulo, et al. \\\"Histone mark age of human tissues and cell types.\\\" Science Advances 11.1 (2025): eadk9373.\"\n",
154
+ "model.metadata[\"doi\"] = 'https://doi.org/10.1126/sciadv.adk9373'\n",
155
155
  "model.metadata[\"research_only\"] = None\n",
156
156
  "model.metadata[\"notes\"] = \"Chronological-age predictor built with a deep neural network from genome-wide H3K36me3 ChIP-seq signal, a mark of transcribed gene bodies, as part of a pan-tissue family of histone-mark aging clocks spanning human tissues and cell types.\"\n",
157
157
  "model.metadata[\"tissue\"] = 'multi-tissue (human tissues and cell lines; ENCODE H3K36me3 ChIP-seq)'\n",
@@ -160,7 +160,7 @@
160
160
  "model.metadata[\"model_type\"] = 'PCA + elastic net'\n",
161
161
  "model.metadata[\"platform\"] = 'ChIP-seq'\n",
162
162
  "model.metadata[\"population\"] = 'humans; pan-tissue, broad age range'\n",
163
- "model.metadata[\"journal\"] = 'bioRxiv (Cold Spring Harbor Laboratory)'\n",
163
+ "model.metadata[\"journal\"] = 'Science Advances'\n",
164
164
  "model.metadata[\"last_author\"] = 'Ritambhara Singh'\n",
165
165
  "model.metadata[\"n_features\"] = 870\n",
166
166
  "model.metadata[\"citations\"] = 4\n",
@@ -438,10 +438,10 @@
438
438
  "training: True\n",
439
439
  "metadata: {'approved_by_author': '✅',\n",
440
440
  " 'citation': 'de Lima Camillo, Lucas Paulo, et al. \"Histone mark age of human '\n",
441
- " 'tissues and cells.\" bioRxiv (2023): 2023-08.',\n",
441
+ " 'tissues and cells.\" Science Advances 11.1 (2025): eadk9373.',\n",
442
442
  " 'clock_name': 'camilloh3k36me3',\n",
443
443
  " 'data_type': 'histone mark',\n",
444
- " 'doi': 'https://doi.org/10.1101/2023.08.21.554165',\n",
444
+ " 'doi': 'https://doi.org/10.1126/sciadv.adk9373',\n",
445
445
  " 'notes': None,\n",
446
446
  " 'research_only': None,\n",
447
447
  " 'species': 'Homo sapiens',\n",
@@ -148,10 +148,10 @@
148
148
  "model.metadata[\"clock_name\"] = 'camilloh3k4me1'\n",
149
149
  "model.metadata[\"data_type\"] = 'histone mark'\n",
150
150
  "model.metadata[\"species\"] = 'Homo sapiens'\n",
151
- "model.metadata[\"year\"] = 2023\n",
151
+ "model.metadata[\"year\"] = 2025\n",
152
152
  "model.metadata[\"approved_by_author\"] = '✅'\n",
153
- "model.metadata[\"citation\"] = \"de Lima Camillo, Lucas Paulo, et al. \\\"Histone mark age of human tissues and cells.\\\" bioRxiv (2023): 2023-08.\"\n",
154
- "model.metadata[\"doi\"] = 'https://doi.org/10.1101/2023.08.21.554165'\n",
153
+ "model.metadata[\"citation\"] = \"de Lima Camillo, Lucas Paulo, et al. \\\"Histone mark age of human tissues and cell types.\\\" Science Advances 11.1 (2025): eadk9373.\"\n",
154
+ "model.metadata[\"doi\"] = 'https://doi.org/10.1126/sciadv.adk9373'\n",
155
155
  "model.metadata[\"research_only\"] = None\n",
156
156
  "model.metadata[\"notes\"] = \"Chronological-age predictor built with a deep neural network from genome-wide H3K4me1 ChIP-seq signal, a mark of enhancers, as part of a pan-tissue family of histone-mark aging clocks spanning human tissues and cell types.\"\n",
157
157
  "model.metadata[\"tissue\"] = 'Multi-tissue (ENCODE human tissues and cell types; H3K4me1 ChIP-seq data, part of a larger dataset of 1,814 human samples across 82 tissues/cell types for 7 histone marks)'\n",
@@ -160,7 +160,7 @@
160
160
  "model.metadata[\"model_type\"] = 'PCA + elastic net'\n",
161
161
  "model.metadata[\"platform\"] = 'ChIP-seq'\n",
162
162
  "model.metadata[\"population\"] = 'Human, pan-tissue; ages spanning embryonic/fetal stages to 90+ years'\n",
163
- "model.metadata[\"journal\"] = 'bioRxiv (Cold Spring Harbor Laboratory)'\n",
163
+ "model.metadata[\"journal\"] = 'Science Advances'\n",
164
164
  "model.metadata[\"last_author\"] = 'Ritambhara Singh'\n",
165
165
  "model.metadata[\"n_features\"] = 892\n",
166
166
  "model.metadata[\"citations\"] = 4\n",
@@ -438,10 +438,10 @@
438
438
  "training: True\n",
439
439
  "metadata: {'approved_by_author': '✅',\n",
440
440
  " 'citation': 'de Lima Camillo, Lucas Paulo, et al. \"Histone mark age of human '\n",
441
- " 'tissues and cells.\" bioRxiv (2023): 2023-08.',\n",
441
+ " 'tissues and cells.\" Science Advances 11.1 (2025): eadk9373.',\n",
442
442
  " 'clock_name': 'camilloh3k4me1',\n",
443
443
  " 'data_type': 'histone mark',\n",
444
- " 'doi': 'https://doi.org/10.1101/2023.08.21.554165',\n",
444
+ " 'doi': 'https://doi.org/10.1126/sciadv.adk9373',\n",
445
445
  " 'notes': None,\n",
446
446
  " 'research_only': None,\n",
447
447
  " 'species': 'Homo sapiens',\n",
@@ -148,10 +148,10 @@
148
148
  "model.metadata[\"clock_name\"] = 'camilloh3k4me3'\n",
149
149
  "model.metadata[\"data_type\"] = 'histone mark'\n",
150
150
  "model.metadata[\"species\"] = 'Homo sapiens'\n",
151
- "model.metadata[\"year\"] = 2023\n",
151
+ "model.metadata[\"year\"] = 2025\n",
152
152
  "model.metadata[\"approved_by_author\"] = '✅'\n",
153
- "model.metadata[\"citation\"] = \"de Lima Camillo, Lucas Paulo, et al. \\\"Histone mark age of human tissues and cells.\\\" bioRxiv (2023): 2023-08.\"\n",
154
- "model.metadata[\"doi\"] = 'https://doi.org/10.1101/2023.08.21.554165'\n",
153
+ "model.metadata[\"citation\"] = \"de Lima Camillo, Lucas Paulo, et al. \\\"Histone mark age of human tissues and cell types.\\\" Science Advances 11.1 (2025): eadk9373.\"\n",
154
+ "model.metadata[\"doi\"] = 'https://doi.org/10.1126/sciadv.adk9373'\n",
155
155
  "model.metadata[\"research_only\"] = None\n",
156
156
  "model.metadata[\"notes\"] = \"Chronological-age predictor built with a deep neural network from genome-wide H3K4me3 ChIP-seq signal, a mark of active promoters, as part of a pan-tissue family of histone-mark aging clocks spanning human tissues and cell types.\"\n",
157
157
  "model.metadata[\"tissue\"] = 'Multi-tissue (82 human tissue/cell types; ENCODE ChIP-seq samples, n=359)'\n",
@@ -160,7 +160,7 @@
160
160
  "model.metadata[\"model_type\"] = 'PCA + elastic net'\n",
161
161
  "model.metadata[\"platform\"] = 'ChIP-seq'\n",
162
162
  "model.metadata[\"population\"] = 'Humans, pan-age (embryonic to 90+ years), ~equal male/female'\n",
163
- "model.metadata[\"journal\"] = 'bioRxiv (Cold Spring Harbor Laboratory)'\n",
163
+ "model.metadata[\"journal\"] = 'Science Advances'\n",
164
164
  "model.metadata[\"last_author\"] = 'Ritambhara Singh'\n",
165
165
  "model.metadata[\"n_features\"] = 1240\n",
166
166
  "model.metadata[\"citations\"] = 4\n",
@@ -438,10 +438,10 @@
438
438
  "training: True\n",
439
439
  "metadata: {'approved_by_author': '✅',\n",
440
440
  " 'citation': 'de Lima Camillo, Lucas Paulo, et al. \"Histone mark age of human '\n",
441
- " 'tissues and cells.\" bioRxiv (2023): 2023-08.',\n",
441
+ " 'tissues and cells.\" Science Advances 11.1 (2025): eadk9373.',\n",
442
442
  " 'clock_name': 'camilloh3k4me3',\n",
443
443
  " 'data_type': 'histone mark',\n",
444
- " 'doi': 'https://doi.org/10.1101/2023.08.21.554165',\n",
444
+ " 'doi': 'https://doi.org/10.1126/sciadv.adk9373',\n",
445
445
  " 'notes': None,\n",
446
446
  " 'research_only': None,\n",
447
447
  " 'species': 'Homo sapiens',\n",
@@ -148,10 +148,10 @@
148
148
  "model.metadata[\"clock_name\"] = 'camilloh3k9ac'\n",
149
149
  "model.metadata[\"data_type\"] = 'histone mark'\n",
150
150
  "model.metadata[\"species\"] = 'Homo sapiens'\n",
151
- "model.metadata[\"year\"] = 2023\n",
151
+ "model.metadata[\"year\"] = 2025\n",
152
152
  "model.metadata[\"approved_by_author\"] = '✅'\n",
153
- "model.metadata[\"citation\"] = \"de Lima Camillo, Lucas Paulo, et al. \\\"Histone mark age of human tissues and cells.\\\" bioRxiv (2023): 2023-08.\"\n",
154
- "model.metadata[\"doi\"] = 'https://doi.org/10.1101/2023.08.21.554165'\n",
153
+ "model.metadata[\"citation\"] = \"de Lima Camillo, Lucas Paulo, et al. \\\"Histone mark age of human tissues and cell types.\\\" Science Advances 11.1 (2025): eadk9373.\"\n",
154
+ "model.metadata[\"doi\"] = 'https://doi.org/10.1126/sciadv.adk9373'\n",
155
155
  "model.metadata[\"research_only\"] = None\n",
156
156
  "model.metadata[\"notes\"] = \"Chronological-age predictor built with a deep neural network from genome-wide H3K9ac ChIP-seq signal, a mark of active promoters, as part of a pan-tissue family of histone-mark aging clocks spanning human tissues and cell types.\"\n",
157
157
  "model.metadata[\"tissue\"] = 'Multi-tissue (human tissues and cell types; ENCODE ChIP-seq)'\n",
@@ -160,7 +160,7 @@
160
160
  "model.metadata[\"model_type\"] = 'PCA + elastic net'\n",
161
161
  "model.metadata[\"platform\"] = 'ChIP-seq'\n",
162
162
  "model.metadata[\"population\"] = 'Pan-age humans (fetal/embryonic to elderly)'\n",
163
- "model.metadata[\"journal\"] = 'bioRxiv (Cold Spring Harbor Laboratory)'\n",
163
+ "model.metadata[\"journal\"] = 'Science Advances'\n",
164
164
  "model.metadata[\"last_author\"] = 'Ritambhara Singh'\n",
165
165
  "model.metadata[\"n_features\"] = 102\n",
166
166
  "model.metadata[\"citations\"] = 4\n",
@@ -438,10 +438,10 @@
438
438
  "training: True\n",
439
439
  "metadata: {'approved_by_author': '✅',\n",
440
440
  " 'citation': 'de Lima Camillo, Lucas Paulo, et al. \"Histone mark age of human '\n",
441
- " 'tissues and cells.\" bioRxiv (2023): 2023-08.',\n",
441
+ " 'tissues and cells.\" Science Advances 11.1 (2025): eadk9373.',\n",
442
442
  " 'clock_name': 'camilloh3k9ac',\n",
443
443
  " 'data_type': 'histone mark',\n",
444
- " 'doi': 'https://doi.org/10.1101/2023.08.21.554165',\n",
444
+ " 'doi': 'https://doi.org/10.1126/sciadv.adk9373',\n",
445
445
  " 'notes': None,\n",
446
446
  " 'research_only': None,\n",
447
447
  " 'species': 'Homo sapiens',\n",
@@ -148,10 +148,10 @@
148
148
  "model.metadata[\"clock_name\"] = 'camilloh3k9me3'\n",
149
149
  "model.metadata[\"data_type\"] = 'histone mark'\n",
150
150
  "model.metadata[\"species\"] = 'Homo sapiens'\n",
151
- "model.metadata[\"year\"] = 2023\n",
151
+ "model.metadata[\"year\"] = 2025\n",
152
152
  "model.metadata[\"approved_by_author\"] = '✅'\n",
153
- "model.metadata[\"citation\"] = \"de Lima Camillo, Lucas Paulo, et al. \\\"Histone mark age of human tissues and cells.\\\" bioRxiv (2023): 2023-08.\"\n",
154
- "model.metadata[\"doi\"] = 'https://doi.org/10.1101/2023.08.21.554165'\n",
153
+ "model.metadata[\"citation\"] = \"de Lima Camillo, Lucas Paulo, et al. \\\"Histone mark age of human tissues and cell types.\\\" Science Advances 11.1 (2025): eadk9373.\"\n",
154
+ "model.metadata[\"doi\"] = 'https://doi.org/10.1126/sciadv.adk9373'\n",
155
155
  "model.metadata[\"research_only\"] = None\n",
156
156
  "model.metadata[\"notes\"] = \"Chronological age predictor built from H3K9me3 histone-mark ChIP-seq signal, using this heterochromatin-associated modification profiled across diverse human tissues and cell types to estimate age via regularized regression on gene-level features.\"\n",
157
157
  "model.metadata[\"tissue\"] = 'Multi-tissue (pan-tissue human tissues and cell types, from ENCODE H3K9me3 ChIP-seq)'\n",
@@ -160,7 +160,7 @@
160
160
  "model.metadata[\"model_type\"] = 'PCA + elastic net'\n",
161
161
  "model.metadata[\"platform\"] = 'ChIP-seq'\n",
162
162
  "model.metadata[\"population\"] = 'Humans, pan-tissue, wide age range (embryonic to 90+ years)'\n",
163
- "model.metadata[\"journal\"] = 'bioRxiv (Cold Spring Harbor Laboratory)'\n",
163
+ "model.metadata[\"journal\"] = 'Science Advances'\n",
164
164
  "model.metadata[\"last_author\"] = 'Ritambhara Singh'\n",
165
165
  "model.metadata[\"n_features\"] = 341\n",
166
166
  "model.metadata[\"citations\"] = 4\n",
@@ -438,10 +438,10 @@
438
438
  "training: True\n",
439
439
  "metadata: {'approved_by_author': '✅',\n",
440
440
  " 'citation': 'de Lima Camillo, Lucas Paulo, et al. \"Histone mark age of human '\n",
441
- " 'tissues and cells.\" bioRxiv (2023): 2023-08.',\n",
441
+ " 'tissues and cells.\" Science Advances 11.1 (2025): eadk9373.',\n",
442
442
  " 'clock_name': 'camilloh3k9me3',\n",
443
443
  " 'data_type': 'histone mark',\n",
444
- " 'doi': 'https://doi.org/10.1101/2023.08.21.554165',\n",
444
+ " 'doi': 'https://doi.org/10.1126/sciadv.adk9373',\n",
445
445
  " 'notes': None,\n",
446
446
  " 'research_only': None,\n",
447
447
  " 'species': 'Homo sapiens',\n",
@@ -148,10 +148,10 @@
148
148
  "model.metadata[\"clock_name\"] = 'camillopanhistone'\n",
149
149
  "model.metadata[\"data_type\"] = 'histone mark'\n",
150
150
  "model.metadata[\"species\"] = 'Homo sapiens'\n",
151
- "model.metadata[\"year\"] = 2023\n",
151
+ "model.metadata[\"year\"] = 2025\n",
152
152
  "model.metadata[\"approved_by_author\"] = '✅'\n",
153
- "model.metadata[\"citation\"] = \"de Lima Camillo, Lucas Paulo, et al. \\\"Histone mark age of human tissues and cells.\\\" bioRxiv (2023): 2023-08.\"\n",
154
- "model.metadata[\"doi\"] = 'https://doi.org/10.1101/2023.08.21.554165'\n",
153
+ "model.metadata[\"citation\"] = \"de Lima Camillo, Lucas Paulo, et al. \\\"Histone mark age of human tissues and cell types.\\\" Science Advances 11.1 (2025): eadk9373.\"\n",
154
+ "model.metadata[\"doi\"] = 'https://doi.org/10.1126/sciadv.adk9373'\n",
155
155
  "model.metadata[\"research_only\"] = None\n",
156
156
  "model.metadata[\"notes\"] = \"Pan-tissue, pan-histone-mark age predictor that integrates ChIP-seq signal from multiple histone modifications across diverse human tissues, demonstrating that age is broadly encoded across the epigenome with accuracy comparable to DNA-methylation clocks.\"\n",
157
157
  "model.metadata[\"tissue\"] = 'multi-tissue (82 distinct human tissues; also validated on primary cell types)'\n",
@@ -160,7 +160,7 @@
160
160
  "model.metadata[\"model_type\"] = 'PCA + elastic net'\n",
161
161
  "model.metadata[\"platform\"] = 'ChIP-seq'\n",
162
162
  "model.metadata[\"population\"] = 'humans, pan-tissue, wide age range (embryonic to 90+ years)'\n",
163
- "model.metadata[\"journal\"] = 'bioRxiv (Cold Spring Harbor Laboratory)'\n",
163
+ "model.metadata[\"journal\"] = 'Science Advances'\n",
164
164
  "model.metadata[\"last_author\"] = 'Ritambhara Singh'\n",
165
165
  "model.metadata[\"n_features\"] = 3739\n",
166
166
  "model.metadata[\"citations\"] = 4\n",
@@ -438,10 +438,10 @@
438
438
  "training: True\n",
439
439
  "metadata: {'approved_by_author': '✅',\n",
440
440
  " 'citation': 'de Lima Camillo, Lucas Paulo, et al. \"Histone mark age of human '\n",
441
- " 'tissues and cells.\" bioRxiv (2023): 2023-08.',\n",
441
+ " 'tissues and cells.\" Science Advances 11.1 (2025): eadk9373.',\n",
442
442
  " 'clock_name': 'camillopanhistone',\n",
443
443
  " 'data_type': 'histone mark',\n",
444
- " 'doi': 'https://doi.org/10.1101/2023.08.21.554165',\n",
444
+ " 'doi': 'https://doi.org/10.1126/sciadv.adk9373',\n",
445
445
  " 'notes': None,\n",
446
446
  " 'research_only': None,\n",
447
447
  " 'species': 'Homo sapiens',\n",
@@ -57,6 +57,9 @@
57
57
  .ce-scroll { max-height: 72vh; overflow: auto; border: 1px solid var(--ce-border); border-radius: 10px; }
58
58
  .ce-table { width: 100%; border-collapse: collapse; white-space: nowrap; }
59
59
  .ce-table th, .ce-table td { padding: 9px 12px; text-align: left; border-bottom: 1px solid var(--ce-border); }
60
+ .ce-table .ce-col-clock { min-width: 15rem; font-weight: 600; }
61
+ .ce-table .ce-col-approval, .ce-table .ce-col-num, .ce-table .ce-col-short { width: 1%; }
62
+ .ce-table .ce-col-long { min-width: 11rem; }
60
63
  .ce-table thead th { position: sticky; top: 0; background: var(--ce-surface); cursor: pointer; user-select: none;
61
64
  font-weight: 600; z-index: 1; }
62
65
  .ce-table thead th.sort-asc::after { content: " ▲"; color: var(--ce-primary); }
@@ -64,6 +67,11 @@
64
67
  .ce-num { text-align: right; font-variant-numeric: tabular-nums; }
65
68
  .ce-row { cursor: pointer; }
66
69
  .ce-row:hover { background: var(--ce-surface); }
70
+ .ce-approval { display: inline-flex; align-items: center; border-radius: 999px; padding: 2px 8px;
71
+ font-size: 0.72rem; font-weight: 600; }
72
+ .ce-approval.is-approved { color: #166534; background: #dcfce7; }
73
+ .ce-approval.is-pending { color: var(--ce-muted); background: var(--ce-surface); border: 1px solid var(--ce-border); }
74
+ html[data-theme="dark"] .ce-approval.is-approved { color: #bbf7d0; background: #14532d; }
67
75
  .ce-expander-col { width: 26px; }
68
76
  .ce-caret { display: inline-block; transition: transform 0.15s ease; color: var(--ce-muted); }
69
77
  .ce-caret.open { transform: rotate(90deg); color: var(--ce-primary); }
@@ -12,38 +12,41 @@
12
12
  data_type: "Data type", species: "Species", platform: "Platform",
13
13
  model_type: "Model type", unit: "Unit", tissue: "Tissue",
14
14
  last_author: "Last author", journal: "Journal", predicts: "Predicts",
15
- population: "Population", approved_by_author: "Approval",
15
+ population: "Population", approved_by_author: "Verified",
16
16
  };
17
17
  var COLUMNS = [
18
- { key: "clock_name", label: "Clock", def: true },
19
- { key: "data_type", label: "Data type", def: true },
20
- { key: "species", label: "Species", def: true },
21
- { key: "predicts", label: "Predicts", def: true },
22
- { key: "model_type", label: "Model", def: true },
23
- { key: "platform", label: "Platform", def: true },
24
- { key: "citations", label: "Citations", def: true, num: true },
25
- { key: "year", label: "Year", def: true, num: true },
26
- { key: "n_features", label: "N features", def: false, num: true },
27
- { key: "unit", label: "Unit", def: false },
28
- { key: "tissue", label: "Tissue", def: false },
29
- { key: "population", label: "Population", def: false },
30
- { key: "last_author", label: "Last author", def: false },
31
- { key: "journal", label: "Journal", def: false },
18
+ { key: "clock_name", label: "Clock", def: true, cls: "ce-col-clock" },
19
+ { key: "approved_by_author", label: "Verified", def: true, cls: "ce-col-approval" },
20
+ { key: "data_type", label: "Data type", def: true, cls: "ce-col-short" },
21
+ { key: "species", label: "Species", def: true, cls: "ce-col-short" },
22
+ { key: "year", label: "Year", def: true, num: true, cls: "ce-col-num" },
23
+ { key: "citations", label: "Citations", def: true, num: true, cls: "ce-col-num" },
24
+ { key: "n_features", label: "N features", def: true, num: true, cls: "ce-col-num" },
25
+ { key: "unit", label: "Unit", def: true, cls: "ce-col-short" },
26
+ { key: "model_type", label: "Model", def: true, cls: "ce-col-long" },
27
+ { key: "platform", label: "Platform", def: true, cls: "ce-col-long" },
28
+ { key: "predicts", label: "Predicts", def: true, cls: "ce-col-long" },
29
+ { key: "tissue", label: "Tissue", def: true, cls: "ce-col-long" },
30
+ { key: "population", label: "Population", def: true, cls: "ce-col-long" },
31
+ { key: "last_author", label: "Last author", def: true, cls: "ce-col-long" },
32
+ { key: "journal", label: "Journal", def: true, cls: "ce-col-long" },
32
33
  ];
33
34
  var DETAIL_FIELDS = [
34
35
  ["predicts", "Predicts"], ["unit", "Unit"], ["tissue", "Tissue"],
35
36
  ["platform", "Platform"], ["population", "Population"], ["model_type", "Model type"],
36
37
  ["n_features", "N features"], ["year", "Year"], ["citations", "Citations"],
37
38
  ["last_author", "Last author"], ["journal", "Journal"], ["species", "Species"],
38
- ["data_type", "Data type"], ["approved_by_author", "Approved by author"],
39
+ ["data_type", "Data type"], ["approved_by_author", "Verified"],
39
40
  ];
40
41
  // Every sortable table column is offered in the quick-sort dropdown so a
41
42
  // column-header click always has a matching option and render() can re-sync
42
43
  // the dropdown instead of leaving it showing a stale key.
43
- var SORT_OPTIONS = COLUMNS.map(function (c) { return { key: c.key, label: c.label }; });
44
+ var SORT_OPTIONS = [{ key: "default", label: "Verified first, then name" }].concat(
45
+ COLUMNS.map(function (c) { return { key: c.key, label: c.label }; })
46
+ );
44
47
 
45
48
  var state = {
46
- clocks: [], selected: {}, search: "", sortKey: "citations", sortDir: "desc",
49
+ clocks: [], selected: {}, search: "", sortKey: "default", sortDir: "asc",
47
50
  view: "table", cols: null, expanded: {},
48
51
  };
49
52
  var mount, body, sortSelEl, sortDirBtn, viewToggleBtns;
@@ -60,9 +63,15 @@
60
63
  return COLUMNS.filter(function (c) { return state.cols[c.key]; });
61
64
  }
62
65
  function visible() {
63
- return core.sortClocks(core.filterClocks(state.clocks, state.selected, state.search), state.sortKey, state.sortDir);
66
+ var filtered = core.filterClocks(state.clocks, state.selected, state.search);
67
+ return state.sortKey === "default" ? core.defaultOrder(filtered) : core.sortClocks(filtered, state.sortKey, state.sortDir);
64
68
  }
65
69
  function fmt(v) { return v == null || v === "" ? "—" : String(v); }
70
+ function columnClass(col) { return (col.num ? "ce-num " : "") + (col.cls || ""); }
71
+ function approvalBadge(value) {
72
+ var verified = String(value || "").toLowerCase() === "by authors";
73
+ return el("span", "ce-approval " + (verified ? "is-approved" : "is-pending"), verified ? "By authors" : "Not yet");
74
+ }
66
75
 
67
76
  // ---------- filter bar ----------
68
77
  function boxKey(f, value) { return f + " " + value; }
@@ -224,6 +233,7 @@
224
233
  sortDirBtn = el("button", "ce-btn ce-sortdir", state.sortDir === "desc" ? "▼" : "▲");
225
234
  sortDirBtn.type = "button";
226
235
  sortDirBtn.title = "Toggle sort direction";
236
+ sortDirBtn.setAttribute("aria-label", "Toggle sort direction");
227
237
  sortDirBtn.addEventListener("click", function () {
228
238
  state.sortDir = state.sortDir === "desc" ? "asc" : "desc";
229
239
  render();
@@ -299,7 +309,7 @@
299
309
  var thead = el("thead"), htr = el("tr");
300
310
  htr.appendChild(el("th", "ce-expander-col", ""));
301
311
  cols().forEach(function (col) {
302
- var th = el("th", col.num ? "ce-num" : null, col.label);
312
+ var th = el("th", columnClass(col), col.label);
303
313
  if (state.sortKey === col.key) th.classList.add(state.sortDir === "desc" ? "sort-desc" : "sort-asc");
304
314
  th.addEventListener("click", function () {
305
315
  if (state.sortKey === col.key) state.sortDir = state.sortDir === "desc" ? "asc" : "desc";
@@ -318,8 +328,8 @@
318
328
  exp.appendChild(el("span", "ce-caret" + (state.expanded[c.clock_name] ? " open" : ""), "▸"));
319
329
  tr.appendChild(exp);
320
330
  cols().forEach(function (col) {
321
- var td = el("td", col.num ? "ce-num" : null);
322
- td.appendChild(document.createTextNode(fmt(c[col.key])));
331
+ var td = el("td", columnClass(col));
332
+ td.appendChild(col.key === "approved_by_author" ? approvalBadge(c[col.key]) : document.createTextNode(fmt(c[col.key])));
323
333
  tr.appendChild(td);
324
334
  });
325
335
  tr.addEventListener("click", function () {
@@ -369,6 +379,11 @@
369
379
  var countEl = document.getElementById("ce-count");
370
380
  if (countEl) countEl.textContent = rows.length + " / " + state.clocks.length + " clocks";
371
381
  if (sortDirBtn) sortDirBtn.textContent = state.sortDir === "desc" ? "▼" : "▲";
382
+ if (sortDirBtn) {
383
+ sortDirBtn.disabled = state.sortKey === "default";
384
+ sortDirBtn.title = state.sortKey === "default" ? "Default order is verified first, then name" : "Toggle sort direction";
385
+ sortDirBtn.setAttribute("aria-label", sortDirBtn.title);
386
+ }
372
387
  if (sortSelEl) {
373
388
  var hasKey = false;
374
389
  SORT_OPTIONS.forEach(function (o) { if (o.key === state.sortKey) hasKey = true; });
@@ -72,6 +72,15 @@
72
72
  });
73
73
  }
74
74
 
75
+ function defaultOrder(clocks) {
76
+ return clocks.slice().sort(function (a, b) {
77
+ var aVerified = String(a.approved_by_author || "").toLowerCase() === "by authors" ? 0 : 1;
78
+ var bVerified = String(b.approved_by_author || "").toLowerCase() === "by authors" ? 0 : 1;
79
+ if (aVerified !== bVerified) return aVerified - bVerified;
80
+ return String(a.clock_name || "").toLowerCase().localeCompare(String(b.clock_name || "").toLowerCase());
81
+ });
82
+ }
83
+
75
84
  function toCSV(clocks, columns) {
76
85
  function esc(v) {
77
86
  if (v == null) return "";
@@ -88,7 +97,7 @@
88
97
  var api = {
89
98
  FACET_FIELDS: FACET_FIELDS, NUMERIC: NUMERIC,
90
99
  computeFacets: computeFacets, filterClocks: filterClocks,
91
- sortClocks: sortClocks, toCSV: toCSV,
100
+ sortClocks: sortClocks, defaultOrder: defaultOrder, toCSV: toCSV,
92
101
  };
93
102
  if (typeof module !== "undefined" && module.exports) module.exports = api;
94
103
  root.ClockExplorerCore = api;