dapper 1.7.3__tar.gz → 1.8.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 (222) hide show
  1. dapper-1.8.1/.github/workflows/colab-compat.yml +32 -0
  2. dapper-1.8.1/.github/workflows/deploy-docs.yml +30 -0
  3. dapper-1.8.1/.github/workflows/publish.yml +17 -0
  4. dapper-1.8.1/.github/workflows/tests.yml +120 -0
  5. dapper-1.8.1/.gitignore +160 -0
  6. dapper-1.8.1/.markdownlint.yaml +9 -0
  7. dapper-1.8.1/.pre-commit-config.yaml +43 -0
  8. {dapper-1.7.3 → dapper-1.8.1}/LICENCE.txt +2 -0
  9. dapper-1.8.1/PKG-INFO +478 -0
  10. {dapper-1.7.3 → dapper-1.8.1}/README.md +60 -41
  11. dapper-1.8.1/THIRD_PARTY_NOTICES +38 -0
  12. dapper-1.8.1/conftest.py +17 -0
  13. {dapper-1.7.3 → dapper-1.8.1}/dapper/__init__.py +1 -1
  14. dapper-1.8.1/dapper/da_methods/__init__.py +162 -0
  15. {dapper-1.7.3 → dapper-1.8.1}/dapper/da_methods/baseline.py +12 -17
  16. {dapper-1.7.3 → dapper-1.8.1}/dapper/da_methods/ensemble.py +25 -29
  17. {dapper-1.7.3 → dapper-1.8.1}/dapper/da_methods/extended.py +3 -5
  18. {dapper-1.7.3 → dapper-1.8.1}/dapper/da_methods/other.py +4 -5
  19. {dapper-1.7.3 → dapper-1.8.1}/dapper/da_methods/particle.py +20 -23
  20. {dapper-1.7.3 → dapper-1.8.1}/dapper/da_methods/variational.py +15 -16
  21. dapper-1.8.1/dapper/dpr_config.py +92 -0
  22. {dapper-1.7.3 → dapper-1.8.1}/dapper/mods/DoublePendulum/settings101.py +3 -9
  23. {dapper-1.7.3 → dapper-1.8.1}/dapper/mods/Id/__init__.py +2 -2
  24. {dapper-1.7.3 → dapper-1.8.1}/dapper/mods/Ikeda/some_settings_01.py +2 -7
  25. {dapper-1.7.3 → dapper-1.8.1}/dapper/mods/KS/__init__.py +1 -1
  26. {dapper-1.7.3 → dapper-1.8.1}/dapper/mods/KS/bocquet2019.py +4 -9
  27. {dapper-1.7.3 → dapper-1.8.1}/dapper/mods/KS/compare_schemes.py +2 -2
  28. {dapper-1.7.3 → dapper-1.8.1}/dapper/mods/KS/demo.py +1 -1
  29. {dapper-1.7.3 → dapper-1.8.1}/dapper/mods/LA/evensen2009.py +3 -9
  30. {dapper-1.7.3 → dapper-1.8.1}/dapper/mods/LA/raanes2015.py +9 -10
  31. {dapper-1.7.3 → dapper-1.8.1}/dapper/mods/LA/small.py +3 -9
  32. {dapper-1.7.3 → dapper-1.8.1}/dapper/mods/Lorenz05/settings01.py +6 -9
  33. {dapper-1.7.3 → dapper-1.8.1}/dapper/mods/Lorenz63/anderson2010rhf.py +2 -8
  34. {dapper-1.7.3 → dapper-1.8.1}/dapper/mods/Lorenz63/bocquet2012.py +1 -1
  35. {dapper-1.7.3 → dapper-1.8.1}/dapper/mods/Lorenz63/mandel2016.py +1 -7
  36. {dapper-1.7.3 → dapper-1.8.1}/dapper/mods/Lorenz63/ramgraber2022.py +2 -8
  37. {dapper-1.7.3 → dapper-1.8.1}/dapper/mods/Lorenz63/sakov2012.py +2 -8
  38. {dapper-1.7.3 → dapper-1.8.1}/dapper/mods/Lorenz63/wiljes2017.py +1 -3
  39. {dapper-1.7.3 → dapper-1.8.1}/dapper/mods/Lorenz84/pajonk2012.py +3 -9
  40. {dapper-1.7.3 → dapper-1.8.1}/dapper/mods/Lorenz96/anderson2009.py +8 -8
  41. {dapper-1.7.3 → dapper-1.8.1}/dapper/mods/Lorenz96/bocquet2010.py +2 -7
  42. {dapper-1.7.3 → dapper-1.8.1}/dapper/mods/Lorenz96/bocquet2010_m40.py +4 -4
  43. {dapper-1.7.3 → dapper-1.8.1}/dapper/mods/Lorenz96/bocquet2015loc.py +2 -2
  44. {dapper-1.7.3 → dapper-1.8.1}/dapper/mods/Lorenz96/frei2013bridging.py +6 -9
  45. {dapper-1.7.3 → dapper-1.8.1}/dapper/mods/Lorenz96/miyoshi2011.py +6 -4
  46. {dapper-1.7.3 → dapper-1.8.1}/dapper/mods/Lorenz96/pinheiro2019.py +11 -9
  47. {dapper-1.7.3 → dapper-1.8.1}/dapper/mods/Lorenz96/raanes2016.py +1 -1
  48. {dapper-1.7.3 → dapper-1.8.1}/dapper/mods/Lorenz96/sakov2008.py +6 -9
  49. {dapper-1.7.3 → dapper-1.8.1}/dapper/mods/Lorenz96/spantini2019.py +6 -9
  50. {dapper-1.7.3 → dapper-1.8.1}/dapper/mods/Lorenz96/spectral_obs.py +3 -5
  51. {dapper-1.7.3 → dapper-1.8.1}/dapper/mods/Lorenz96/todter2015.py +7 -9
  52. {dapper-1.7.3 → dapper-1.8.1}/dapper/mods/Lorenz96/todter2015_G.py +1 -1
  53. {dapper-1.7.3 → dapper-1.8.1}/dapper/mods/Lorenz96s/grudzien2020.py +2 -3
  54. {dapper-1.7.3 → dapper-1.8.1}/dapper/mods/LorenzUV/lorenz96.py +11 -15
  55. {dapper-1.7.3 → dapper-1.8.1}/dapper/mods/LorenzUV/wilks05.py +17 -17
  56. {dapper-1.7.3 → dapper-1.8.1}/dapper/mods/LotkaVolterra/settings101.py +3 -9
  57. {dapper-1.7.3 → dapper-1.8.1}/dapper/mods/QG/demo.py +2 -2
  58. dapper-1.8.1/dapper/mods/QG/f90/README.md +72 -0
  59. {dapper-1.7.3 → dapper-1.8.1}/dapper/mods/QG/sakov2008.py +12 -23
  60. {dapper-1.7.3 → dapper-1.8.1}/dapper/mods/__init__.py +83 -80
  61. {dapper-1.7.3 → dapper-1.8.1}/dapper/mods/integration.py +10 -2
  62. {dapper-1.7.3 → dapper-1.8.1}/dapper/mods/utils.py +11 -7
  63. {dapper-1.7.3 → dapper-1.8.1}/dapper/stats.py +342 -152
  64. {dapper-1.7.3 → dapper-1.8.1}/dapper/stats_etc.md +26 -31
  65. {dapper-1.7.3 → dapper-1.8.1}/dapper/tools/chronos.py +50 -44
  66. {dapper-1.7.3 → dapper-1.8.1}/dapper/tools/colors.py +6 -6
  67. {dapper-1.7.3 → dapper-1.8.1}/dapper/tools/datafiles.py +4 -4
  68. {dapper-1.7.3 → dapper-1.8.1}/dapper/tools/linalg.py +1 -0
  69. {dapper-1.7.3 → dapper-1.8.1}/dapper/tools/liveplotting.py +106 -86
  70. {dapper-1.7.3 → dapper-1.8.1}/dapper/tools/matrices.py +34 -79
  71. {dapper-1.7.3 → dapper-1.8.1}/dapper/tools/progressbar.py +11 -9
  72. {dapper-1.7.3 → dapper-1.8.1}/dapper/tools/randvars.py +69 -58
  73. dapper-1.8.1/dapper/tools/remote/htcondor/run_job.sh +48 -0
  74. dapper-1.8.1/dapper/tools/remote/htcondor/submit-description +24 -0
  75. {dapper-1.7.3 → dapper-1.8.1}/dapper/tools/remote/uplink.py +15 -14
  76. dapper-1.8.1/dapper/tools/repr_util.py +67 -0
  77. {dapper-1.7.3 → dapper-1.8.1}/dapper/tools/rounding.py +12 -6
  78. {dapper-1.7.3 → dapper-1.8.1}/dapper/tools/seeding.py +5 -7
  79. {dapper-1.7.3 → dapper-1.8.1}/dapper/tools/series.py +82 -114
  80. dapper-1.8.1/dapper/tools/struct.py +169 -0
  81. dapper-1.8.1/dapper/tools/struct.pyi +13 -0
  82. {dapper-1.7.3 → dapper-1.8.1}/dapper/tools/viz.py +12 -12
  83. {dapper-1.7.3 → dapper-1.8.1}/dapper/xp_launch.py +24 -30
  84. {dapper-1.7.3 → dapper-1.8.1}/dapper/xp_process.py +41 -31
  85. dapper-1.8.1/docs/bib/bib2md.py +42 -0
  86. dapper-1.8.1/docs/bib/refs.bib +535 -0
  87. dapper-1.8.1/docs/dev_guide.md +309 -0
  88. dapper-1.8.1/docs/examples/README.md +28 -0
  89. dapper-1.8.1/docs/examples/basic_1.ipynb +7512 -0
  90. dapper-1.8.1/docs/examples/basic_1.py +107 -0
  91. dapper-1.8.1/docs/examples/basic_2.ipynb +290 -0
  92. dapper-1.8.1/docs/examples/basic_2.py +83 -0
  93. dapper-1.8.1/docs/examples/basic_3a.py +95 -0
  94. dapper-1.8.1/docs/examples/basic_3b.py +100 -0
  95. dapper-1.8.1/docs/examples/param_estim.py +228 -0
  96. dapper-1.8.1/docs/examples/stoch_model1.py +61 -0
  97. dapper-1.8.1/docs/examples/stoch_models.py +92 -0
  98. dapper-1.8.1/docs/examples/time-dep-obs-operator.py +71 -0
  99. dapper-1.8.1/docs/gen_ref_pages.py +46 -0
  100. dapper-1.8.1/docs/images/ex1.jpg +0 -0
  101. dapper-1.8.1/docs/images/ex3.svg +5796 -0
  102. dapper-1.8.1/docs/images/logos/CW3E-Logo-Horizontal-FullColor.png +0 -0
  103. dapper-1.8.1/docs/images/logos/UoR-logo.png +0 -0
  104. dapper-1.8.1/docs/images/logos/logo.png +0 -0
  105. dapper-1.8.1/docs/images/logos/logo.svg +15879 -0
  106. dapper-1.8.1/docs/images/logos/logo_wtxt.png +0 -0
  107. dapper-1.8.1/docs/images/logos/nansen-logo.png +0 -0
  108. dapper-1.8.1/docs/images/logos/nceologo1000.png +0 -0
  109. dapper-1.8.1/docs/images/logos/norce-logo.png +0 -0
  110. dapper-1.8.1/docs/images/snippets/ex_resample.py +72 -0
  111. dapper-1.8.1/docs/images/snippets/iEnKS_Ea.jpg +0 -0
  112. dapper-1.8.1/docs/images/snippets/serial_sqrt.jpg +0 -0
  113. dapper-1.8.1/docs/images/snippets/sigmoid.jpg +0 -0
  114. dapper-1.8.1/docs/images/snippets/trHK.jpg +0 -0
  115. dapper-1.8.1/docs/images/snippets/unbiased_skew_kurt.jpg +0 -0
  116. dapper-1.8.1/docs/index.md +8 -0
  117. dapper-1.8.1/docs/javascripts/extra.js +17 -0
  118. dapper-1.8.1/docs/javascripts/mathjax.js +19 -0
  119. dapper-1.8.1/docs/overrides/main.html +26 -0
  120. dapper-1.8.1/docs/references.md +315 -0
  121. dapper-1.8.1/docs/stylesheets/code_select.css +3 -0
  122. dapper-1.8.1/docs/stylesheets/jupyter.css +8 -0
  123. dapper-1.8.1/mise.toml +31 -0
  124. dapper-1.8.1/properdocs.yml +176 -0
  125. dapper-1.8.1/pyproject.toml +222 -0
  126. {dapper-1.7.3 → dapper-1.8.1}/tests/__init__.py +1 -1
  127. dapper-1.8.1/tests/data/0/xp +0 -0
  128. {dapper-1.7.3 → dapper-1.8.1}/tests/test_HMMs.py +1 -1
  129. dapper-1.8.1/tests/test_chronos.py +227 -0
  130. dapper-1.8.1/tests/test_da_method.py +224 -0
  131. {dapper-1.7.3 → dapper-1.8.1}/tests/test_example_2.py +26 -26
  132. dapper-1.8.1/tests/test_hmm.py +85 -0
  133. {dapper-1.7.3 → dapper-1.8.1}/tests/test_iEnKS.py +26 -26
  134. dapper-1.8.1/tests/test_matrices.py +169 -0
  135. dapper-1.7.3/tests/test_plotting.py → dapper-1.8.1/tests/test_plotting_interactive.py +2 -2
  136. dapper-1.8.1/tests/test_plotting_nonempty.py +167 -0
  137. {dapper-1.7.3 → dapper-1.8.1}/tests/test_printing.py +2 -2
  138. dapper-1.8.1/tests/test_randvars.py +135 -0
  139. dapper-1.8.1/uv.lock +2991 -0
  140. dapper-1.7.3/PKG-INFO +0 -108
  141. dapper-1.7.3/dapper/da_methods/__init__.py +0 -207
  142. dapper-1.7.3/dapper/dpr_config.py +0 -81
  143. dapper-1.7.3/dapper/dpr_config.yaml +0 -25
  144. dapper-1.7.3/dapper/mods/QG/f90/README.md +0 -81
  145. dapper-1.7.3/dapper/mods/QG/f90/prms_cou09_ens.txt +0 -16
  146. dapper-1.7.3/dapper/mods/QG/f90/prms_cou09_truth.txt +0 -16
  147. dapper-1.7.3/dapper/mods/QG/f90/prms_counillon2009_ens.txt +0 -16
  148. dapper-1.7.3/dapper/mods/QG/f90/prms_counillon2009_truth.txt +0 -16
  149. dapper-1.7.3/dapper/mods/QG/f90/prms_sak08.txt +0 -16
  150. dapper-1.7.3/dapper/mods/QG/f90/prms_sakov2008.txt +0 -16
  151. dapper-1.7.3/dapper/mods/QG/f90/prms_sample_generation.txt +0 -16
  152. dapper-1.7.3/dapper/mods/QG/f90/prms_test_model.txt +0 -16
  153. dapper-1.7.3/dapper/tools/remote/README.md +0 -337
  154. dapper-1.7.3/dapper/tools/remote/autoscaler.py +0 -412
  155. dapper-1.7.3/dapper.egg-info/PKG-INFO +0 -108
  156. dapper-1.7.3/dapper.egg-info/SOURCES.txt +0 -153
  157. dapper-1.7.3/dapper.egg-info/dependency_links.txt +0 -1
  158. dapper-1.7.3/dapper.egg-info/requires.txt +0 -79
  159. dapper-1.7.3/dapper.egg-info/top_level.txt +0 -2
  160. dapper-1.7.3/pyproject.toml +0 -133
  161. dapper-1.7.3/setup.cfg +0 -4
  162. dapper-1.7.3/setup.py +0 -155
  163. dapper-1.7.3/tests/test_matrices.py +0 -25
  164. dapper-1.7.3/tests/test_randvars.py +0 -15
  165. {dapper-1.7.3 → dapper-1.8.1}/dapper/README.md +0 -0
  166. {dapper-1.7.3 → dapper-1.8.1}/dapper/da_methods/README.md +0 -0
  167. {dapper-1.7.3 → dapper-1.8.1}/dapper/mods/DoublePendulum/__init__.py +0 -0
  168. {dapper-1.7.3 → dapper-1.8.1}/dapper/mods/DoublePendulum/demo.py +0 -0
  169. {dapper-1.7.3 → dapper-1.8.1}/dapper/mods/Ikeda/__init__.py +0 -0
  170. {dapper-1.7.3 → dapper-1.8.1}/dapper/mods/Ikeda/demo.py +0 -0
  171. {dapper-1.7.3 → dapper-1.8.1}/dapper/mods/LA/__init__.py +0 -0
  172. {dapper-1.7.3 → dapper-1.8.1}/dapper/mods/LA/demo.py +0 -0
  173. {dapper-1.7.3 → dapper-1.8.1}/dapper/mods/Lorenz05/__init__.py +0 -0
  174. {dapper-1.7.3 → dapper-1.8.1}/dapper/mods/Lorenz05/demo.py +0 -0
  175. {dapper-1.7.3 → dapper-1.8.1}/dapper/mods/Lorenz63/__init__.py +0 -0
  176. {dapper-1.7.3 → dapper-1.8.1}/dapper/mods/Lorenz63/demo.py +0 -0
  177. {dapper-1.7.3 → dapper-1.8.1}/dapper/mods/Lorenz63/extras.py +0 -0
  178. {dapper-1.7.3 → dapper-1.8.1}/dapper/mods/Lorenz84/__init__.py +0 -0
  179. {dapper-1.7.3 → dapper-1.8.1}/dapper/mods/Lorenz84/demo.py +0 -0
  180. {dapper-1.7.3 → dapper-1.8.1}/dapper/mods/Lorenz84/harder.py +0 -0
  181. {dapper-1.7.3 → dapper-1.8.1}/dapper/mods/Lorenz96/__init__.py +0 -0
  182. {dapper-1.7.3 → dapper-1.8.1}/dapper/mods/Lorenz96/demo.py +0 -0
  183. {dapper-1.7.3 → dapper-1.8.1}/dapper/mods/Lorenz96/extras.py +0 -0
  184. {dapper-1.7.3 → dapper-1.8.1}/dapper/mods/Lorenz96/hoteit2015.py +0 -0
  185. {dapper-1.7.3 → dapper-1.8.1}/dapper/mods/Lorenz96s/__init__.py +0 -0
  186. {dapper-1.7.3 → dapper-1.8.1}/dapper/mods/LorenzUV/__init__.py +0 -0
  187. {dapper-1.7.3 → dapper-1.8.1}/dapper/mods/LorenzUV/demo.py +0 -0
  188. {dapper-1.7.3 → dapper-1.8.1}/dapper/mods/LorenzUV/illust_LorenzUV.py +0 -0
  189. {dapper-1.7.3 → dapper-1.8.1}/dapper/mods/LorenzUV/illust_parameterizations.py +0 -0
  190. {dapper-1.7.3 → dapper-1.8.1}/dapper/mods/LotkaVolterra/__init__.py +0 -0
  191. {dapper-1.7.3 → dapper-1.8.1}/dapper/mods/LotkaVolterra/demo.py +0 -0
  192. {dapper-1.7.3 → dapper-1.8.1}/dapper/mods/QG/__init__.py +0 -0
  193. {dapper-1.7.3 → dapper-1.8.1}/dapper/mods/QG/counillon2009.py +0 -0
  194. {dapper-1.7.3 → dapper-1.8.1}/dapper/mods/QG/f90/Makefile +0 -0
  195. {dapper-1.7.3 → dapper-1.8.1}/dapper/mods/QG/f90/__init__.py +0 -0
  196. {dapper-1.7.3 → dapper-1.8.1}/dapper/mods/QG/f90/calc.f90 +0 -0
  197. {dapper-1.7.3 → dapper-1.8.1}/dapper/mods/QG/f90/data.f90 +0 -0
  198. {dapper-1.7.3 → dapper-1.8.1}/dapper/mods/QG/f90/helmholtz.f90 +0 -0
  199. {dapper-1.7.3 → dapper-1.8.1}/dapper/mods/QG/f90/interface.f90 +0 -0
  200. {dapper-1.7.3 → dapper-1.8.1}/dapper/mods/QG/f90/nfw.f90 +0 -0
  201. {dapper-1.7.3 → dapper-1.8.1}/dapper/mods/QG/f90/parameters.f90 +0 -0
  202. {dapper-1.7.3 → dapper-1.8.1}/dapper/mods/QG/f90/qg.f90 +0 -0
  203. {dapper-1.7.3 → dapper-1.8.1}/dapper/mods/QG/f90/qgflux.f90 +0 -0
  204. {dapper-1.7.3 → dapper-1.8.1}/dapper/mods/QG/f90/qgstep.f90 +0 -0
  205. {dapper-1.7.3 → dapper-1.8.1}/dapper/mods/QG/f90/utils.f90 +0 -0
  206. {dapper-1.7.3 → dapper-1.8.1}/dapper/mods/QG/governing_eqn.png +0 -0
  207. {dapper-1.7.3 → dapper-1.8.1}/dapper/mods/QG/illust_obs.py +0 -0
  208. {dapper-1.7.3 → dapper-1.8.1}/dapper/mods/README.md +0 -0
  209. {dapper-1.7.3 → dapper-1.8.1}/dapper/mods/VL20/__init__.py +0 -0
  210. {dapper-1.7.3 → dapper-1.8.1}/dapper/mods/VL20/demo.py +0 -0
  211. {dapper-1.7.3 → dapper-1.8.1}/dapper/mods/explore_props.py +0 -0
  212. {dapper-1.7.3 → dapper-1.8.1}/dapper/tools/__init__.py +0 -0
  213. {dapper-1.7.3 → dapper-1.8.1}/dapper/tools/localization.py +0 -0
  214. {dapper-1.7.3 → dapper-1.8.1}/dapper/tools/multiproc.py +0 -0
  215. {dapper-1.7.3 → dapper-1.8.1}/dapper/tools/remote/__init__.py +0 -0
  216. {dapper-1.7.3 → dapper-1.8.1}/tests/test_TLMs.py +0 -0
  217. {dapper-1.7.3 → dapper-1.8.1}/tests/test_data.py +0 -0
  218. {dapper-1.7.3 → dapper-1.8.1}/tests/test_demos.py +0 -0
  219. {dapper-1.7.3 → dapper-1.8.1}/tests/test_localization.py +0 -0
  220. {dapper-1.7.3 → dapper-1.8.1}/tests/test_operator.py +0 -0
  221. {dapper-1.7.3 → dapper-1.8.1}/tests/test_rng.py +0 -0
  222. {dapper-1.7.3 → dapper-1.8.1}/tests/test_round2.py +0 -0
@@ -0,0 +1,32 @@
1
+ name: Colab compatibility
2
+
3
+ on:
4
+ workflow_dispatch:
5
+ schedule:
6
+ - cron: "0 8 1 * *" # 1st of every month
7
+
8
+ jobs:
9
+ colab:
10
+ runs-on: ubuntu-latest
11
+ container:
12
+ # NOTE: a more lightweight alternative (?):
13
+ # https://github.com/googlecolab/backend-info/blob/main/pip-freeze.txt
14
+ image: us-docker.pkg.dev/colab-images/public/runtime:latest
15
+
16
+ steps:
17
+ - uses: actions/checkout@v4
18
+
19
+ - name: Install DAPPER
20
+ run: pip install -q .
21
+
22
+ - name: Run basic_1
23
+ env:
24
+ MPLBACKEND: Agg
25
+ DAPPER_LIVEPLOTTING: "0"
26
+ run: python docs/examples/basic_1.py
27
+
28
+ - name: Run basic_2
29
+ env:
30
+ MPLBACKEND: Agg
31
+ DAPPER_LIVEPLOTTING: "0"
32
+ run: python docs/examples/basic_2.py
@@ -0,0 +1,30 @@
1
+ name: Deploy docs
2
+ on:
3
+ push:
4
+ branches: [master]
5
+
6
+ permissions:
7
+ contents: read
8
+ pages: write
9
+ id-token: write
10
+
11
+ concurrency:
12
+ group: pages
13
+ cancel-in-progress: true
14
+
15
+ jobs:
16
+ deploy:
17
+ environment:
18
+ name: github-pages
19
+ url: ${{ steps.deploy.outputs.page_url }}
20
+ runs-on: ubuntu-latest
21
+ steps:
22
+ - uses: actions/checkout@v4
23
+ - uses: astral-sh/setup-uv@v5
24
+ - run: uv sync --extra doc
25
+ - run: uv run mkdocs build -f properdocs.yml
26
+ - uses: actions/upload-pages-artifact@v3
27
+ with:
28
+ path: site/
29
+ - id: deploy
30
+ uses: actions/deploy-pages@v4
@@ -0,0 +1,17 @@
1
+ name: Publish to PyPI
2
+
3
+ on:
4
+ push:
5
+ tags: ["v*"]
6
+
7
+ jobs:
8
+ publish:
9
+ runs-on: ubuntu-latest
10
+ environment: pypi
11
+ permissions:
12
+ id-token: write
13
+ steps:
14
+ - uses: actions/checkout@v4
15
+ - uses: astral-sh/setup-uv@v5
16
+ - run: uv build
17
+ - uses: pypa/gh-action-pypi-publish@release/v1
@@ -0,0 +1,120 @@
1
+ ---
2
+ name: Test
3
+ on:
4
+ pull_request:
5
+ push:
6
+ branches:
7
+ - master
8
+ - dev1
9
+ - "!gh-pages"
10
+ env:
11
+ IS_CI: "true"
12
+
13
+ jobs:
14
+ bundled:
15
+ runs-on: ${{ matrix.os }}
16
+ strategy:
17
+ matrix:
18
+ os: ["ubuntu-latest"]
19
+ # NB: also see versions for 'conda'
20
+ # as well as those specified in mise.toml
21
+ python-version: ["3.12"]
22
+ jobtype: ["test"]
23
+ include:
24
+ - os: "ubuntu-latest"
25
+ python-version: "3.12"
26
+ jobtype: "lint"
27
+ - os: "ubuntu-latest"
28
+ python-version: "3.12"
29
+ jobtype: "coverage"
30
+ - os: "macos-latest"
31
+ python-version: "3.12"
32
+ jobtype: "test"
33
+ env:
34
+ JOBTYPE: ${{ matrix.jobtype }}
35
+
36
+ steps:
37
+ - uses: actions/checkout@v4
38
+
39
+ - name: Set up Python ${{ matrix.python-version }}
40
+ uses: actions/setup-python@v5
41
+ with:
42
+ python-version: ${{ matrix.python-version }}
43
+ cache: "pip"
44
+ cache-dependency-path: "pyproject.toml"
45
+
46
+ - name: Install dependencies
47
+ run: |
48
+ python -m pip install --upgrade pip
49
+ pip install -e .[dev]
50
+ pip install coveralls
51
+
52
+ - name: Run tests
53
+ run: |
54
+ if [[ "$JOBTYPE" == "lint" ]]; then
55
+ # Run flake8 via pre-commit instead.
56
+ #- flake8 . # Use --exit-zero to ignore failure
57
+ pre-commit install
58
+ pre-commit run --all-files
59
+ elif [[ "$JOBTYPE" == "coverage" ]]; then
60
+ pytest tests --ignore=dapper/mods/QG --cov=dapper --cov-report term-missing
61
+ else
62
+ pytest tests
63
+ fi
64
+
65
+ - name: Publish coverage to coveralls.io
66
+ if: ${{ env.JOBTYPE == 'coverage' }}
67
+ env:
68
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
69
+ run: coveralls --service=github
70
+
71
+ # Verify that a plain `pip install dapper` (no extras) works and that the
72
+ # core example scripts run. Mirrors colab-compat.yml, but runs on every
73
+ # PR/push rather than monthly so regressions are caught early.
74
+ normal-install:
75
+ runs-on: ubuntu-latest
76
+ steps:
77
+ - uses: actions/checkout@v4
78
+ - uses: actions/setup-python@v5
79
+ with:
80
+ python-version: "3.12"
81
+ cache: "pip"
82
+ cache-dependency-path: "pyproject.toml"
83
+ - name: Install (no extras)
84
+ run: pip install -e .
85
+ - name: Smoke test
86
+ env:
87
+ MPLBACKEND: Agg
88
+ DAPPER_LIVEPLOTTING: "0"
89
+ run: |
90
+ python docs/examples/basic_1.py
91
+ python docs/examples/basic_2.py
92
+
93
+ conda:
94
+ defaults:
95
+ run:
96
+ shell: bash -el {0}
97
+ runs-on: ${{ matrix.os }}
98
+ strategy:
99
+ matrix:
100
+ os: ["ubuntu-latest"]
101
+ python-version: ["3.12", "3.13"]
102
+ include:
103
+ - os: "macos-latest"
104
+ python-version: "3.12"
105
+ - os: "windows-latest"
106
+ python-version: "3.12"
107
+
108
+ steps:
109
+ - uses: actions/checkout@v4
110
+ - uses: conda-incubator/setup-miniconda@v3
111
+ with:
112
+ auto-update-conda: true
113
+ python-version: ${{ matrix.python-version }}
114
+
115
+ - name: Install dependencies
116
+ run: pip install -e .[dev]
117
+ - name: Run tests
118
+ run: |
119
+ which python
120
+ pytest tests
@@ -0,0 +1,160 @@
1
+ # Created by https://www.toptal.com/developers/gitignore/api/python
2
+ # Edit at https://www.toptal.com/developers/gitignore?templates=python
3
+
4
+ ### Python ###
5
+ # Byte-compiled / optimized / DLL files
6
+ __pycache__/
7
+ *.py[cod]
8
+ *$py.class
9
+
10
+ # C extensions
11
+ *.so
12
+
13
+ # Distribution / packaging
14
+ .Python
15
+ build/
16
+ develop-eggs/
17
+ dist/
18
+ downloads/
19
+ eggs/
20
+ .eggs/
21
+ lib/
22
+ lib64/
23
+ parts/
24
+ sdist/
25
+ var/
26
+ wheels/
27
+ share/python-wheels/
28
+ *.egg-info/
29
+ .installed.cfg
30
+ *.egg
31
+ MANIFEST
32
+
33
+ # PyInstaller
34
+ # Usually these files are written by a python script from a template
35
+ # before PyInstaller builds the exe, so as to inject date/other infos into it.
36
+ *.manifest
37
+ *.spec
38
+
39
+ # Installer logs
40
+ pip-log.txt
41
+ pip-delete-this-directory.txt
42
+
43
+ # Unit test / coverage reports
44
+ htmlcov/
45
+ .tox/
46
+ .nox/
47
+ .coverage
48
+ .coverage.*
49
+ .cache
50
+ nosetests.xml
51
+ coverage.xml
52
+ *.cover
53
+ *.py,cover
54
+ .hypothesis/
55
+ .pytest_cache/
56
+ cover/
57
+
58
+ # Translations
59
+ *.mo
60
+ *.pot
61
+
62
+ # Django stuff:
63
+ *.log
64
+ local_settings.py
65
+ db.sqlite3
66
+ db.sqlite3-journal
67
+
68
+ # Flask stuff:
69
+ instance/
70
+ .webassets-cache
71
+
72
+ # Scrapy stuff:
73
+ .scrapy
74
+
75
+ # Sphinx documentation
76
+ docs/_build/
77
+
78
+ # PyBuilder
79
+ .pybuilder/
80
+ target/
81
+
82
+ # Jupyter Notebook
83
+ .ipynb_checkpoints
84
+
85
+ # IPython
86
+ profile_default/
87
+ ipython_config.py
88
+
89
+ # pyenv
90
+ # For a library or package, you might want to ignore these files since the code is
91
+ # intended to run in multiple environments; otherwise, check them in:
92
+ # .python-version
93
+
94
+ # pipenv
95
+ # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
96
+ # However, in case of collaboration, if having platform-specific dependencies or dependencies
97
+ # having no cross-platform support, pipenv may install dependencies that don't work, or not
98
+ # install all needed dependencies.
99
+ #Pipfile.lock
100
+
101
+ # PEP 582; used by e.g. github.com/David-OConnor/pyflow
102
+ __pypackages__/
103
+
104
+ # Celery stuff
105
+ celerybeat-schedule
106
+ celerybeat.pid
107
+
108
+ # SageMath parsed files
109
+ *.sage.py
110
+
111
+ # Environments
112
+ .env
113
+ .venv
114
+ env/
115
+ venv/
116
+ ENV/
117
+ env.bak/
118
+ venv.bak/
119
+
120
+ # Spyder project settings
121
+ .spyderproject
122
+ .spyproject
123
+
124
+ # Rope project settings
125
+ .ropeproject
126
+
127
+ # mkdocs documentation
128
+ /site
129
+
130
+ # mypy
131
+ .mypy_cache/
132
+ .dmypy.json
133
+ dmypy.json
134
+
135
+ # Pyre type checker
136
+ .pyre/
137
+
138
+ # pytype static type analyzer
139
+ .pytype/
140
+
141
+ # Cython debug symbols
142
+ cython_debug/
143
+
144
+ # End of https://www.toptal.com/developers/gitignore/api/python
145
+
146
+ ##############################
147
+ # DAPPER
148
+ ##############################
149
+ # If you wish to ignore files on your computer,
150
+ # that do not really have anything to do with DAPPER,
151
+ # consider specifying this in .git/info/exclude
152
+ # or your global ~/.gitignore.
153
+
154
+ # Don't commit results
155
+ dpr_data/
156
+
157
+ # Generated when running QG model
158
+ dapper/mods/QG/f90/prms_*\.txt
159
+
160
+ .pdb-pyhist
@@ -0,0 +1,9 @@
1
+ # markdownlint (js library) config
2
+ MD052: false
3
+ first-line-h1: false
4
+ no-multiple-blanks: false
5
+ line-length: false
6
+ # MD029:
7
+ # style: "ordered"
8
+ # MD007: false
9
+ # "MD007": { "indent": 4 }
@@ -0,0 +1,43 @@
1
+ exclude: '^$|settings|scripts|docs'
2
+
3
+ repos:
4
+ - repo: https://github.com/pre-commit/pre-commit-hooks
5
+ rev: v4.4.0
6
+ hooks:
7
+ - id: trailing-whitespace
8
+ exclude: |
9
+ (?x)^(
10
+ .*README.md|
11
+ .*\.f90
12
+ )$
13
+ # let flake8 deal with py => dont treat docstrings.
14
+ exclude_types: ['html','python']
15
+ - id: check-added-large-files
16
+ - id: check-ast
17
+ - id: check-json
18
+ - id: check-merge-conflict
19
+ - id: check-xml
20
+ - id: check-yaml
21
+ - id: debug-statements
22
+ exclude: 'dapper/tools/liveplotting.py'
23
+ - id: detect-aws-credentials # Notifies if you DONT have credentials
24
+ args:
25
+ - --allow-missing-credentials
26
+ - id: detect-private-key # Notifies if you have private
27
+ - id: end-of-file-fixer
28
+ - id: requirements-txt-fixer
29
+ - id: mixed-line-ending
30
+ args: ['--fix=no']
31
+
32
+ - repo: local
33
+ hooks:
34
+ - id: ruff
35
+ name: ruff
36
+ entry: ruff check --fix
37
+ language: system
38
+ types: [python]
39
+ - id: ruff-format
40
+ name: ruff-format
41
+ entry: ruff format
42
+ language: system
43
+ types: [python]
@@ -1,5 +1,7 @@
1
1
  The MIT License (MIT)
2
2
 
3
+ Note: some components are governed by other licenses. See THIRD_PARTY_NOTICES.
4
+
3
5
  Copyright (c) 2016, Patrick N. Raanes, NERSC
4
6
 
5
7
  Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: