PySDM 2.79__tar.gz → 2.81__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 (898) hide show
  1. {PySDM-2.79 → pysdm-2.81}/.github/workflows/readme_snippets.yml +4 -4
  2. {PySDM-2.79 → pysdm-2.81}/.github/workflows/tests+artifacts+pypi.yml +28 -15
  3. {PySDM-2.79 → pysdm-2.81}/.zenodo.json +5 -0
  4. pysdm-2.81/PKG-INFO +209 -0
  5. pysdm-2.81/PySDM/__init__.py +20 -0
  6. {PySDM-2.79 → pysdm-2.81}/PySDM/attributes/ice/cooling_rate.py +3 -0
  7. pysdm-2.81/PySDM.egg-info/PKG-INFO +209 -0
  8. {PySDM-2.79 → pysdm-2.81}/PySDM.egg-info/SOURCES.txt +4 -2
  9. {PySDM-2.79 → pysdm-2.81}/PySDM.egg-info/requires.txt +0 -1
  10. pysdm-2.81/README.md +168 -0
  11. PySDM-2.79/README.md → pysdm-2.81/docs/markdown/pysdm_landing.md +127 -287
  12. pysdm-2.81/docs/templates/index.html.jinja2 +164 -0
  13. {PySDM-2.79 → pysdm-2.81}/examples/MANIFEST.in +1 -0
  14. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Abade_and_Albuquerque_2024/__init__.py +3 -0
  15. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Abdul_Razzak_Ghan_2000/__init__.py +6 -0
  16. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Alpert_and_Knopf_2016/__init__.py +15 -0
  17. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Arabas_and_Shima_2017/__init__.py +3 -0
  18. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Arabas_et_al_2015/__init__.py +6 -0
  19. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Arabas_et_al_2015/spin_up.py +1 -3
  20. pysdm-2.81/examples/PySDM_examples/Arabas_et_al_2023/__init__.py +29 -0
  21. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Arabas_et_al_2023/commons.py +1 -1
  22. pysdm-2.81/examples/PySDM_examples/Arabas_et_al_2023/fig_2.ipynb +2590 -0
  23. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Arabas_et_al_2023/fig_A2.ipynb +1622 -1646
  24. pysdm-2.81/examples/PySDM_examples/Arabas_et_al_2023/figs_10_and_11_and_animations.ipynb +11245 -0
  25. pysdm-2.81/examples/PySDM_examples/Arabas_et_al_2023/figs_3_and_7_and_8.ipynb +39138 -0
  26. pysdm-2.81/examples/PySDM_examples/Arabas_et_al_2023/figs_5_and_6.ipynb +27289 -0
  27. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Arabas_et_al_2023/make_particulator.py +1 -1
  28. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Arabas_et_al_2023/plots.py +2 -2
  29. pysdm-2.81/examples/PySDM_examples/Bartman_et_al_2021/__init__.py +13 -0
  30. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Berry_1967/__init__.py +3 -0
  31. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Bieli_et_al_2022/__init__.py +3 -0
  32. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Bolot_et_al_2013/__init__.py +3 -0
  33. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Bulenok_2023_MasterThesis/__init__.py +3 -0
  34. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Gedzelman_and_Arnold_1994/__init__.py +3 -0
  35. pysdm-2.81/examples/PySDM_examples/Grabowski_and_Pawlowska_2023/__init__.py +22 -0
  36. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Graf_et_al_2019/__init__.py +6 -0
  37. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Jaruga_and_Pawlowska_2018/__init__.py +6 -0
  38. pysdm-2.81/examples/PySDM_examples/Jensen_and_Nugent_2017/__init__.py +22 -0
  39. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Kreidenweis_et_al_2003/__init__.py +3 -0
  40. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Kreidenweis_et_al_2003/simulation.py +1 -1
  41. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Lamb_et_al_2017/__init__.py +3 -0
  42. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Lowe_et_al_2019/__init__.py +12 -0
  43. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Merlivat_and_Nief_1967/__init__.py +3 -0
  44. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Miyake_et_al_1968/__init__.py +3 -0
  45. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Morrison_and_Grabowski_2007/__init__.py +6 -0
  46. pysdm-2.81/examples/PySDM_examples/Niedermeier_et_al_2014/__init__.py +9 -0
  47. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Pierchala_et_al_2022/__init__.py +6 -0
  48. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Pyrcel/__init__.py +3 -0
  49. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Rozanski_and_Sonntag_1982/__init__.py +3 -0
  50. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Shima_et_al_2009/__init__.py +3 -0
  51. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Shipway_and_Hill_2012/__init__.py +3 -0
  52. pysdm-2.81/examples/PySDM_examples/Singer_Ward/__init__.py +9 -0
  53. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Srivastava_1982/__init__.py +3 -0
  54. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Srivastava_1982/simulation.py +1 -1
  55. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Szumowski_et_al_1998/simulation.py +8 -3
  56. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Van_Hook_1968/__init__.py +3 -0
  57. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Yang_et_al_2018/__init__.py +3 -0
  58. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/__init__.py +1 -2
  59. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/deJong_Azimi/__init__.py +6 -0
  60. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/deJong_Azimi/simulation_0D.py +3 -3
  61. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/deJong_Mackay_et_al_2023/__init__.py +12 -0
  62. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/deJong_Mackay_et_al_2023/simulation_0D.py +9 -9
  63. pysdm-2.81/examples/PySDM_examples/seeding/__init__.py +10 -0
  64. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/seeding/simulation.py +4 -1
  65. pysdm-2.81/examples/README.md +10 -0
  66. pysdm-2.81/examples/docs/pysdm_examples_landing.md +125 -0
  67. pysdm-2.81/examples/pyproject.toml +5 -0
  68. {PySDM-2.79 → pysdm-2.81}/examples/setup.py +10 -4
  69. pysdm-2.81/pyproject.toml +7 -0
  70. {PySDM-2.79 → pysdm-2.81}/setup.py +1 -1
  71. {PySDM-2.79 → pysdm-2.81}/tests/smoke_tests/box/partmc/test_dry_wet_equilibration.py +4 -2
  72. {PySDM-2.79 → pysdm-2.81}/tests/smoke_tests/kinematic_2d/arabas_et_al_2015/test_adaptive_displacement.py +1 -1
  73. {PySDM-2.79 → pysdm-2.81}/tests/smoke_tests/no_env/lamb_et_al_2017/test_fig_4.py +1 -1
  74. {PySDM-2.79 → pysdm-2.81}/tests/smoke_tests/no_env/pierchala_et_al_2022/test_fig_3.py +5 -5
  75. {PySDM-2.79 → pysdm-2.81}/tests/smoke_tests/no_env/pierchala_et_al_2022/test_fig_4.py +2 -2
  76. {PySDM-2.79 → pysdm-2.81}/tests/smoke_tests/parcel_b/arabas_and_shima_2017/test_conservation.py +2 -2
  77. {PySDM-2.79 → pysdm-2.81}/tests/smoke_tests/parcel_b/arabas_and_shima_2017/test_initialisation.py +2 -3
  78. {PySDM-2.79 → pysdm-2.81}/tests/unit_tests/attributes/test_isotopes.py +4 -3
  79. {PySDM-2.79 → pysdm-2.81}/tests/unit_tests/backends/test_freezing_methods.py +2 -1
  80. {PySDM-2.79 → pysdm-2.81}/tests/unit_tests/dynamics/collisions/test_efficiencies.py +1 -1
  81. {PySDM-2.79 → pysdm-2.81}/tests/unit_tests/dynamics/collisions/test_fragmentations.py +1 -1
  82. {PySDM-2.79 → pysdm-2.81}/tests/unit_tests/dynamics/test_seeding.py +4 -1
  83. {PySDM-2.79 → pysdm-2.81}/tests/unit_tests/dynamics/test_terminal_velocity.py +1 -1
  84. {PySDM-2.79 → pysdm-2.81}/tests/unit_tests/impl/test_moments.py +1 -1
  85. {PySDM-2.79 → pysdm-2.81}/tests/unit_tests/physics/test_spectra.py +4 -3
  86. {PySDM-2.79 → pysdm-2.81}/tests/unit_tests/products/test_concentration_product.py +2 -2
  87. pysdm-2.81/tests/unit_tests/products/test_cooling_rate.py +171 -0
  88. PySDM-2.79/PKG-INFO +0 -886
  89. PySDM-2.79/PySDM/__init__.py +0 -39
  90. PySDM-2.79/PySDM.egg-info/PKG-INFO +0 -886
  91. PySDM-2.79/examples/PySDM_examples/Arabas_et_al_2023/__init__.py +0 -8
  92. PySDM-2.79/examples/PySDM_examples/Arabas_et_al_2023/fig_11.ipynb +0 -4865
  93. PySDM-2.79/examples/PySDM_examples/Arabas_et_al_2023/fig_2.ipynb +0 -2281
  94. PySDM-2.79/examples/PySDM_examples/Arabas_et_al_2023/figs_3_and_7_and_8.ipynb +0 -497
  95. PySDM-2.79/examples/PySDM_examples/Arabas_et_al_2023/figs_5_and_6.ipynb +0 -505
  96. PySDM-2.79/examples/PySDM_examples/Bartman_et_al_2021/__init__.py +0 -4
  97. PySDM-2.79/examples/PySDM_examples/Grabowski_and_Pawlowska_2023/__init__.py +0 -7
  98. PySDM-2.79/examples/PySDM_examples/Jensen_and_Nugent_2017/__init__.py +0 -2
  99. PySDM-2.79/examples/PySDM_examples/Niedermeier_et_al_2014/__init__.py +0 -4
  100. PySDM-2.79/examples/PySDM_examples/Singer_Ward/__init__.py +0 -1
  101. PySDM-2.79/examples/PySDM_examples/seeding/__init__.py +0 -2
  102. PySDM-2.79/examples/README.md +0 -269
  103. PySDM-2.79/examples/pyproject.toml +0 -5
  104. PySDM-2.79/pdoc_templates/index.html.jinja2 +0 -26
  105. PySDM-2.79/pyproject.toml +0 -8
  106. PySDM-2.79/tests/unit_tests/products/test_cooling_rate.py +0 -64
  107. {PySDM-2.79 → pysdm-2.81}/.appveyor.yml +0 -0
  108. {PySDM-2.79 → pysdm-2.81}/.binder/apt.txt +0 -0
  109. {PySDM-2.79 → pysdm-2.81}/.binder/postBuild +0 -0
  110. {PySDM-2.79 → pysdm-2.81}/.binder/requirements.txt +0 -0
  111. {PySDM-2.79 → pysdm-2.81}/.codecov.yml +0 -0
  112. {PySDM-2.79 → pysdm-2.81}/.github/dependabot.yml +0 -0
  113. {PySDM-2.79 → pysdm-2.81}/.github/pysdm_logo.png +0 -0
  114. {PySDM-2.79 → pysdm-2.81}/.github/pysdm_logo.svg +0 -0
  115. {PySDM-2.79 → pysdm-2.81}/.github/workflows/cancel.yml +0 -0
  116. {PySDM-2.79 → pysdm-2.81}/.github/workflows/joss.yml +0 -0
  117. {PySDM-2.79 → pysdm-2.81}/.github/workflows/joss_paper.yml +0 -0
  118. {PySDM-2.79 → pysdm-2.81}/.github/workflows/stale.yml +0 -0
  119. {PySDM-2.79 → pysdm-2.81}/.gitignore +0 -0
  120. {PySDM-2.79 → pysdm-2.81}/.gitmodules +0 -0
  121. {PySDM-2.79 → pysdm-2.81}/.pre-commit-config.yaml +0 -0
  122. {PySDM-2.79 → pysdm-2.81}/LICENSE +0 -0
  123. {PySDM-2.79 → pysdm-2.81}/PySDM/attributes/__init__.py +0 -0
  124. {PySDM-2.79 → pysdm-2.81}/PySDM/attributes/chemistry/__init__.py +0 -0
  125. {PySDM-2.79 → pysdm-2.81}/PySDM/attributes/chemistry/acidity.py +0 -0
  126. {PySDM-2.79 → pysdm-2.81}/PySDM/attributes/chemistry/concentration.py +0 -0
  127. {PySDM-2.79 → pysdm-2.81}/PySDM/attributes/chemistry/hydrogen_ion_concentration.py +0 -0
  128. {PySDM-2.79 → pysdm-2.81}/PySDM/attributes/ice/__init__.py +0 -0
  129. {PySDM-2.79 → pysdm-2.81}/PySDM/attributes/ice/freezing_temperature.py +0 -0
  130. {PySDM-2.79 → pysdm-2.81}/PySDM/attributes/ice/immersed_surface_area.py +0 -0
  131. {PySDM-2.79 → pysdm-2.81}/PySDM/attributes/impl/__init__.py +0 -0
  132. {PySDM-2.79 → pysdm-2.81}/PySDM/attributes/impl/attribute.py +0 -0
  133. {PySDM-2.79 → pysdm-2.81}/PySDM/attributes/impl/attribute_registry.py +0 -0
  134. {PySDM-2.79 → pysdm-2.81}/PySDM/attributes/impl/base_attribute.py +0 -0
  135. {PySDM-2.79 → pysdm-2.81}/PySDM/attributes/impl/cell_attribute.py +0 -0
  136. {PySDM-2.79 → pysdm-2.81}/PySDM/attributes/impl/derived_attribute.py +0 -0
  137. {PySDM-2.79 → pysdm-2.81}/PySDM/attributes/impl/dummy_attribute.py +0 -0
  138. {PySDM-2.79 → pysdm-2.81}/PySDM/attributes/impl/extensive_attribute.py +0 -0
  139. {PySDM-2.79 → pysdm-2.81}/PySDM/attributes/impl/intensive_attribute.py +0 -0
  140. {PySDM-2.79 → pysdm-2.81}/PySDM/attributes/impl/maximum_attribute.py +0 -0
  141. {PySDM-2.79 → pysdm-2.81}/PySDM/attributes/impl/mole_amount.py +0 -0
  142. {PySDM-2.79 → pysdm-2.81}/PySDM/attributes/isotopes/__init__.py +0 -0
  143. {PySDM-2.79 → pysdm-2.81}/PySDM/attributes/isotopes/delta.py +0 -0
  144. {PySDM-2.79 → pysdm-2.81}/PySDM/attributes/isotopes/moles.py +0 -0
  145. {PySDM-2.79 → pysdm-2.81}/PySDM/attributes/numerics/__init__.py +0 -0
  146. {PySDM-2.79 → pysdm-2.81}/PySDM/attributes/numerics/cell_id.py +0 -0
  147. {PySDM-2.79 → pysdm-2.81}/PySDM/attributes/numerics/cell_origin.py +0 -0
  148. {PySDM-2.79 → pysdm-2.81}/PySDM/attributes/numerics/position_in_cell.py +0 -0
  149. {PySDM-2.79 → pysdm-2.81}/PySDM/attributes/physics/__init__.py +0 -0
  150. {PySDM-2.79 → pysdm-2.81}/PySDM/attributes/physics/area.py +0 -0
  151. {PySDM-2.79 → pysdm-2.81}/PySDM/attributes/physics/critical_supersaturation.py +0 -0
  152. {PySDM-2.79 → pysdm-2.81}/PySDM/attributes/physics/critical_volume.py +0 -0
  153. {PySDM-2.79 → pysdm-2.81}/PySDM/attributes/physics/dry_radius.py +0 -0
  154. {PySDM-2.79 → pysdm-2.81}/PySDM/attributes/physics/dry_volume.py +0 -0
  155. {PySDM-2.79 → pysdm-2.81}/PySDM/attributes/physics/equilibrium_supersaturation.py +0 -0
  156. {PySDM-2.79 → pysdm-2.81}/PySDM/attributes/physics/heat.py +0 -0
  157. {PySDM-2.79 → pysdm-2.81}/PySDM/attributes/physics/hygroscopicity.py +0 -0
  158. {PySDM-2.79 → pysdm-2.81}/PySDM/attributes/physics/multiplicity.py +0 -0
  159. {PySDM-2.79 → pysdm-2.81}/PySDM/attributes/physics/radius.py +0 -0
  160. {PySDM-2.79 → pysdm-2.81}/PySDM/attributes/physics/relative_fall_velocity.py +0 -0
  161. {PySDM-2.79 → pysdm-2.81}/PySDM/attributes/physics/reynolds_number.py +0 -0
  162. {PySDM-2.79 → pysdm-2.81}/PySDM/attributes/physics/temperature.py +0 -0
  163. {PySDM-2.79 → pysdm-2.81}/PySDM/attributes/physics/terminal_velocity.py +0 -0
  164. {PySDM-2.79 → pysdm-2.81}/PySDM/attributes/physics/volume.py +0 -0
  165. {PySDM-2.79 → pysdm-2.81}/PySDM/attributes/physics/water_mass.py +0 -0
  166. {PySDM-2.79 → pysdm-2.81}/PySDM/backends/__init__.py +0 -0
  167. {PySDM-2.79 → pysdm-2.81}/PySDM/backends/impl_common/__init__.py +0 -0
  168. {PySDM-2.79 → pysdm-2.81}/PySDM/backends/impl_common/backend_methods.py +0 -0
  169. {PySDM-2.79 → pysdm-2.81}/PySDM/backends/impl_common/freezing_attributes.py +0 -0
  170. {PySDM-2.79 → pysdm-2.81}/PySDM/backends/impl_common/index.py +0 -0
  171. {PySDM-2.79 → pysdm-2.81}/PySDM/backends/impl_common/indexed_storage.py +0 -0
  172. {PySDM-2.79 → pysdm-2.81}/PySDM/backends/impl_common/pair_indicator.py +0 -0
  173. {PySDM-2.79 → pysdm-2.81}/PySDM/backends/impl_common/pairwise_storage.py +0 -0
  174. {PySDM-2.79 → pysdm-2.81}/PySDM/backends/impl_common/random_common.py +0 -0
  175. {PySDM-2.79 → pysdm-2.81}/PySDM/backends/impl_common/storage_utils.py +0 -0
  176. {PySDM-2.79 → pysdm-2.81}/PySDM/backends/impl_numba/__init__.py +0 -0
  177. {PySDM-2.79 → pysdm-2.81}/PySDM/backends/impl_numba/atomic_operations.py +0 -0
  178. {PySDM-2.79 → pysdm-2.81}/PySDM/backends/impl_numba/conf.py +0 -0
  179. {PySDM-2.79 → pysdm-2.81}/PySDM/backends/impl_numba/methods/__init__.py +0 -0
  180. {PySDM-2.79 → pysdm-2.81}/PySDM/backends/impl_numba/methods/chemistry_methods.py +0 -0
  181. {PySDM-2.79 → pysdm-2.81}/PySDM/backends/impl_numba/methods/collisions_methods.py +0 -0
  182. {PySDM-2.79 → pysdm-2.81}/PySDM/backends/impl_numba/methods/condensation_methods.py +0 -0
  183. {PySDM-2.79 → pysdm-2.81}/PySDM/backends/impl_numba/methods/displacement_methods.py +0 -0
  184. {PySDM-2.79 → pysdm-2.81}/PySDM/backends/impl_numba/methods/fragmentation_methods.py +0 -0
  185. {PySDM-2.79 → pysdm-2.81}/PySDM/backends/impl_numba/methods/freezing_methods.py +0 -0
  186. {PySDM-2.79 → pysdm-2.81}/PySDM/backends/impl_numba/methods/index_methods.py +0 -0
  187. {PySDM-2.79 → pysdm-2.81}/PySDM/backends/impl_numba/methods/isotope_methods.py +0 -0
  188. {PySDM-2.79 → pysdm-2.81}/PySDM/backends/impl_numba/methods/moments_methods.py +0 -0
  189. {PySDM-2.79 → pysdm-2.81}/PySDM/backends/impl_numba/methods/pair_methods.py +0 -0
  190. {PySDM-2.79 → pysdm-2.81}/PySDM/backends/impl_numba/methods/physics_methods.py +0 -0
  191. {PySDM-2.79 → pysdm-2.81}/PySDM/backends/impl_numba/methods/seeding_methods.py +0 -0
  192. {PySDM-2.79 → pysdm-2.81}/PySDM/backends/impl_numba/methods/terminal_velocity_methods.py +0 -0
  193. {PySDM-2.79 → pysdm-2.81}/PySDM/backends/impl_numba/random.py +0 -0
  194. {PySDM-2.79 → pysdm-2.81}/PySDM/backends/impl_numba/storage.py +0 -0
  195. {PySDM-2.79 → pysdm-2.81}/PySDM/backends/impl_numba/storage_impl.py +0 -0
  196. {PySDM-2.79 → pysdm-2.81}/PySDM/backends/impl_numba/test_helpers/__init__.py +0 -0
  197. {PySDM-2.79 → pysdm-2.81}/PySDM/backends/impl_numba/test_helpers/scipy_ode_condensation_solver.py +0 -0
  198. {PySDM-2.79 → pysdm-2.81}/PySDM/backends/impl_numba/toms748.py +0 -0
  199. {PySDM-2.79 → pysdm-2.81}/PySDM/backends/impl_numba/warnings.py +0 -0
  200. {PySDM-2.79 → pysdm-2.81}/PySDM/backends/impl_thrust_rtc/__init__.py +0 -0
  201. {PySDM-2.79 → pysdm-2.81}/PySDM/backends/impl_thrust_rtc/bisection.py +0 -0
  202. {PySDM-2.79 → pysdm-2.81}/PySDM/backends/impl_thrust_rtc/conf.py +0 -0
  203. {PySDM-2.79 → pysdm-2.81}/PySDM/backends/impl_thrust_rtc/methods/__init__.py +0 -0
  204. {PySDM-2.79 → pysdm-2.81}/PySDM/backends/impl_thrust_rtc/methods/collisions_methods.py +0 -0
  205. {PySDM-2.79 → pysdm-2.81}/PySDM/backends/impl_thrust_rtc/methods/condensation_methods.py +0 -0
  206. {PySDM-2.79 → pysdm-2.81}/PySDM/backends/impl_thrust_rtc/methods/displacement_methods.py +0 -0
  207. {PySDM-2.79 → pysdm-2.81}/PySDM/backends/impl_thrust_rtc/methods/freezing_methods.py +0 -0
  208. {PySDM-2.79 → pysdm-2.81}/PySDM/backends/impl_thrust_rtc/methods/index_methods.py +0 -0
  209. {PySDM-2.79 → pysdm-2.81}/PySDM/backends/impl_thrust_rtc/methods/isotope_methods.py +0 -0
  210. {PySDM-2.79 → pysdm-2.81}/PySDM/backends/impl_thrust_rtc/methods/moments_methods.py +0 -0
  211. {PySDM-2.79 → pysdm-2.81}/PySDM/backends/impl_thrust_rtc/methods/pair_methods.py +0 -0
  212. {PySDM-2.79 → pysdm-2.81}/PySDM/backends/impl_thrust_rtc/methods/physics_methods.py +0 -0
  213. {PySDM-2.79 → pysdm-2.81}/PySDM/backends/impl_thrust_rtc/methods/terminal_velocity_methods.py +0 -0
  214. {PySDM-2.79 → pysdm-2.81}/PySDM/backends/impl_thrust_rtc/methods/thrust_rtc_backend_methods.py +0 -0
  215. {PySDM-2.79 → pysdm-2.81}/PySDM/backends/impl_thrust_rtc/nice_thrust.py +0 -0
  216. {PySDM-2.79 → pysdm-2.81}/PySDM/backends/impl_thrust_rtc/random.py +0 -0
  217. {PySDM-2.79 → pysdm-2.81}/PySDM/backends/impl_thrust_rtc/storage.py +0 -0
  218. {PySDM-2.79 → pysdm-2.81}/PySDM/backends/impl_thrust_rtc/test_helpers/__init__.py +0 -0
  219. {PySDM-2.79 → pysdm-2.81}/PySDM/backends/impl_thrust_rtc/test_helpers/cpp2python.py +0 -0
  220. {PySDM-2.79 → pysdm-2.81}/PySDM/backends/impl_thrust_rtc/test_helpers/fake_thrust_rtc.py +0 -0
  221. {PySDM-2.79 → pysdm-2.81}/PySDM/backends/impl_thrust_rtc/test_helpers/flag.py +0 -0
  222. {PySDM-2.79 → pysdm-2.81}/PySDM/backends/numba.py +0 -0
  223. {PySDM-2.79 → pysdm-2.81}/PySDM/backends/thrust_rtc.py +0 -0
  224. {PySDM-2.79 → pysdm-2.81}/PySDM/builder.py +0 -0
  225. {PySDM-2.79 → pysdm-2.81}/PySDM/dynamics/__init__.py +0 -0
  226. {PySDM-2.79 → pysdm-2.81}/PySDM/dynamics/ambient_thermodynamics.py +0 -0
  227. {PySDM-2.79 → pysdm-2.81}/PySDM/dynamics/aqueous_chemistry.py +0 -0
  228. {PySDM-2.79 → pysdm-2.81}/PySDM/dynamics/collisions/__init__.py +0 -0
  229. {PySDM-2.79 → pysdm-2.81}/PySDM/dynamics/collisions/breakup_efficiencies/__init__.py +0 -0
  230. {PySDM-2.79 → pysdm-2.81}/PySDM/dynamics/collisions/breakup_efficiencies/constEb.py +0 -0
  231. {PySDM-2.79 → pysdm-2.81}/PySDM/dynamics/collisions/breakup_fragmentations/__init__.py +0 -0
  232. {PySDM-2.79 → pysdm-2.81}/PySDM/dynamics/collisions/breakup_fragmentations/always_n.py +0 -0
  233. {PySDM-2.79 → pysdm-2.81}/PySDM/dynamics/collisions/breakup_fragmentations/constant_mass.py +0 -0
  234. {PySDM-2.79 → pysdm-2.81}/PySDM/dynamics/collisions/breakup_fragmentations/expon_frag.py +0 -0
  235. {PySDM-2.79 → pysdm-2.81}/PySDM/dynamics/collisions/breakup_fragmentations/exponential.py +0 -0
  236. {PySDM-2.79 → pysdm-2.81}/PySDM/dynamics/collisions/breakup_fragmentations/feingold1988.py +0 -0
  237. {PySDM-2.79 → pysdm-2.81}/PySDM/dynamics/collisions/breakup_fragmentations/gaussian.py +0 -0
  238. {PySDM-2.79 → pysdm-2.81}/PySDM/dynamics/collisions/breakup_fragmentations/impl/__init__.py +0 -0
  239. {PySDM-2.79 → pysdm-2.81}/PySDM/dynamics/collisions/breakup_fragmentations/impl/volume_based.py +0 -0
  240. {PySDM-2.79 → pysdm-2.81}/PySDM/dynamics/collisions/breakup_fragmentations/lowlist82.py +0 -0
  241. {PySDM-2.79 → pysdm-2.81}/PySDM/dynamics/collisions/breakup_fragmentations/slams.py +0 -0
  242. {PySDM-2.79 → pysdm-2.81}/PySDM/dynamics/collisions/breakup_fragmentations/straub2010.py +0 -0
  243. {PySDM-2.79 → pysdm-2.81}/PySDM/dynamics/collisions/coalescence_efficiencies/__init__.py +0 -0
  244. {PySDM-2.79 → pysdm-2.81}/PySDM/dynamics/collisions/coalescence_efficiencies/_gravitational.py +0 -0
  245. {PySDM-2.79 → pysdm-2.81}/PySDM/dynamics/collisions/coalescence_efficiencies/_parameterized.py +0 -0
  246. {PySDM-2.79 → pysdm-2.81}/PySDM/dynamics/collisions/coalescence_efficiencies/berry1967.py +0 -0
  247. {PySDM-2.79 → pysdm-2.81}/PySDM/dynamics/collisions/coalescence_efficiencies/constEc.py +0 -0
  248. {PySDM-2.79 → pysdm-2.81}/PySDM/dynamics/collisions/coalescence_efficiencies/lowlist1982.py +0 -0
  249. {PySDM-2.79 → pysdm-2.81}/PySDM/dynamics/collisions/coalescence_efficiencies/specified_eff.py +0 -0
  250. {PySDM-2.79 → pysdm-2.81}/PySDM/dynamics/collisions/coalescence_efficiencies/straub2010.py +0 -0
  251. {PySDM-2.79 → pysdm-2.81}/PySDM/dynamics/collisions/collision.py +0 -0
  252. {PySDM-2.79 → pysdm-2.81}/PySDM/dynamics/collisions/collision_kernels/__init__.py +0 -0
  253. {PySDM-2.79 → pysdm-2.81}/PySDM/dynamics/collisions/collision_kernels/constantK.py +0 -0
  254. {PySDM-2.79 → pysdm-2.81}/PySDM/dynamics/collisions/collision_kernels/electric.py +0 -0
  255. {PySDM-2.79 → pysdm-2.81}/PySDM/dynamics/collisions/collision_kernels/geometric.py +0 -0
  256. {PySDM-2.79 → pysdm-2.81}/PySDM/dynamics/collisions/collision_kernels/golovin.py +0 -0
  257. {PySDM-2.79 → pysdm-2.81}/PySDM/dynamics/collisions/collision_kernels/hydrodynamic.py +0 -0
  258. {PySDM-2.79 → pysdm-2.81}/PySDM/dynamics/collisions/collision_kernels/impl/__init__.py +0 -0
  259. {PySDM-2.79 → pysdm-2.81}/PySDM/dynamics/collisions/collision_kernels/impl/gravitational.py +0 -0
  260. {PySDM-2.79 → pysdm-2.81}/PySDM/dynamics/collisions/collision_kernels/impl/parameterized.py +0 -0
  261. {PySDM-2.79 → pysdm-2.81}/PySDM/dynamics/collisions/collision_kernels/linear.py +0 -0
  262. {PySDM-2.79 → pysdm-2.81}/PySDM/dynamics/collisions/collision_kernels/simple_geometric.py +0 -0
  263. {PySDM-2.79 → pysdm-2.81}/PySDM/dynamics/condensation.py +0 -0
  264. {PySDM-2.79 → pysdm-2.81}/PySDM/dynamics/displacement.py +0 -0
  265. {PySDM-2.79 → pysdm-2.81}/PySDM/dynamics/eulerian_advection.py +0 -0
  266. {PySDM-2.79 → pysdm-2.81}/PySDM/dynamics/freezing.py +0 -0
  267. {PySDM-2.79 → pysdm-2.81}/PySDM/dynamics/impl/__init__.py +0 -0
  268. {PySDM-2.79 → pysdm-2.81}/PySDM/dynamics/impl/chemistry_utils.py +0 -0
  269. {PySDM-2.79 → pysdm-2.81}/PySDM/dynamics/impl/random_generator_optimizer.py +0 -0
  270. {PySDM-2.79 → pysdm-2.81}/PySDM/dynamics/impl/random_generator_optimizer_nopair.py +0 -0
  271. {PySDM-2.79 → pysdm-2.81}/PySDM/dynamics/impl/register_dynamic.py +0 -0
  272. {PySDM-2.79 → pysdm-2.81}/PySDM/dynamics/isotopic_fractionation.py +0 -0
  273. {PySDM-2.79 → pysdm-2.81}/PySDM/dynamics/relaxed_velocity.py +0 -0
  274. {PySDM-2.79 → pysdm-2.81}/PySDM/dynamics/seeding.py +0 -0
  275. {PySDM-2.79 → pysdm-2.81}/PySDM/dynamics/terminal_velocity/__init__.py +0 -0
  276. {PySDM-2.79 → pysdm-2.81}/PySDM/dynamics/terminal_velocity/gunn_and_kinzer.py +0 -0
  277. {PySDM-2.79 → pysdm-2.81}/PySDM/dynamics/terminal_velocity/power_series.py +0 -0
  278. {PySDM-2.79 → pysdm-2.81}/PySDM/dynamics/terminal_velocity/rogers_and_yau.py +0 -0
  279. {PySDM-2.79 → pysdm-2.81}/PySDM/environments/__init__.py +0 -0
  280. {PySDM-2.79 → pysdm-2.81}/PySDM/environments/box.py +0 -0
  281. {PySDM-2.79 → pysdm-2.81}/PySDM/environments/impl/__init__.py +0 -0
  282. {PySDM-2.79 → pysdm-2.81}/PySDM/environments/impl/moist.py +0 -0
  283. {PySDM-2.79 → pysdm-2.81}/PySDM/environments/impl/register_environment.py +0 -0
  284. {PySDM-2.79 → pysdm-2.81}/PySDM/environments/kinematic_1d.py +0 -0
  285. {PySDM-2.79 → pysdm-2.81}/PySDM/environments/kinematic_2d.py +0 -0
  286. {PySDM-2.79 → pysdm-2.81}/PySDM/environments/parcel.py +0 -0
  287. {PySDM-2.79 → pysdm-2.81}/PySDM/exporters/__init__.py +0 -0
  288. {PySDM-2.79 → pysdm-2.81}/PySDM/exporters/netcdf_exporter.py +0 -0
  289. {PySDM-2.79 → pysdm-2.81}/PySDM/exporters/netcdf_exporter_1d.py +0 -0
  290. {PySDM-2.79 → pysdm-2.81}/PySDM/exporters/vtk_exporter.py +0 -0
  291. {PySDM-2.79 → pysdm-2.81}/PySDM/exporters/vtk_exporter_1d.py +0 -0
  292. {PySDM-2.79 → pysdm-2.81}/PySDM/formulae.py +0 -0
  293. {PySDM-2.79 → pysdm-2.81}/PySDM/impl/__init__.py +0 -0
  294. {PySDM-2.79 → pysdm-2.81}/PySDM/impl/arakawa_c.py +0 -0
  295. {PySDM-2.79 → pysdm-2.81}/PySDM/impl/camel_case.py +0 -0
  296. {PySDM-2.79 → pysdm-2.81}/PySDM/impl/mesh.py +0 -0
  297. {PySDM-2.79 → pysdm-2.81}/PySDM/impl/null_physics_class.py +0 -0
  298. {PySDM-2.79 → pysdm-2.81}/PySDM/impl/particle_attributes.py +0 -0
  299. {PySDM-2.79 → pysdm-2.81}/PySDM/impl/particle_attributes_factory.py +0 -0
  300. {PySDM-2.79 → pysdm-2.81}/PySDM/impl/wall_timer.py +0 -0
  301. {PySDM-2.79 → pysdm-2.81}/PySDM/initialisation/__init__.py +0 -0
  302. {PySDM-2.79 → pysdm-2.81}/PySDM/initialisation/aerosol_composition/__init__.py +0 -0
  303. {PySDM-2.79 → pysdm-2.81}/PySDM/initialisation/aerosol_composition/dry_aerosol.py +0 -0
  304. {PySDM-2.79 → pysdm-2.81}/PySDM/initialisation/discretise_multiplicities.py +0 -0
  305. {PySDM-2.79 → pysdm-2.81}/PySDM/initialisation/equilibrate_wet_radii.py +0 -0
  306. {PySDM-2.79 → pysdm-2.81}/PySDM/initialisation/impl/__init__.py +0 -0
  307. {PySDM-2.79 → pysdm-2.81}/PySDM/initialisation/impl/spectrum.py +0 -0
  308. {PySDM-2.79 → pysdm-2.81}/PySDM/initialisation/init_fall_momenta.py +0 -0
  309. {PySDM-2.79 → pysdm-2.81}/PySDM/initialisation/sampling/__init__.py +0 -0
  310. {PySDM-2.79 → pysdm-2.81}/PySDM/initialisation/sampling/spatial_sampling.py +0 -0
  311. {PySDM-2.79 → pysdm-2.81}/PySDM/initialisation/sampling/spectral_sampling.py +0 -0
  312. {PySDM-2.79 → pysdm-2.81}/PySDM/initialisation/sampling/spectro_glacial_sampling.py +0 -0
  313. {PySDM-2.79 → pysdm-2.81}/PySDM/initialisation/spectra/__init__.py +0 -0
  314. {PySDM-2.79 → pysdm-2.81}/PySDM/initialisation/spectra/exponential.py +0 -0
  315. {PySDM-2.79 → pysdm-2.81}/PySDM/initialisation/spectra/gamma.py +0 -0
  316. {PySDM-2.79 → pysdm-2.81}/PySDM/initialisation/spectra/gaussian.py +0 -0
  317. {PySDM-2.79 → pysdm-2.81}/PySDM/initialisation/spectra/lognormal.py +0 -0
  318. {PySDM-2.79 → pysdm-2.81}/PySDM/initialisation/spectra/sum.py +0 -0
  319. {PySDM-2.79 → pysdm-2.81}/PySDM/initialisation/spectra/top_hat.py +0 -0
  320. {PySDM-2.79 → pysdm-2.81}/PySDM/particulator.py +0 -0
  321. {PySDM-2.79 → pysdm-2.81}/PySDM/physics/__init__.py +0 -0
  322. {PySDM-2.79 → pysdm-2.81}/PySDM/physics/air_dynamic_viscosity/__init__.py +0 -0
  323. {PySDM-2.79 → pysdm-2.81}/PySDM/physics/air_dynamic_viscosity/zografos_et_al_1987.py +0 -0
  324. {PySDM-2.79 → pysdm-2.81}/PySDM/physics/bulk_phase_partitioning/__init__.py +0 -0
  325. {PySDM-2.79 → pysdm-2.81}/PySDM/physics/bulk_phase_partitioning/kaul_et_al_2015.py +0 -0
  326. {PySDM-2.79 → pysdm-2.81}/PySDM/physics/condensation_coordinate/__init__.py +0 -0
  327. {PySDM-2.79 → pysdm-2.81}/PySDM/physics/condensation_coordinate/volume.py +0 -0
  328. {PySDM-2.79 → pysdm-2.81}/PySDM/physics/condensation_coordinate/volume_logarithm.py +0 -0
  329. {PySDM-2.79 → pysdm-2.81}/PySDM/physics/constants.py +0 -0
  330. {PySDM-2.79 → pysdm-2.81}/PySDM/physics/constants_defaults.py +0 -0
  331. {PySDM-2.79 → pysdm-2.81}/PySDM/physics/diffusion_kinetics/__init__.py +0 -0
  332. {PySDM-2.79 → pysdm-2.81}/PySDM/physics/diffusion_kinetics/fuchs_sutugin.py +0 -0
  333. {PySDM-2.79 → pysdm-2.81}/PySDM/physics/diffusion_kinetics/grabowski_et_al_2011.py +0 -0
  334. {PySDM-2.79 → pysdm-2.81}/PySDM/physics/diffusion_kinetics/lowe_et_al_2019.py +0 -0
  335. {PySDM-2.79 → pysdm-2.81}/PySDM/physics/diffusion_kinetics/neglect.py +0 -0
  336. {PySDM-2.79 → pysdm-2.81}/PySDM/physics/diffusion_kinetics/pruppacher_and_klett_2005.py +0 -0
  337. {PySDM-2.79 → pysdm-2.81}/PySDM/physics/diffusion_thermics/__init__.py +0 -0
  338. {PySDM-2.79 → pysdm-2.81}/PySDM/physics/diffusion_thermics/grabowski_et_al_2011.py +0 -0
  339. {PySDM-2.79 → pysdm-2.81}/PySDM/physics/diffusion_thermics/lowe_et_al_2019.py +0 -0
  340. {PySDM-2.79 → pysdm-2.81}/PySDM/physics/diffusion_thermics/neglect.py +0 -0
  341. {PySDM-2.79 → pysdm-2.81}/PySDM/physics/diffusion_thermics/seinfeld_and_pandis_2010.py +0 -0
  342. {PySDM-2.79 → pysdm-2.81}/PySDM/physics/diffusion_thermics/tracy_welch_porter.py +0 -0
  343. {PySDM-2.79 → pysdm-2.81}/PySDM/physics/dimensional_analysis.py +0 -0
  344. {PySDM-2.79 → pysdm-2.81}/PySDM/physics/drop_growth/__init__.py +0 -0
  345. {PySDM-2.79 → pysdm-2.81}/PySDM/physics/drop_growth/mason_1951.py +0 -0
  346. {PySDM-2.79 → pysdm-2.81}/PySDM/physics/drop_growth/mason_1971.py +0 -0
  347. {PySDM-2.79 → pysdm-2.81}/PySDM/physics/fragmentation_function/__init__.py +0 -0
  348. {PySDM-2.79 → pysdm-2.81}/PySDM/physics/fragmentation_function/always_n.py +0 -0
  349. {PySDM-2.79 → pysdm-2.81}/PySDM/physics/fragmentation_function/constant_mass.py +0 -0
  350. {PySDM-2.79 → pysdm-2.81}/PySDM/physics/fragmentation_function/expon_frag.py +0 -0
  351. {PySDM-2.79 → pysdm-2.81}/PySDM/physics/fragmentation_function/exponential.py +0 -0
  352. {PySDM-2.79 → pysdm-2.81}/PySDM/physics/fragmentation_function/feingold1988.py +0 -0
  353. {PySDM-2.79 → pysdm-2.81}/PySDM/physics/fragmentation_function/gaussian.py +0 -0
  354. {PySDM-2.79 → pysdm-2.81}/PySDM/physics/fragmentation_function/lowlist82.py +0 -0
  355. {PySDM-2.79 → pysdm-2.81}/PySDM/physics/fragmentation_function/slams.py +0 -0
  356. {PySDM-2.79 → pysdm-2.81}/PySDM/physics/fragmentation_function/straub2010nf.py +0 -0
  357. {PySDM-2.79 → pysdm-2.81}/PySDM/physics/freezing_temperature_spectrum/__init__.py +0 -0
  358. {PySDM-2.79 → pysdm-2.81}/PySDM/physics/freezing_temperature_spectrum/bigg_1953.py +0 -0
  359. {PySDM-2.79 → pysdm-2.81}/PySDM/physics/freezing_temperature_spectrum/niemand_et_al_2012.py +0 -0
  360. {PySDM-2.79 → pysdm-2.81}/PySDM/physics/freezing_temperature_spectrum/null.py +0 -0
  361. {PySDM-2.79 → pysdm-2.81}/PySDM/physics/heterogeneous_ice_nucleation_rate/__init__.py +0 -0
  362. {PySDM-2.79 → pysdm-2.81}/PySDM/physics/heterogeneous_ice_nucleation_rate/abifm.py +0 -0
  363. {PySDM-2.79 → pysdm-2.81}/PySDM/physics/heterogeneous_ice_nucleation_rate/constant.py +0 -0
  364. {PySDM-2.79 → pysdm-2.81}/PySDM/physics/heterogeneous_ice_nucleation_rate/null.py +0 -0
  365. {PySDM-2.79 → pysdm-2.81}/PySDM/physics/hydrostatics/__init__.py +0 -0
  366. {PySDM-2.79 → pysdm-2.81}/PySDM/physics/hydrostatics/default.py +0 -0
  367. {PySDM-2.79 → pysdm-2.81}/PySDM/physics/hygroscopicity/__init__.py +0 -0
  368. {PySDM-2.79 → pysdm-2.81}/PySDM/physics/hygroscopicity/kappa_koehler.py +0 -0
  369. {PySDM-2.79 → pysdm-2.81}/PySDM/physics/hygroscopicity/kappa_koehler_leading_terms.py +0 -0
  370. {PySDM-2.79 → pysdm-2.81}/PySDM/physics/impl/__init__.py +0 -0
  371. {PySDM-2.79 → pysdm-2.81}/PySDM/physics/impl/fake_unit_registry.py +0 -0
  372. {PySDM-2.79 → pysdm-2.81}/PySDM/physics/impl/flag.py +0 -0
  373. {PySDM-2.79 → pysdm-2.81}/PySDM/physics/isotope_diffusivity_ratios/__init__.py +0 -0
  374. {PySDM-2.79 → pysdm-2.81}/PySDM/physics/isotope_diffusivity_ratios/grahams_law.py +0 -0
  375. {PySDM-2.79 → pysdm-2.81}/PySDM/physics/isotope_diffusivity_ratios/hellmann_and_harvey_2020.py +0 -0
  376. {PySDM-2.79 → pysdm-2.81}/PySDM/physics/isotope_diffusivity_ratios/stewart_1975.py +0 -0
  377. {PySDM-2.79 → pysdm-2.81}/PySDM/physics/isotope_equilibrium_fractionation_factors/__init__.py +0 -0
  378. {PySDM-2.79 → pysdm-2.81}/PySDM/physics/isotope_equilibrium_fractionation_factors/barkan_and_luz_2005.py +0 -0
  379. {PySDM-2.79 → pysdm-2.81}/PySDM/physics/isotope_equilibrium_fractionation_factors/ellehoj_et_al_2013.py +0 -0
  380. {PySDM-2.79 → pysdm-2.81}/PySDM/physics/isotope_equilibrium_fractionation_factors/horita_and_wesolowski_1994.py +0 -0
  381. {PySDM-2.79 → pysdm-2.81}/PySDM/physics/isotope_equilibrium_fractionation_factors/lamb_et_al_2017.py +0 -0
  382. {PySDM-2.79 → pysdm-2.81}/PySDM/physics/isotope_equilibrium_fractionation_factors/majoube_1970.py +0 -0
  383. {PySDM-2.79 → pysdm-2.81}/PySDM/physics/isotope_equilibrium_fractionation_factors/majoube_1971.py +0 -0
  384. {PySDM-2.79 → pysdm-2.81}/PySDM/physics/isotope_equilibrium_fractionation_factors/merlivat_and_nief_1967.py +0 -0
  385. {PySDM-2.79 → pysdm-2.81}/PySDM/physics/isotope_equilibrium_fractionation_factors/van_hook_1968.py +0 -0
  386. {PySDM-2.79 → pysdm-2.81}/PySDM/physics/isotope_meteoric_water_line_excess/__init__.py +0 -0
  387. {PySDM-2.79 → pysdm-2.81}/PySDM/physics/isotope_meteoric_water_line_excess/barkan_and_luz_2007.py +0 -0
  388. {PySDM-2.79 → pysdm-2.81}/PySDM/physics/isotope_meteoric_water_line_excess/dansgaard_1964.py +0 -0
  389. {PySDM-2.79 → pysdm-2.81}/PySDM/physics/isotope_ratio_evolution/__init__.py +0 -0
  390. {PySDM-2.79 → pysdm-2.81}/PySDM/physics/isotope_ratio_evolution/gedzelman_and_arnold_1994.py +0 -0
  391. {PySDM-2.79 → pysdm-2.81}/PySDM/physics/isotope_ratio_evolution/merlivat_and_jouzel_1979.py +0 -0
  392. {PySDM-2.79 → pysdm-2.81}/PySDM/physics/isotope_ratio_evolution/rayleigh_distillation.py +0 -0
  393. {PySDM-2.79 → pysdm-2.81}/PySDM/physics/isotope_relaxation_timescale/__init__.py +0 -0
  394. {PySDM-2.79 → pysdm-2.81}/PySDM/physics/isotope_relaxation_timescale/miyake_et_al_1968.py +0 -0
  395. {PySDM-2.79 → pysdm-2.81}/PySDM/physics/latent_heat/__init__.py +0 -0
  396. {PySDM-2.79 → pysdm-2.81}/PySDM/physics/latent_heat/constant.py +0 -0
  397. {PySDM-2.79 → pysdm-2.81}/PySDM/physics/latent_heat/kirchhoff.py +0 -0
  398. {PySDM-2.79 → pysdm-2.81}/PySDM/physics/latent_heat/lowe2019.py +0 -0
  399. {PySDM-2.79 → pysdm-2.81}/PySDM/physics/latent_heat/seinfeld_and_pandis_2010.py +0 -0
  400. {PySDM-2.79 → pysdm-2.81}/PySDM/physics/optical_albedo/__init__.py +0 -0
  401. {PySDM-2.79 → pysdm-2.81}/PySDM/physics/optical_albedo/bohren1987.py +0 -0
  402. {PySDM-2.79 → pysdm-2.81}/PySDM/physics/optical_depth/__init__.py +0 -0
  403. {PySDM-2.79 → pysdm-2.81}/PySDM/physics/optical_depth/stephens_1978.py +0 -0
  404. {PySDM-2.79 → pysdm-2.81}/PySDM/physics/particle_advection/__init__.py +0 -0
  405. {PySDM-2.79 → pysdm-2.81}/PySDM/physics/particle_advection/explicit_in_space.py +0 -0
  406. {PySDM-2.79 → pysdm-2.81}/PySDM/physics/particle_advection/implicit_in_space.py +0 -0
  407. {PySDM-2.79 → pysdm-2.81}/PySDM/physics/particle_shape_and_density/__init__.py +0 -0
  408. {PySDM-2.79 → pysdm-2.81}/PySDM/physics/particle_shape_and_density/liquid_spheres.py +0 -0
  409. {PySDM-2.79 → pysdm-2.81}/PySDM/physics/particle_shape_and_density/mixed_phase_spheres.py +0 -0
  410. {PySDM-2.79 → pysdm-2.81}/PySDM/physics/particle_shape_and_density/porous_spheroids.py +0 -0
  411. {PySDM-2.79 → pysdm-2.81}/PySDM/physics/saturation_vapour_pressure/__init__.py +0 -0
  412. {PySDM-2.79 → pysdm-2.81}/PySDM/physics/saturation_vapour_pressure/august_roche_magnus.py +0 -0
  413. {PySDM-2.79 → pysdm-2.81}/PySDM/physics/saturation_vapour_pressure/bolton_1980.py +0 -0
  414. {PySDM-2.79 → pysdm-2.81}/PySDM/physics/saturation_vapour_pressure/flatau_walko_cotton.py +0 -0
  415. {PySDM-2.79 → pysdm-2.81}/PySDM/physics/saturation_vapour_pressure/lowe1977.py +0 -0
  416. {PySDM-2.79 → pysdm-2.81}/PySDM/physics/saturation_vapour_pressure/murphy_koop_2005.py +0 -0
  417. {PySDM-2.79 → pysdm-2.81}/PySDM/physics/saturation_vapour_pressure/wexler_1976.py +0 -0
  418. {PySDM-2.79 → pysdm-2.81}/PySDM/physics/state_variable_triplet/__init__.py +0 -0
  419. {PySDM-2.79 → pysdm-2.81}/PySDM/physics/state_variable_triplet/libcloudphplusplus.py +0 -0
  420. {PySDM-2.79 → pysdm-2.81}/PySDM/physics/surface_tension/__init__.py +0 -0
  421. {PySDM-2.79 → pysdm-2.81}/PySDM/physics/surface_tension/compressed_film_ovadnevaite.py +0 -0
  422. {PySDM-2.79 → pysdm-2.81}/PySDM/physics/surface_tension/compressed_film_ruehl.py +0 -0
  423. {PySDM-2.79 → pysdm-2.81}/PySDM/physics/surface_tension/constant.py +0 -0
  424. {PySDM-2.79 → pysdm-2.81}/PySDM/physics/surface_tension/szyszkowski_langmuir.py +0 -0
  425. {PySDM-2.79 → pysdm-2.81}/PySDM/physics/terminal_velocity/__init__.py +0 -0
  426. {PySDM-2.79 → pysdm-2.81}/PySDM/physics/terminal_velocity/gunn_kinzer_1949.py +0 -0
  427. {PySDM-2.79 → pysdm-2.81}/PySDM/physics/terminal_velocity/power_series.py +0 -0
  428. {PySDM-2.79 → pysdm-2.81}/PySDM/physics/terminal_velocity/rogers_yau.py +0 -0
  429. {PySDM-2.79 → pysdm-2.81}/PySDM/physics/trivia.py +0 -0
  430. {PySDM-2.79 → pysdm-2.81}/PySDM/physics/ventilation/__init__.py +0 -0
  431. {PySDM-2.79 → pysdm-2.81}/PySDM/physics/ventilation/froessling_1938.py +0 -0
  432. {PySDM-2.79 → pysdm-2.81}/PySDM/physics/ventilation/neglect.py +0 -0
  433. {PySDM-2.79 → pysdm-2.81}/PySDM/physics/ventilation/pruppacher_rasmussen_1979.py +0 -0
  434. {PySDM-2.79 → pysdm-2.81}/PySDM/products/__init__.py +0 -0
  435. {PySDM-2.79 → pysdm-2.81}/PySDM/products/ambient_thermodynamics/__init__.py +0 -0
  436. {PySDM-2.79 → pysdm-2.81}/PySDM/products/ambient_thermodynamics/ambient_dry_air_density.py +0 -0
  437. {PySDM-2.79 → pysdm-2.81}/PySDM/products/ambient_thermodynamics/ambient_dry_air_potential_temperature.py +0 -0
  438. {PySDM-2.79 → pysdm-2.81}/PySDM/products/ambient_thermodynamics/ambient_pressure.py +0 -0
  439. {PySDM-2.79 → pysdm-2.81}/PySDM/products/ambient_thermodynamics/ambient_relative_humidity.py +0 -0
  440. {PySDM-2.79 → pysdm-2.81}/PySDM/products/ambient_thermodynamics/ambient_temperature.py +0 -0
  441. {PySDM-2.79 → pysdm-2.81}/PySDM/products/ambient_thermodynamics/ambient_water_vapour_mixing_ratio.py +0 -0
  442. {PySDM-2.79 → pysdm-2.81}/PySDM/products/aqueous_chemistry/__init__.py +0 -0
  443. {PySDM-2.79 → pysdm-2.81}/PySDM/products/aqueous_chemistry/acidity.py +0 -0
  444. {PySDM-2.79 → pysdm-2.81}/PySDM/products/aqueous_chemistry/aqueous_mass_spectrum.py +0 -0
  445. {PySDM-2.79 → pysdm-2.81}/PySDM/products/aqueous_chemistry/aqueous_mole_fraction.py +0 -0
  446. {PySDM-2.79 → pysdm-2.81}/PySDM/products/aqueous_chemistry/gaseous_mole_fraction.py +0 -0
  447. {PySDM-2.79 → pysdm-2.81}/PySDM/products/aqueous_chemistry/total_dry_mass_mixing_ratio.py +0 -0
  448. {PySDM-2.79 → pysdm-2.81}/PySDM/products/collision/__init__.py +0 -0
  449. {PySDM-2.79 → pysdm-2.81}/PySDM/products/collision/collision_rates.py +0 -0
  450. {PySDM-2.79 → pysdm-2.81}/PySDM/products/collision/collision_timestep_mean.py +0 -0
  451. {PySDM-2.79 → pysdm-2.81}/PySDM/products/collision/collision_timestep_min.py +0 -0
  452. {PySDM-2.79 → pysdm-2.81}/PySDM/products/condensation/__init__.py +0 -0
  453. {PySDM-2.79 → pysdm-2.81}/PySDM/products/condensation/activable_fraction.py +0 -0
  454. {PySDM-2.79 → pysdm-2.81}/PySDM/products/condensation/condensation_timestep.py +0 -0
  455. {PySDM-2.79 → pysdm-2.81}/PySDM/products/condensation/event_rates.py +0 -0
  456. {PySDM-2.79 → pysdm-2.81}/PySDM/products/condensation/peak_supersaturation.py +0 -0
  457. {PySDM-2.79 → pysdm-2.81}/PySDM/products/displacement/__init__.py +0 -0
  458. {PySDM-2.79 → pysdm-2.81}/PySDM/products/displacement/averaged_terminal_velocity.py +0 -0
  459. {PySDM-2.79 → pysdm-2.81}/PySDM/products/displacement/flow_velocity_component.py +0 -0
  460. {PySDM-2.79 → pysdm-2.81}/PySDM/products/displacement/max_courant_number.py +0 -0
  461. {PySDM-2.79 → pysdm-2.81}/PySDM/products/displacement/surface_precipitation.py +0 -0
  462. {PySDM-2.79 → pysdm-2.81}/PySDM/products/freezing/__init__.py +0 -0
  463. {PySDM-2.79 → pysdm-2.81}/PySDM/products/freezing/cooling_rate.py +0 -0
  464. {PySDM-2.79 → pysdm-2.81}/PySDM/products/freezing/freezable_specific_concentration.py +0 -0
  465. {PySDM-2.79 → pysdm-2.81}/PySDM/products/freezing/frozen_particle_concentration.py +0 -0
  466. {PySDM-2.79 → pysdm-2.81}/PySDM/products/freezing/ice_nuclei_concentration.py +0 -0
  467. {PySDM-2.79 → pysdm-2.81}/PySDM/products/freezing/total_unfrozen_immersed_surface_area.py +0 -0
  468. {PySDM-2.79 → pysdm-2.81}/PySDM/products/housekeeping/__init__.py +0 -0
  469. {PySDM-2.79 → pysdm-2.81}/PySDM/products/housekeeping/dynamic_wall_time.py +0 -0
  470. {PySDM-2.79 → pysdm-2.81}/PySDM/products/housekeeping/super_droplet_count_per_gridbox.py +0 -0
  471. {PySDM-2.79 → pysdm-2.81}/PySDM/products/housekeeping/time.py +0 -0
  472. {PySDM-2.79 → pysdm-2.81}/PySDM/products/housekeeping/timers.py +0 -0
  473. {PySDM-2.79 → pysdm-2.81}/PySDM/products/impl/__init__.py +0 -0
  474. {PySDM-2.79 → pysdm-2.81}/PySDM/products/impl/activation_filtered_product.py +0 -0
  475. {PySDM-2.79 → pysdm-2.81}/PySDM/products/impl/concentration_product.py +0 -0
  476. {PySDM-2.79 → pysdm-2.81}/PySDM/products/impl/moist_environment_product.py +0 -0
  477. {PySDM-2.79 → pysdm-2.81}/PySDM/products/impl/moment_product.py +0 -0
  478. {PySDM-2.79 → pysdm-2.81}/PySDM/products/impl/product.py +0 -0
  479. {PySDM-2.79 → pysdm-2.81}/PySDM/products/impl/rate_product.py +0 -0
  480. {PySDM-2.79 → pysdm-2.81}/PySDM/products/impl/register_product.py +0 -0
  481. {PySDM-2.79 → pysdm-2.81}/PySDM/products/impl/spectrum_moment_product.py +0 -0
  482. {PySDM-2.79 → pysdm-2.81}/PySDM/products/optical/__init__.py +0 -0
  483. {PySDM-2.79 → pysdm-2.81}/PySDM/products/optical/cloud_albedo.py +0 -0
  484. {PySDM-2.79 → pysdm-2.81}/PySDM/products/optical/cloud_optical_depth.py +0 -0
  485. {PySDM-2.79 → pysdm-2.81}/PySDM/products/parcel/__init__.py +0 -0
  486. {PySDM-2.79 → pysdm-2.81}/PySDM/products/parcel/cloud_water_path.py +0 -0
  487. {PySDM-2.79 → pysdm-2.81}/PySDM/products/parcel/parcel_displacement.py +0 -0
  488. {PySDM-2.79 → pysdm-2.81}/PySDM/products/size_spectral/__init__.py +0 -0
  489. {PySDM-2.79 → pysdm-2.81}/PySDM/products/size_spectral/arbitrary_moment.py +0 -0
  490. {PySDM-2.79 → pysdm-2.81}/PySDM/products/size_spectral/cloud_water_content.py +0 -0
  491. {PySDM-2.79 → pysdm-2.81}/PySDM/products/size_spectral/effective_radius.py +0 -0
  492. {PySDM-2.79 → pysdm-2.81}/PySDM/products/size_spectral/effective_radius_activated.py +0 -0
  493. {PySDM-2.79 → pysdm-2.81}/PySDM/products/size_spectral/mean_radius.py +0 -0
  494. {PySDM-2.79 → pysdm-2.81}/PySDM/products/size_spectral/mean_radius_activated.py +0 -0
  495. {PySDM-2.79 → pysdm-2.81}/PySDM/products/size_spectral/mean_volume_radius.py +0 -0
  496. {PySDM-2.79 → pysdm-2.81}/PySDM/products/size_spectral/number_size_spectrum.py +0 -0
  497. {PySDM-2.79 → pysdm-2.81}/PySDM/products/size_spectral/particle_concentration.py +0 -0
  498. {PySDM-2.79 → pysdm-2.81}/PySDM/products/size_spectral/particle_concentration_activated.py +0 -0
  499. {PySDM-2.79 → pysdm-2.81}/PySDM/products/size_spectral/particle_size_spectrum.py +0 -0
  500. {PySDM-2.79 → pysdm-2.81}/PySDM/products/size_spectral/particle_volume_versus_radius_logarithm_spectrum.py +0 -0
  501. {PySDM-2.79 → pysdm-2.81}/PySDM/products/size_spectral/radius_binned_number_averaged_terminal_velocity.py +0 -0
  502. {PySDM-2.79 → pysdm-2.81}/PySDM/products/size_spectral/size_standard_deviation.py +0 -0
  503. {PySDM-2.79 → pysdm-2.81}/PySDM/products/size_spectral/total_particle_concentration.py +0 -0
  504. {PySDM-2.79 → pysdm-2.81}/PySDM/products/size_spectral/total_particle_specific_concentration.py +0 -0
  505. {PySDM-2.79 → pysdm-2.81}/PySDM/products/size_spectral/water_mixing_ratio.py +0 -0
  506. {PySDM-2.79 → pysdm-2.81}/PySDM.egg-info/dependency_links.txt +0 -0
  507. {PySDM-2.79 → pysdm-2.81}/PySDM.egg-info/top_level.txt +0 -0
  508. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Abade_and_Albuquerque_2024/fig_2.ipynb +0 -0
  509. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Abade_and_Albuquerque_2024/settings.py +0 -0
  510. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Abade_and_Albuquerque_2024/simulation.py +0 -0
  511. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Abdul_Razzak_Ghan_2000/aerosol.py +0 -0
  512. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Abdul_Razzak_Ghan_2000/data_from_ARG2000_paper.py +0 -0
  513. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Abdul_Razzak_Ghan_2000/data_from_CloudMicrophysics_ARG.py +0 -0
  514. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Abdul_Razzak_Ghan_2000/fig_4_kinetic_limitations.ipynb +0 -0
  515. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Abdul_Razzak_Ghan_2000/figs1-5.ipynb +0 -0
  516. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Abdul_Razzak_Ghan_2000/run_ARG_parcel.py +0 -0
  517. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Alpert_and_Knopf_2016/fig_1.ipynb +0 -0
  518. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Alpert_and_Knopf_2016/fig_2.ipynb +0 -0
  519. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Alpert_and_Knopf_2016/fig_3.ipynb +0 -0
  520. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Alpert_and_Knopf_2016/fig_4.ipynb +0 -0
  521. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Alpert_and_Knopf_2016/fig_5.ipynb +0 -0
  522. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Alpert_and_Knopf_2016/simulation.py +0 -0
  523. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Alpert_and_Knopf_2016/table.py +0 -0
  524. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Alpert_and_Knopf_2016/table_1.py +0 -0
  525. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Alpert_and_Knopf_2016/table_2.py +0 -0
  526. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Arabas_and_Shima_2017/example.py +0 -0
  527. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Arabas_and_Shima_2017/fig_5.ipynb +0 -0
  528. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Arabas_and_Shima_2017/settings.py +0 -0
  529. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Arabas_and_Shima_2017/simulation.py +0 -0
  530. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Arabas_et_al_2015/example.py +0 -0
  531. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Arabas_et_al_2015/example_benchmark.py +0 -0
  532. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Arabas_et_al_2015/gui.ipynb +0 -0
  533. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Arabas_et_al_2015/paraview_hello_world.ipynb +0 -0
  534. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Arabas_et_al_2015/settings.py +0 -0
  535. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Arabas_et_al_2023/aida.ipynb +0 -0
  536. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Arabas_et_al_2023/copula_hello.ipynb +0 -0
  537. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Arabas_et_al_2023/curved_text.py +0 -0
  538. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Arabas_et_al_2023/frozen_fraction.py +0 -0
  539. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Arabas_et_al_2023/run_simulation.py +0 -0
  540. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Bartman_2020_MasterThesis/__init__.py +0 -0
  541. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Bartman_2020_MasterThesis/fig_4_adaptive_sdm.py +0 -0
  542. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Bartman_2020_MasterThesis/fig_5_SCIPY_VS_ADAPTIVE.py +0 -0
  543. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Bartman_et_al_2021/demo.ipynb +0 -0
  544. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Bartman_et_al_2021/demo_fig2.ipynb +0 -0
  545. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Bartman_et_al_2021/demo_fig3.ipynb +0 -0
  546. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Bartman_et_al_2021/label.py +0 -0
  547. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Berry_1967/example.py +0 -0
  548. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Berry_1967/example_fig_6.py +0 -0
  549. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Berry_1967/figs_5_8_10.ipynb +0 -0
  550. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Berry_1967/settings.py +0 -0
  551. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Berry_1967/spectrum_plotter.py +0 -0
  552. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Bieli_et_al_2022/make_fig_3.ipynb +0 -0
  553. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Bieli_et_al_2022/settings.py +0 -0
  554. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Bieli_et_al_2022/simulation.py +0 -0
  555. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Bolot_et_al_2013/fig_1.ipynb +0 -0
  556. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Bulenok_2023_MasterThesis/performance_comparison_Srivastava_Setup.ipynb +0 -0
  557. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Bulenok_2023_MasterThesis/setups.py +0 -0
  558. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Bulenok_2023_MasterThesis/utils.py +0 -0
  559. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Ervens_and_Feingold_2012/__init__.py +0 -0
  560. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Ervens_and_Feingold_2012/settings.py +0 -0
  561. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Gedzelman_and_Arnold_1994/fig_2.ipynb +0 -0
  562. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Grabowski_and_Pawlowska_2023/figure_1.ipynb +0 -0
  563. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Grabowski_and_Pawlowska_2023/figure_2.ipynb +0 -0
  564. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Grabowski_and_Pawlowska_2023/figure_3.ipynb +0 -0
  565. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Grabowski_and_Pawlowska_2023/figure_4.ipynb +0 -0
  566. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Grabowski_and_Pawlowska_2023/figure_ripening_rate.ipynb +0 -0
  567. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Grabowski_and_Pawlowska_2023/settings.py +0 -0
  568. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Grabowski_and_Pawlowska_2023/simulation.py +0 -0
  569. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Graf_et_al_2019/Table_1.ipynb +0 -0
  570. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Graf_et_al_2019/figure_4.ipynb +0 -0
  571. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Jaruga_and_Pawlowska_2018/fig_2.ipynb +0 -0
  572. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Jaruga_and_Pawlowska_2018/fig_3.ipynb +0 -0
  573. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Jensen_and_Nugent_2017/Fig_1.ipynb +0 -0
  574. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Jensen_and_Nugent_2017/Fig_3_and_Tab_4_upper_rows.ipynb +0 -0
  575. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Jensen_and_Nugent_2017/Fig_4_and_7_and_Tab_4_bottom_rows.ipynb +0 -0
  576. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Jensen_and_Nugent_2017/Fig_5.ipynb +0 -0
  577. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Jensen_and_Nugent_2017/Fig_6.ipynb +0 -0
  578. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Jensen_and_Nugent_2017/Fig_8.ipynb +0 -0
  579. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Jensen_and_Nugent_2017/plotting.py +0 -0
  580. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Jensen_and_Nugent_2017/settings.py +0 -0
  581. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Jensen_and_Nugent_2017/simulation.py +0 -0
  582. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Jensen_and_Nugent_2017/table_3.py +0 -0
  583. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Kreidenweis_et_al_2003/fig_1.ipynb +0 -0
  584. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Kreidenweis_et_al_2003/settings.py +0 -0
  585. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Lamb_et_al_2017/fig_4.ipynb +0 -0
  586. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Lowe_et_al_2019/aerosol.py +0 -0
  587. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Lowe_et_al_2019/aerosol_code.py +0 -0
  588. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Lowe_et_al_2019/constants_def.py +0 -0
  589. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Lowe_et_al_2019/fig_1.ipynb +0 -0
  590. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Lowe_et_al_2019/fig_2.ipynb +0 -0
  591. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Lowe_et_al_2019/fig_3.ipynb +0 -0
  592. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Lowe_et_al_2019/fig_s2.ipynb +0 -0
  593. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Lowe_et_al_2019/plot_helper.py +0 -0
  594. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Lowe_et_al_2019/settings.py +0 -0
  595. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Lowe_et_al_2019/simulation.py +0 -0
  596. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Merlivat_and_Nief_1967/fig_2.ipynb +0 -0
  597. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Miyake_et_al_1968/fig_19.ipynb +0 -0
  598. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Morrison_and_Grabowski_2007/common.py +0 -0
  599. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Morrison_and_Grabowski_2007/cumulus.py +0 -0
  600. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Morrison_and_Grabowski_2007/fig_2.ipynb +0 -0
  601. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Morrison_and_Grabowski_2007/fig_3.ipynb +0 -0
  602. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Morrison_and_Grabowski_2007/strato_cumulus.py +0 -0
  603. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Niedermeier_et_al_2014/fig_2.ipynb +0 -0
  604. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Niedermeier_et_al_2014/settings.py +0 -0
  605. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Niedermeier_et_al_2014/simulation.py +0 -0
  606. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Pierchala_et_al_2022/commons.py +0 -0
  607. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Pierchala_et_al_2022/fig_3.ipynb +0 -0
  608. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Pierchala_et_al_2022/fig_4.ipynb +0 -0
  609. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Pyrcel/example_basic_run.ipynb +0 -0
  610. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Pyrcel/profile_plotter.py +0 -0
  611. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Pyrcel/settings.py +0 -0
  612. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Pyrcel/simulation.py +0 -0
  613. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Pyrcel/tutorial_settings.py +0 -0
  614. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Pyrcel/tutorial_simulation.py +0 -0
  615. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Rozanski_and_Sonntag_1982/figs_4_5_6.ipynb +0 -0
  616. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Shima_et_al_2009/error_measure.py +0 -0
  617. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Shima_et_al_2009/example.py +0 -0
  618. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Shima_et_al_2009/example_timing.py +0 -0
  619. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Shima_et_al_2009/fig_2.ipynb +0 -0
  620. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Shima_et_al_2009/settings.py +0 -0
  621. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Shima_et_al_2009/spectrum_plotter.py +0 -0
  622. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Shima_et_al_2009/tutorial_example.py +0 -0
  623. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Shima_et_al_2009/tutorial_plotter.py +0 -0
  624. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Shima_et_al_2009/tutorial_settings.py +0 -0
  625. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Shipway_and_Hill_2012/fig_1.ipynb +0 -0
  626. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Shipway_and_Hill_2012/mpdata_1d.py +0 -0
  627. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Shipway_and_Hill_2012/plot.py +0 -0
  628. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Shipway_and_Hill_2012/settings.py +0 -0
  629. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Shipway_and_Hill_2012/simulation.py +0 -0
  630. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Singer_Ward/MWE_joss_paper.ipynb +0 -0
  631. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Singer_Ward/aerosol.py +0 -0
  632. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Singer_Ward/kohler.ipynb +0 -0
  633. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Srivastava_1982/equations.py +0 -0
  634. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Srivastava_1982/example.py +0 -0
  635. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Srivastava_1982/figures.ipynb +0 -0
  636. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Srivastava_1982/settings.py +0 -0
  637. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Szumowski_et_al_1998/__init__.py +0 -0
  638. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Szumowski_et_al_1998/fields.py +0 -0
  639. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Szumowski_et_al_1998/gui.py +0 -0
  640. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Szumowski_et_al_1998/gui_controller.py +0 -0
  641. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Szumowski_et_al_1998/gui_settings.py +0 -0
  642. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Szumowski_et_al_1998/gui_viewer.py +0 -0
  643. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Szumowski_et_al_1998/make_default_product_collection.py +0 -0
  644. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Szumowski_et_al_1998/mpdata_2d.py +0 -0
  645. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Szumowski_et_al_1998/plots.py +0 -0
  646. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Szumowski_et_al_1998/sounding.py +0 -0
  647. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Szumowski_et_al_1998/storage.py +0 -0
  648. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Van_Hook_1968/fig_1.ipynb +0 -0
  649. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Yang_et_al_2018/fig_2.ipynb +0 -0
  650. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Yang_et_al_2018/settings.py +0 -0
  651. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/Yang_et_al_2018/simulation.py +0 -0
  652. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/deJong_Azimi/box.ipynb +0 -0
  653. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/deJong_Azimi/cloudy_data.py +0 -0
  654. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/deJong_Azimi/cloudy_data_0d.py +0 -0
  655. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/deJong_Azimi/rainshaft.ipynb +0 -0
  656. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/deJong_Azimi/settings1D.py +0 -0
  657. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/deJong_Mackay_et_al_2023/data/straub_fig10.csv +0 -0
  658. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/deJong_Mackay_et_al_2023/fig_9.ipynb +0 -0
  659. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/deJong_Mackay_et_al_2023/figs_10_11_12_13.ipynb +0 -0
  660. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/deJong_Mackay_et_al_2023/figs_3_4_5.ipynb +0 -0
  661. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/deJong_Mackay_et_al_2023/figs_6_7_8.ipynb +0 -0
  662. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/deJong_Mackay_et_al_2023/plot_rates.py +0 -0
  663. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/deJong_Mackay_et_al_2023/settings1D.py +0 -0
  664. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/deJong_Mackay_et_al_2023/settings_0D.py +0 -0
  665. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/deJong_Mackay_et_al_2023/simulation1D.py +0 -0
  666. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/deJong_Mackay_et_al_2023/simulation_ss.py +0 -0
  667. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/seeding/hello_world.ipynb +0 -0
  668. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/seeding/seeding_no_collisions.ipynb +0 -0
  669. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/seeding/settings.py +0 -0
  670. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/utils/__init__.py +0 -0
  671. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/utils/basic_simulation.py +0 -0
  672. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/utils/dummy_controller.py +0 -0
  673. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/utils/notebook_vars.py +0 -0
  674. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/utils/progbar_controller.py +0 -0
  675. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/utils/read_vtk_1d.py +0 -0
  676. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/utils/widgets/__init__.py +0 -0
  677. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/utils/widgets/freezer.py +0 -0
  678. {PySDM-2.79 → pysdm-2.81}/examples/PySDM_examples/utils/widgets/progbar_updater.py +0 -0
  679. {PySDM-2.79 → pysdm-2.81}/paper/joss-ARG-fig_1.pdf +0 -0
  680. {PySDM-2.79 → pysdm-2.81}/paper/paper.bib +0 -0
  681. {PySDM-2.79 → pysdm-2.81}/paper/paper.md +0 -0
  682. {PySDM-2.79 → pysdm-2.81}/paper/paperv1.md +0 -0
  683. {PySDM-2.79 → pysdm-2.81}/paper/readme.pdf +0 -0
  684. {PySDM-2.79 → pysdm-2.81}/paper/test.pdf +0 -0
  685. {PySDM-2.79 → pysdm-2.81}/setup.cfg +0 -0
  686. {PySDM-2.79 → pysdm-2.81}/tests/__init__.py +0 -0
  687. {PySDM-2.79 → pysdm-2.81}/tests/examples_tests/__init__.py +0 -0
  688. {PySDM-2.79 → pysdm-2.81}/tests/examples_tests/conftest.py +0 -0
  689. {PySDM-2.79 → pysdm-2.81}/tests/examples_tests/test_run_examples.py +0 -0
  690. {PySDM-2.79 → pysdm-2.81}/tests/examples_tests/test_run_notebooks.py +0 -0
  691. {PySDM-2.79 → pysdm-2.81}/tests/examples_tests/test_tests_completeness.py +0 -0
  692. {PySDM-2.79 → pysdm-2.81}/tests/smoke_tests/__init__.py +0 -0
  693. {PySDM-2.79 → pysdm-2.81}/tests/smoke_tests/box/alpert_and_knopf_2016/__init__.py +0 -0
  694. {PySDM-2.79 → pysdm-2.81}/tests/smoke_tests/box/alpert_and_knopf_2016/test_ak16_fig_1.py +0 -0
  695. {PySDM-2.79 → pysdm-2.81}/tests/smoke_tests/box/alpert_and_knopf_2016/test_frozen_fraction.py +0 -0
  696. {PySDM-2.79 → pysdm-2.81}/tests/smoke_tests/box/berry_1967/__init__.py +0 -0
  697. {PySDM-2.79 → pysdm-2.81}/tests/smoke_tests/box/berry_1967/test_coalescence.py +0 -0
  698. {PySDM-2.79 → pysdm-2.81}/tests/smoke_tests/box/bieli_et_al_2022/__init__.py +0 -0
  699. {PySDM-2.79 → pysdm-2.81}/tests/smoke_tests/box/bieli_et_al_2022/test_moments.py +0 -0
  700. {PySDM-2.79 → pysdm-2.81}/tests/smoke_tests/box/dejong_and_mackay_et_al_2023/__init__.py +0 -0
  701. {PySDM-2.79 → pysdm-2.81}/tests/smoke_tests/box/dejong_and_mackay_et_al_2023/test_collision.py +0 -0
  702. {PySDM-2.79 → pysdm-2.81}/tests/smoke_tests/box/dejong_and_mackay_et_al_2023/test_fig_6.py +0 -0
  703. {PySDM-2.79 → pysdm-2.81}/tests/smoke_tests/box/dejong_and_mackay_et_al_2023/test_fig_7.py +0 -0
  704. {PySDM-2.79 → pysdm-2.81}/tests/smoke_tests/box/dejong_and_mackay_et_al_2023/test_fig_8.py +0 -0
  705. {PySDM-2.79 → pysdm-2.81}/tests/smoke_tests/box/dejong_azimi/test_box.py +0 -0
  706. {PySDM-2.79 → pysdm-2.81}/tests/smoke_tests/box/partmc/__init__.py +0 -0
  707. {PySDM-2.79 → pysdm-2.81}/tests/smoke_tests/box/shima_et_al_2009/__init__.py +0 -0
  708. {PySDM-2.79 → pysdm-2.81}/tests/smoke_tests/box/shima_et_al_2009/test_lwc_constant.py +0 -0
  709. {PySDM-2.79 → pysdm-2.81}/tests/smoke_tests/box/srivastava_1982/__init__.py +0 -0
  710. {PySDM-2.79 → pysdm-2.81}/tests/smoke_tests/box/srivastava_1982/test_eq_10.py +0 -0
  711. {PySDM-2.79 → pysdm-2.81}/tests/smoke_tests/box/srivastava_1982/test_eq_13.py +0 -0
  712. {PySDM-2.79 → pysdm-2.81}/tests/smoke_tests/box/srivastava_1982/test_equations.py +0 -0
  713. {PySDM-2.79 → pysdm-2.81}/tests/smoke_tests/conftest.py +0 -0
  714. {PySDM-2.79 → pysdm-2.81}/tests/smoke_tests/kinematic_1d/deJong_Azimi/__init__.py +0 -0
  715. {PySDM-2.79 → pysdm-2.81}/tests/smoke_tests/kinematic_1d/deJong_Azimi/test_few_steps.py +0 -0
  716. {PySDM-2.79 → pysdm-2.81}/tests/smoke_tests/kinematic_1d/deJong_Azimi/test_initial_condition.py +0 -0
  717. {PySDM-2.79 → pysdm-2.81}/tests/smoke_tests/kinematic_1d/shipway_and_hill_2012/__init__.py +0 -0
  718. {PySDM-2.79 → pysdm-2.81}/tests/smoke_tests/kinematic_1d/shipway_and_hill_2012/test_1d_exporters.py +0 -0
  719. {PySDM-2.79 → pysdm-2.81}/tests/smoke_tests/kinematic_1d/shipway_and_hill_2012/test_few_steps.py +0 -0
  720. {PySDM-2.79 → pysdm-2.81}/tests/smoke_tests/kinematic_1d/shipway_and_hill_2012/test_initial_condition.py +0 -0
  721. {PySDM-2.79 → pysdm-2.81}/tests/smoke_tests/kinematic_1d/shipway_and_hill_2012/test_settings.py +0 -0
  722. {PySDM-2.79 → pysdm-2.81}/tests/smoke_tests/kinematic_2d/arabas_et_al_2015/__init__.py +0 -0
  723. {PySDM-2.79 → pysdm-2.81}/tests/smoke_tests/kinematic_2d/arabas_et_al_2015/dummy_storage.py +0 -0
  724. {PySDM-2.79 → pysdm-2.81}/tests/smoke_tests/kinematic_2d/arabas_et_al_2015/test_environment.py +0 -0
  725. {PySDM-2.79 → pysdm-2.81}/tests/smoke_tests/kinematic_2d/arabas_et_al_2015/test_export.py +0 -0
  726. {PySDM-2.79 → pysdm-2.81}/tests/smoke_tests/kinematic_2d/arabas_et_al_2015/test_freezing.py +0 -0
  727. {PySDM-2.79 → pysdm-2.81}/tests/smoke_tests/kinematic_2d/arabas_et_al_2015/test_gui_settings.py +0 -0
  728. {PySDM-2.79 → pysdm-2.81}/tests/smoke_tests/kinematic_2d/arabas_et_al_2015/test_initialisation.py +0 -0
  729. {PySDM-2.79 → pysdm-2.81}/tests/smoke_tests/kinematic_2d/arabas_et_al_2015/test_spin_up.py +0 -0
  730. {PySDM-2.79 → pysdm-2.81}/tests/smoke_tests/no_env/gedzelman_and_arnold_1994/__init__.py +0 -0
  731. {PySDM-2.79 → pysdm-2.81}/tests/smoke_tests/no_env/gedzelman_and_arnold_1994/test_fig_2.py +0 -0
  732. {PySDM-2.79 → pysdm-2.81}/tests/smoke_tests/no_env/lamb_et_al_2017/__init__.py +0 -0
  733. {PySDM-2.79 → pysdm-2.81}/tests/smoke_tests/no_env/miyake_et_al_1968/__init__.py +0 -0
  734. {PySDM-2.79 → pysdm-2.81}/tests/smoke_tests/no_env/miyake_et_al_1968/test_fig_19.py +0 -0
  735. {PySDM-2.79 → pysdm-2.81}/tests/smoke_tests/no_env/pierchala_et_al_2022/__init__.py +0 -0
  736. {PySDM-2.79 → pysdm-2.81}/tests/smoke_tests/no_env/pierchala_et_al_2022/test_supplement.py +0 -0
  737. {PySDM-2.79 → pysdm-2.81}/tests/smoke_tests/parcel_a/lowe_et_al_2019/__init__.py +0 -0
  738. {PySDM-2.79 → pysdm-2.81}/tests/smoke_tests/parcel_a/lowe_et_al_2019/conftest.py +0 -0
  739. {PySDM-2.79 → pysdm-2.81}/tests/smoke_tests/parcel_a/lowe_et_al_2019/test_dz_sensitivity.py +0 -0
  740. {PySDM-2.79 → pysdm-2.81}/tests/smoke_tests/parcel_a/lowe_et_al_2019/test_fig_1.py +0 -0
  741. {PySDM-2.79 → pysdm-2.81}/tests/smoke_tests/parcel_a/lowe_et_al_2019/test_fig_2.py +0 -0
  742. {PySDM-2.79 → pysdm-2.81}/tests/smoke_tests/parcel_a/lowe_et_al_2019/test_fig_s2.py +0 -0
  743. {PySDM-2.79 → pysdm-2.81}/tests/smoke_tests/parcel_a/lowe_et_al_2019/test_surface_tension_models.py +0 -0
  744. {PySDM-2.79 → pysdm-2.81}/tests/smoke_tests/parcel_a/lowe_et_al_2019/test_zero_forg.py +0 -0
  745. {PySDM-2.79 → pysdm-2.81}/tests/smoke_tests/parcel_a/pyrcel/__init__.py +0 -0
  746. {PySDM-2.79 → pysdm-2.81}/tests/smoke_tests/parcel_a/pyrcel/test_parcel_example.py +0 -0
  747. {PySDM-2.79 → pysdm-2.81}/tests/smoke_tests/parcel_a/rozanski_and_sonntag_1982/__init__.py +0 -0
  748. {PySDM-2.79 → pysdm-2.81}/tests/smoke_tests/parcel_a/rozanski_and_sonntag_1982/test_figs_4_5_6.py +0 -0
  749. {PySDM-2.79 → pysdm-2.81}/tests/smoke_tests/parcel_a/seeding/__init__.py +0 -0
  750. {PySDM-2.79 → pysdm-2.81}/tests/smoke_tests/parcel_a/seeding/test_hello_world.py +0 -0
  751. {PySDM-2.79 → pysdm-2.81}/tests/smoke_tests/parcel_a/seeding/test_seeding_no_collisions.py +0 -0
  752. {PySDM-2.79 → pysdm-2.81}/tests/smoke_tests/parcel_b/arabas_and_shima_2017/__init__.py +0 -0
  753. {PySDM-2.79 → pysdm-2.81}/tests/smoke_tests/parcel_b/arabas_and_shima_2017/test_displacement.py +0 -0
  754. {PySDM-2.79 → pysdm-2.81}/tests/smoke_tests/parcel_b/arabas_and_shima_2017/test_event_rates.py +0 -0
  755. {PySDM-2.79 → pysdm-2.81}/tests/smoke_tests/parcel_b/arabas_and_shima_2017/test_vs_scipy.py +0 -0
  756. {PySDM-2.79 → pysdm-2.81}/tests/smoke_tests/parcel_b/yang_et_al_2018/__init__.py +0 -0
  757. {PySDM-2.79 → pysdm-2.81}/tests/smoke_tests/parcel_b/yang_et_al_2018/test_displacement.py +0 -0
  758. {PySDM-2.79 → pysdm-2.81}/tests/smoke_tests/parcel_b/yang_et_al_2018/test_initialisation.py +0 -0
  759. {PySDM-2.79 → pysdm-2.81}/tests/smoke_tests/parcel_b/yang_et_al_2018/test_just_do_it.py +0 -0
  760. {PySDM-2.79 → pysdm-2.81}/tests/smoke_tests/parcel_c/abade_and_albuquerque_2024/__init__.py +0 -0
  761. {PySDM-2.79 → pysdm-2.81}/tests/smoke_tests/parcel_c/abade_and_albuquerque_2024/test_fig_2.py +0 -0
  762. {PySDM-2.79 → pysdm-2.81}/tests/smoke_tests/parcel_c/abdul_razzak_ghan_2000/__init__.py +0 -0
  763. {PySDM-2.79 → pysdm-2.81}/tests/smoke_tests/parcel_c/abdul_razzak_ghan_2000/test_ARG_example.py +0 -0
  764. {PySDM-2.79 → pysdm-2.81}/tests/smoke_tests/parcel_c/abdul_razzak_ghan_2000/test_just_do_it.py +0 -0
  765. {PySDM-2.79 → pysdm-2.81}/tests/smoke_tests/parcel_c/abdul_razzak_ghan_2000/test_single_supersaturation_peak.py +0 -0
  766. {PySDM-2.79 → pysdm-2.81}/tests/smoke_tests/parcel_c/grabowski_and_pawlowska_2023/__init__.py +0 -0
  767. {PySDM-2.79 → pysdm-2.81}/tests/smoke_tests/parcel_c/grabowski_and_pawlowska_2023/test_condensation_tolerance.py +0 -0
  768. {PySDM-2.79 → pysdm-2.81}/tests/smoke_tests/parcel_c/grabowski_and_pawlowska_2023/test_figure_1_and_2.py +0 -0
  769. {PySDM-2.79 → pysdm-2.81}/tests/smoke_tests/parcel_c/grabowski_and_pawlowska_2023/test_figure_3.py +0 -0
  770. {PySDM-2.79 → pysdm-2.81}/tests/smoke_tests/parcel_c/grabowski_and_pawlowska_2023/test_figure_4.py +0 -0
  771. {PySDM-2.79 → pysdm-2.81}/tests/smoke_tests/parcel_c/grabowski_and_pawlowska_2023/test_ripening_rate.py +0 -0
  772. {PySDM-2.79 → pysdm-2.81}/tests/smoke_tests/parcel_c/graf_et_al_2019/__init__.py +0 -0
  773. {PySDM-2.79 → pysdm-2.81}/tests/smoke_tests/parcel_c/graf_et_al_2019/test_fig_4.py +0 -0
  774. {PySDM-2.79 → pysdm-2.81}/tests/smoke_tests/parcel_c/graf_et_al_2019/test_table_1.py +0 -0
  775. {PySDM-2.79 → pysdm-2.81}/tests/smoke_tests/parcel_c/jensen_and_nugent_2017/__init__.py +0 -0
  776. {PySDM-2.79 → pysdm-2.81}/tests/smoke_tests/parcel_c/jensen_and_nugent_2017/test_fig_1.py +0 -0
  777. {PySDM-2.79 → pysdm-2.81}/tests/smoke_tests/parcel_c/jensen_and_nugent_2017/test_fig_3_and_tab_4_upper_rows.py +0 -0
  778. {PySDM-2.79 → pysdm-2.81}/tests/smoke_tests/parcel_c/jensen_and_nugent_2017/test_fig_4_and_7_and_tab_4_bottom_rows.py +0 -0
  779. {PySDM-2.79 → pysdm-2.81}/tests/smoke_tests/parcel_c/jensen_and_nugent_2017/test_fig_5.py +0 -0
  780. {PySDM-2.79 → pysdm-2.81}/tests/smoke_tests/parcel_c/jensen_and_nugent_2017/test_fig_6.py +0 -0
  781. {PySDM-2.79 → pysdm-2.81}/tests/smoke_tests/parcel_c/jensen_and_nugent_2017/test_table_3.py +0 -0
  782. {PySDM-2.79 → pysdm-2.81}/tests/smoke_tests/parcel_c/kreidenweis_et_al_2003/__init__.py +0 -0
  783. {PySDM-2.79 → pysdm-2.81}/tests/smoke_tests/parcel_c/kreidenweis_et_al_2003/test_fig_1.py +0 -0
  784. {PySDM-2.79 → pysdm-2.81}/tests/smoke_tests/parcel_c/kreidenweis_et_al_2003/test_ionic_strength.py +0 -0
  785. {PySDM-2.79 → pysdm-2.81}/tests/smoke_tests/parcel_c/kreidenweis_et_al_2003/test_spectrum_at_t_0.py +0 -0
  786. {PySDM-2.79 → pysdm-2.81}/tests/smoke_tests/parcel_c/kreidenweis_et_al_2003/test_table_3.py +0 -0
  787. {PySDM-2.79 → pysdm-2.81}/tests/smoke_tests/parcel_c/niedermeier_et_al_2013/__init__.py +0 -0
  788. {PySDM-2.79 → pysdm-2.81}/tests/smoke_tests/parcel_c/niedermeier_et_al_2013/test_temperature_profile.py +0 -0
  789. {PySDM-2.79 → pysdm-2.81}/tests/tutorials_tests/__init__.py +0 -0
  790. {PySDM-2.79 → pysdm-2.81}/tests/tutorials_tests/conftest.py +0 -0
  791. {PySDM-2.79 → pysdm-2.81}/tests/tutorials_tests/test_run_notebooks.py +0 -0
  792. {PySDM-2.79 → pysdm-2.81}/tests/unit_tests/__init__.py +0 -0
  793. {PySDM-2.79 → pysdm-2.81}/tests/unit_tests/attributes/__init__.py +0 -0
  794. {PySDM-2.79 → pysdm-2.81}/tests/unit_tests/attributes/test_acidity.py +0 -0
  795. {PySDM-2.79 → pysdm-2.81}/tests/unit_tests/attributes/test_area_radius.py +0 -0
  796. {PySDM-2.79 → pysdm-2.81}/tests/unit_tests/attributes/test_critical_supersaturation.py +0 -0
  797. {PySDM-2.79 → pysdm-2.81}/tests/unit_tests/attributes/test_fall_velocity.py +0 -0
  798. {PySDM-2.79 → pysdm-2.81}/tests/unit_tests/attributes/test_impl_attribute_registry.py +0 -0
  799. {PySDM-2.79 → pysdm-2.81}/tests/unit_tests/attributes/test_multiplicities.py +0 -0
  800. {PySDM-2.79 → pysdm-2.81}/tests/unit_tests/attributes/test_reynolds_number.py +0 -0
  801. {PySDM-2.79 → pysdm-2.81}/tests/unit_tests/backends/__init__.py +0 -0
  802. {PySDM-2.79 → pysdm-2.81}/tests/unit_tests/backends/storage/__init__.py +0 -0
  803. {PySDM-2.79 → pysdm-2.81}/tests/unit_tests/backends/storage/test_basic_ops.py +0 -0
  804. {PySDM-2.79 → pysdm-2.81}/tests/unit_tests/backends/storage/test_index.py +0 -0
  805. {PySDM-2.79 → pysdm-2.81}/tests/unit_tests/backends/storage/test_setitem.py +0 -0
  806. {PySDM-2.79 → pysdm-2.81}/tests/unit_tests/backends/test_collisions_methods.py +0 -0
  807. {PySDM-2.79 → pysdm-2.81}/tests/unit_tests/backends/test_ctor_defaults.py +0 -0
  808. {PySDM-2.79 → pysdm-2.81}/tests/unit_tests/backends/test_fake_thrust.py +0 -0
  809. {PySDM-2.79 → pysdm-2.81}/tests/unit_tests/backends/test_isotope_methods.py +0 -0
  810. {PySDM-2.79 → pysdm-2.81}/tests/unit_tests/backends/test_moments_methods.py +0 -0
  811. {PySDM-2.79 → pysdm-2.81}/tests/unit_tests/backends/test_oxidation.py +0 -0
  812. {PySDM-2.79 → pysdm-2.81}/tests/unit_tests/backends/test_pair_methods.py +0 -0
  813. {PySDM-2.79 → pysdm-2.81}/tests/unit_tests/backends/test_physics_methods.py +0 -0
  814. {PySDM-2.79 → pysdm-2.81}/tests/unit_tests/backends/test_seeding_methods.py +0 -0
  815. {PySDM-2.79 → pysdm-2.81}/tests/unit_tests/backends/test_toms748.py +0 -0
  816. {PySDM-2.79 → pysdm-2.81}/tests/unit_tests/conftest.py +0 -0
  817. {PySDM-2.79 → pysdm-2.81}/tests/unit_tests/dummy_environment.py +0 -0
  818. {PySDM-2.79 → pysdm-2.81}/tests/unit_tests/dummy_particulator.py +0 -0
  819. {PySDM-2.79 → pysdm-2.81}/tests/unit_tests/dynamics/__init__.py +0 -0
  820. {PySDM-2.79 → pysdm-2.81}/tests/unit_tests/dynamics/collisions/__init__.py +0 -0
  821. {PySDM-2.79 → pysdm-2.81}/tests/unit_tests/dynamics/collisions/conftest.py +0 -0
  822. {PySDM-2.79 → pysdm-2.81}/tests/unit_tests/dynamics/collisions/test_croupiers.py +0 -0
  823. {PySDM-2.79 → pysdm-2.81}/tests/unit_tests/dynamics/collisions/test_defaults.py +0 -0
  824. {PySDM-2.79 → pysdm-2.81}/tests/unit_tests/dynamics/collisions/test_kernels.py +0 -0
  825. {PySDM-2.79 → pysdm-2.81}/tests/unit_tests/dynamics/collisions/test_sdm_breakup.py +0 -0
  826. {PySDM-2.79 → pysdm-2.81}/tests/unit_tests/dynamics/collisions/test_sdm_multi_cell.py +0 -0
  827. {PySDM-2.79 → pysdm-2.81}/tests/unit_tests/dynamics/collisions/test_sdm_single_cell.py +0 -0
  828. {PySDM-2.79 → pysdm-2.81}/tests/unit_tests/dynamics/condensation/test_diagnostics.py +0 -0
  829. {PySDM-2.79 → pysdm-2.81}/tests/unit_tests/dynamics/condensation/test_parcel_sanity_checks.py +0 -0
  830. {PySDM-2.79 → pysdm-2.81}/tests/unit_tests/dynamics/condensation/test_ventilation.py +0 -0
  831. {PySDM-2.79 → pysdm-2.81}/tests/unit_tests/dynamics/displacement/__init__.py +0 -0
  832. {PySDM-2.79 → pysdm-2.81}/tests/unit_tests/dynamics/displacement/displacement_settings.py +0 -0
  833. {PySDM-2.79 → pysdm-2.81}/tests/unit_tests/dynamics/displacement/test_advection.py +0 -0
  834. {PySDM-2.79 → pysdm-2.81}/tests/unit_tests/dynamics/displacement/test_courant_product.py +0 -0
  835. {PySDM-2.79 → pysdm-2.81}/tests/unit_tests/dynamics/displacement/test_sedimentation.py +0 -0
  836. {PySDM-2.79 → pysdm-2.81}/tests/unit_tests/dynamics/test_eulerian_advection.py +0 -0
  837. {PySDM-2.79 → pysdm-2.81}/tests/unit_tests/dynamics/test_impl_register_dynamic.py +0 -0
  838. {PySDM-2.79 → pysdm-2.81}/tests/unit_tests/dynamics/test_isotopic_fractionation.py +0 -0
  839. {PySDM-2.79 → pysdm-2.81}/tests/unit_tests/dynamics/test_relaxed_velocity.py +0 -0
  840. {PySDM-2.79 → pysdm-2.81}/tests/unit_tests/environments/__init__.py +0 -0
  841. {PySDM-2.79 → pysdm-2.81}/tests/unit_tests/environments/test_impl.py +0 -0
  842. {PySDM-2.79 → pysdm-2.81}/tests/unit_tests/impl/__init__.py +0 -0
  843. {PySDM-2.79 → pysdm-2.81}/tests/unit_tests/impl/test_camel_case.py +0 -0
  844. {PySDM-2.79 → pysdm-2.81}/tests/unit_tests/impl/test_mesh.py +0 -0
  845. {PySDM-2.79 → pysdm-2.81}/tests/unit_tests/impl/test_particle_attributes.py +0 -0
  846. {PySDM-2.79 → pysdm-2.81}/tests/unit_tests/initialisation/__init__.py +0 -0
  847. {PySDM-2.79 → pysdm-2.81}/tests/unit_tests/initialisation/test_aerosol_init.py +0 -0
  848. {PySDM-2.79 → pysdm-2.81}/tests/unit_tests/initialisation/test_discretise_multiplicities.py +0 -0
  849. {PySDM-2.79 → pysdm-2.81}/tests/unit_tests/initialisation/test_equilibrate_wet_radii.py +0 -0
  850. {PySDM-2.79 → pysdm-2.81}/tests/unit_tests/initialisation/test_init_fall_momenta.py +0 -0
  851. {PySDM-2.79 → pysdm-2.81}/tests/unit_tests/initialisation/test_spatial_discretisation.py +0 -0
  852. {PySDM-2.79 → pysdm-2.81}/tests/unit_tests/initialisation/test_spectra_lognormal.py +0 -0
  853. {PySDM-2.79 → pysdm-2.81}/tests/unit_tests/initialisation/test_spectral_discretisation.py +0 -0
  854. {PySDM-2.79 → pysdm-2.81}/tests/unit_tests/initialisation/test_spectro_glacial_discretisation.py +0 -0
  855. {PySDM-2.79 → pysdm-2.81}/tests/unit_tests/physics/__init__.py +0 -0
  856. {PySDM-2.79 → pysdm-2.81}/tests/unit_tests/physics/test_accommodation_coefficients.py +0 -0
  857. {PySDM-2.79 → pysdm-2.81}/tests/unit_tests/physics/test_air_dynamic_viscosity.py +0 -0
  858. {PySDM-2.79 → pysdm-2.81}/tests/unit_tests/physics/test_bulk_phase_partitioning.py +0 -0
  859. {PySDM-2.79 → pysdm-2.81}/tests/unit_tests/physics/test_constants.py +0 -0
  860. {PySDM-2.79 → pysdm-2.81}/tests/unit_tests/physics/test_dimensional_analysis.py +0 -0
  861. {PySDM-2.79 → pysdm-2.81}/tests/unit_tests/physics/test_drop_growth.py +0 -0
  862. {PySDM-2.79 → pysdm-2.81}/tests/unit_tests/physics/test_formulae.py +0 -0
  863. {PySDM-2.79 → pysdm-2.81}/tests/unit_tests/physics/test_fragmentation_functions.py +0 -0
  864. {PySDM-2.79 → pysdm-2.81}/tests/unit_tests/physics/test_freezing_temperature_spectra.py +0 -0
  865. {PySDM-2.79 → pysdm-2.81}/tests/unit_tests/physics/test_hygroscopicity_fierce_diagrams.py +0 -0
  866. {PySDM-2.79 → pysdm-2.81}/tests/unit_tests/physics/test_isotope_diffusivity_ratios.py +0 -0
  867. {PySDM-2.79 → pysdm-2.81}/tests/unit_tests/physics/test_isotope_equilibrium_fractionation_factors.py +0 -0
  868. {PySDM-2.79 → pysdm-2.81}/tests/unit_tests/physics/test_isotope_meteoric_water_line_excess.py +0 -0
  869. {PySDM-2.79 → pysdm-2.81}/tests/unit_tests/physics/test_isotope_ratio_evolution.py +0 -0
  870. {PySDM-2.79 → pysdm-2.81}/tests/unit_tests/physics/test_isotope_relaxation_timescale.py +0 -0
  871. {PySDM-2.79 → pysdm-2.81}/tests/unit_tests/physics/test_latent_heat.py +0 -0
  872. {PySDM-2.79 → pysdm-2.81}/tests/unit_tests/physics/test_optical.py +0 -0
  873. {PySDM-2.79 → pysdm-2.81}/tests/unit_tests/physics/test_particle_shape_and_density.py +0 -0
  874. {PySDM-2.79 → pysdm-2.81}/tests/unit_tests/physics/test_saturation_vapour_pressure.py +0 -0
  875. {PySDM-2.79 → pysdm-2.81}/tests/unit_tests/physics/test_spectra_top_hat.py +0 -0
  876. {PySDM-2.79 → pysdm-2.81}/tests/unit_tests/physics/test_surface_tension.py +0 -0
  877. {PySDM-2.79 → pysdm-2.81}/tests/unit_tests/physics/test_thermal_conductivity.py +0 -0
  878. {PySDM-2.79 → pysdm-2.81}/tests/unit_tests/physics/test_trivia.py +0 -0
  879. {PySDM-2.79 → pysdm-2.81}/tests/unit_tests/physics/test_ventilation_coefficient.py +0 -0
  880. {PySDM-2.79 → pysdm-2.81}/tests/unit_tests/products/__init__.py +0 -0
  881. {PySDM-2.79 → pysdm-2.81}/tests/unit_tests/products/test_ambient_relative_humidity.py +0 -0
  882. {PySDM-2.79 → pysdm-2.81}/tests/unit_tests/products/test_arbitrary_moment.py +0 -0
  883. {PySDM-2.79 → pysdm-2.81}/tests/unit_tests/products/test_averaged_terminal_velocity.py +0 -0
  884. {PySDM-2.79 → pysdm-2.81}/tests/unit_tests/products/test_collision_rates.py +0 -0
  885. {PySDM-2.79 → pysdm-2.81}/tests/unit_tests/products/test_effective_radii.py +0 -0
  886. {PySDM-2.79 → pysdm-2.81}/tests/unit_tests/products/test_impl.py +0 -0
  887. {PySDM-2.79 → pysdm-2.81}/tests/unit_tests/products/test_parcel_liquid_water_path.py +0 -0
  888. {PySDM-2.79 → pysdm-2.81}/tests/unit_tests/products/test_particle_size_product.py +0 -0
  889. {PySDM-2.79 → pysdm-2.81}/tests/unit_tests/products/test_particle_size_spectrum.py +0 -0
  890. {PySDM-2.79 → pysdm-2.81}/tests/unit_tests/test_builder.py +0 -0
  891. {PySDM-2.79 → pysdm-2.81}/tests/unit_tests/test_formulae.py +0 -0
  892. {PySDM-2.79 → pysdm-2.81}/tests/unit_tests/test_imports.py +0 -0
  893. {PySDM-2.79 → pysdm-2.81}/tests/unit_tests/test_particulator.py +0 -0
  894. {PySDM-2.79 → pysdm-2.81}/tutorials/README.md +0 -0
  895. {PySDM-2.79 → pysdm-2.81}/tutorials/collisions/collection_droplet.svg +0 -0
  896. {PySDM-2.79 → pysdm-2.81}/tutorials/collisions/collisions_playground.ipynb +0 -0
  897. {PySDM-2.79 → pysdm-2.81}/tutorials/condensation/condensation_playground.ipynb +0 -0
  898. {PySDM-2.79 → pysdm-2.81}/tutorials/condensation/kohler_curve.svg +0 -0
@@ -16,7 +16,7 @@ jobs:
16
16
  python:
17
17
  strategy:
18
18
  matrix:
19
- platform: [ubuntu-latest, macos-12, macos-14, windows-latest]
19
+ platform: [ubuntu-latest, macos-13, macos-14, windows-latest]
20
20
  runs-on: ${{ matrix.platform }}
21
21
  steps:
22
22
  - uses: actions/checkout@v4.1.6
@@ -27,7 +27,7 @@ jobs:
27
27
  - run: python -m pip install $PIP_INSTALL_ARGS pytest-codeblocks pytest
28
28
  - run: python -m pip install $PIP_INSTALL_ARGS "pyparsing<3.0.0" # https://github.com/matplotlib/matplotlib/issues/25204
29
29
  - run: |
30
- python -c "import os,pytest_codeblocks; code=pytest_codeblocks.extract_from_file('README.md'); f=open('readme.py', 'w', encoding='utf-8'); f.write('# coding: utf-8'+os.linesep); f.writelines(block.code for block in code if block.syntax=='Python'); f.close()"
30
+ python -c "import os,pytest_codeblocks; code=pytest_codeblocks.extract_from_file('docs/markdown/pysdm_landing.md'); f=open('readme.py', 'w', encoding='utf-8'); f.write('# coding: utf-8'+os.linesep); f.writelines(block.code for block in code if block.syntax=='Python'); f.close()"
31
31
  - run: cat -n readme.py
32
32
  - run: |
33
33
  python -We readme.py
@@ -51,7 +51,7 @@ jobs:
51
51
  python-version: "3.10"
52
52
  - run: pip install -e .
53
53
  - run: pip install pytest-codeblocks pytest
54
- - run: python -c "import pytest_codeblocks; code=pytest_codeblocks.extract_from_file('README.md'); f=open('readme.jl', 'w'); f.writelines(block.code for block in code if block.syntax=='Julia'); f.close()"
54
+ - run: python -c "import pytest_codeblocks; code=pytest_codeblocks.extract_from_file('docs/markdown/pysdm_landing.md'); f=open('readme.jl', 'w'); f.writelines(block.code for block in code if block.syntax=='Julia'); f.close()"
55
55
  - uses: julia-actions/setup-julia@v1.9.6
56
56
  - run: cat -n readme.jl
57
57
  - run: julia readme.jl
@@ -67,7 +67,7 @@ jobs:
67
67
  python-version: 3.8
68
68
  - run: pip install -e .
69
69
  - run: pip install pytest-codeblocks pytest
70
- - run: python -c "import pytest_codeblocks; code=pytest_codeblocks.extract_from_file('README.md'); f=open('readme.m', 'w'); f.writelines(block.code for block in code if block.syntax=='Matlab'); f.close()"
70
+ - run: python -c "import pytest_codeblocks; code=pytest_codeblocks.extract_from_file('docs/markdown/pysdm_landing.md'); f=open('readme.m', 'w'); f.writelines(block.code for block in code if block.syntax=='Matlab'); f.close()"
71
71
  - run: cat -n readme.m
72
72
  - uses: matlab-actions/setup-matlab@v2.1.0
73
73
  with:
@@ -58,7 +58,7 @@ jobs:
58
58
  pdoc:
59
59
  strategy:
60
60
  matrix:
61
- platform: [ubuntu-latest, macos-12, windows-latest]
61
+ platform: [ubuntu-latest, macos-13, windows-latest]
62
62
  runs-on: ${{ matrix.platform }}
63
63
  steps:
64
64
  - uses: actions/checkout@v4.1.6
@@ -67,12 +67,20 @@ jobs:
67
67
  persist-credentials: false
68
68
  - uses: actions/setup-python@v5.0.0
69
69
  with:
70
- python-version: 3.9
70
+ python-version: "3.12"
71
71
  - run: |
72
- pip install pdoc
72
+ pip install pdoc nbformat
73
73
  pip install -e .
74
74
  pip install -e examples
75
- PDOC_ALLOW_EXEC=1 python -We -m pdoc -o html PySDM examples/PySDM_examples -t pdoc_templates
75
+
76
+ python - <<EOF
77
+ import glob, nbformat
78
+ for notebook_path in glob.glob('examples/PySDM_examples/*/*.ipynb'):
79
+ with open(notebook_path, encoding="utf8") as fin:
80
+ with open(notebook_path + ".badges.md", 'w') as fout:
81
+ fout.write(nbformat.read(fin, nbformat.NO_CONVERT).cells[0].source)
82
+ EOF
83
+ PDOC_ALLOW_EXEC=1 python -We -m pdoc -o html PySDM examples/PySDM_examples -t docs/templates --math --mermaid
76
84
  - if: ${{ github.ref == 'refs/heads/main' && matrix.platform == 'ubuntu-latest' }}
77
85
  uses: JamesIves/github-pages-deploy-action@4.1.1
78
86
  with:
@@ -122,8 +130,8 @@ jobs:
122
130
  needs: [pdoc, nojit_and_codecov, zenodo_json]
123
131
  strategy:
124
132
  matrix:
125
- platform: [ubuntu-latest, macos-12, macos-14, windows-latest]
126
- python-version: ["3.9", "3.11"]
133
+ platform: [ubuntu-latest, macos-13, macos-14, windows-latest]
134
+ python-version: ["3.9", "3.12"]
127
135
  test-suite: ["unit_tests/!(dynamics)", "unit_tests/dynamics/!(condensation)", "unit_tests/dynamics/condensation", "smoke_tests/no_env", "smoke_tests/box", "smoke_tests/parcel_a", "smoke_tests/parcel_b", "smoke_tests/parcel_c", "smoke_tests/kinematic_1d", "smoke_tests/kinematic_2d", "tutorials_tests"]
128
136
  exclude:
129
137
  - platform: "macos-14"
@@ -188,8 +196,8 @@ jobs:
188
196
  needs: [nojit_and_codecov]
189
197
  strategy:
190
198
  matrix:
191
- platform: [ubuntu-24.04, macos-12, windows-latest]
192
- python-version: ["3.9", "3.11"]
199
+ platform: [ubuntu-24.04, macos-13, windows-latest]
200
+ python-version: ["3.9", "3.12"]
193
201
  runs-on: ${{ matrix.platform }}
194
202
  steps:
195
203
  - uses: actions/checkout@v4.1.6
@@ -224,12 +232,12 @@ jobs:
224
232
  needs: [examples-setup]
225
233
  strategy:
226
234
  matrix:
227
- platform: [ubuntu-24.04, macos-12, windows-latest]
228
- python-version: ["3.9", "3.11"]
235
+ platform: [ubuntu-24.04, macos-13, windows-latest]
236
+ python-version: ["3.9", "3.12"]
229
237
  test-suite: [ "chemistry_freezing_isotopes", "condensation_a", "condensation_b", "coagulation", "breakup", "multi-process_a", "multi-process_b"]
230
238
  fail-fast: false
231
239
  runs-on: ${{ matrix.platform }}
232
- timeout-minutes: ${{ startsWith(matrix.platform, 'windows-') && 65 || 50 }}
240
+ timeout-minutes: ${{ !startsWith(matrix.platform, 'ubuntu-') && 65 || 50 }}
233
241
  steps:
234
242
  - uses: actions/checkout@v4.1.6
235
243
  with:
@@ -266,6 +274,7 @@ jobs:
266
274
  run: |
267
275
  brew install --cask paraview
268
276
  echo `dirname /Applications/ParaView-*.app/Contents/bin/pvpython | head -1` >> $GITHUB_PATH
277
+ brew install ghostscript
269
278
 
270
279
  - if: startsWith(matrix.platform, 'windows-') && matrix.test-suite == 'multi-process_a'
271
280
  run: |
@@ -309,7 +318,7 @@ jobs:
309
318
  fetch-depth: 0 # https://github.com/pypa/setuptools_scm/issues/480
310
319
  - uses: actions/setup-python@v5.0.0
311
320
  with:
312
- python-version: "3.11"
321
+ python-version: "3.12"
313
322
 
314
323
  - run: pip install twine build
315
324
 
@@ -317,7 +326,11 @@ jobs:
317
326
  unset CI
318
327
  cd ${{ matrix.packages-dir }}
319
328
  python -m build 2>&1 | tee build.log
320
- exit `fgrep -i warning build.log | grep -v impl_numba/warnings.py | grep -v "no previously-included files matching" | wc -l`
329
+ exit `fgrep -i warning build.log | grep -v impl_numba/warnings.py \
330
+ | grep -v "no previously-included files matching" \
331
+ | grep -v "version of {dist_name} already set" \
332
+ | grep -v -E "UserWarning: version of PySDM(-examples)? already set" \
333
+ | wc -l`
321
334
  twine check --strict dist/*
322
335
 
323
336
  - uses: actions/upload-artifact@v4
@@ -328,8 +341,8 @@ jobs:
328
341
  pkg_install_check:
329
342
  strategy:
330
343
  matrix:
331
- platform: [ubuntu-latest, macos-12, macos-14, windows-latest]
332
- python-version: ["3.9", "3.11"]
344
+ platform: [ubuntu-latest, macos-13, macos-14, windows-latest]
345
+ python-version: ["3.9", "3.12"]
333
346
  exclude:
334
347
  - platform: macos-14
335
348
  python-version: "3.9"
@@ -58,6 +58,11 @@
58
58
  "name": "Mackay, J. Ben",
59
59
  "orcid": "0000-0001-8677-3562"
60
60
  },
61
+ {
62
+ "affiliation": "AGH University of Krakow, Poland",
63
+ "name": "Magnuszewski, Paweł",
64
+ "orcid": "0009-0007-9269-6795"
65
+ },
61
66
  {
62
67
  "affiliation": "California Institute of Technology, Pasadena, CA, USA",
63
68
  "name": "Mints, Mikhail"
pysdm-2.81/PKG-INFO ADDED
@@ -0,0 +1,209 @@
1
+ Metadata-Version: 2.1
2
+ Name: PySDM
3
+ Version: 2.81
4
+ Summary: Pythonic particle-based (super-droplet) warm-rain/aqueous-chemistry cloud microphysics package with box, parcel & 1D/2D prescribed-flow examples in Python, Julia and Matlab
5
+ Home-page: https://github.com/open-atmos/PySDM
6
+ Author: https://github.com/open-atmos/PySDM/graphs/contributors
7
+ Author-email: sylwester.arabas@agh.edu.pl
8
+ License: GPL-3.0
9
+ Project-URL: Tracker, https://github.com/open-atmos/PySDM/issues
10
+ Project-URL: Documentation, https://open-atmos.github.io/PySDM
11
+ Project-URL: Source, https://github.com/open-atmos/PySDM
12
+ Keywords: physics-simulation,monte-carlo-simulation,gpu-computing,atmospheric-modelling,particle-system,numba,thrust,nvrtc,pint,atmospheric-physics
13
+ Classifier: Development Status :: 4 - Beta
14
+ Classifier: Intended Audience :: Science/Research
15
+ Classifier: License :: OSI Approved :: GNU General Public License v3 (GPLv3)
16
+ Classifier: Operating System :: OS Independent
17
+ Classifier: Programming Language :: Python :: 3
18
+ Classifier: Topic :: Scientific/Engineering
19
+ Classifier: Topic :: Scientific/Engineering :: Atmospheric Science
20
+ Classifier: Topic :: Scientific/Engineering :: Mathematics
21
+ Classifier: Topic :: Scientific/Engineering :: Physics
22
+ Classifier: Topic :: Software Development :: Libraries
23
+ Description-Content-Type: text/markdown
24
+ License-File: LICENSE
25
+ Requires-Dist: ThrustRTC==0.3.20
26
+ Requires-Dist: CURandRTC>=0.1.2
27
+ Requires-Dist: numba>=0.51.2
28
+ Requires-Dist: numpy
29
+ Requires-Dist: Pint
30
+ Requires-Dist: chempy
31
+ Requires-Dist: scipy
32
+ Requires-Dist: pyevtk
33
+ Requires-Dist: flexparser<0.4
34
+ Provides-Extra: tests
35
+ Requires-Dist: matplotlib; extra == "tests"
36
+ Requires-Dist: pytest; extra == "tests"
37
+ Requires-Dist: pytest-timeout; extra == "tests"
38
+ Requires-Dist: pyrcel; extra == "tests"
39
+ Requires-Dist: jupyter-core<5.0.0; extra == "tests"
40
+ Requires-Dist: ipywidgets!=8.0.3; extra == "tests"
41
+
42
+ # <img src="https://raw.githubusercontent.com/open-atmos/PySDM/main/.github/pysdm_logo.png" width=100 height=146 alt="pysdm logo">
43
+
44
+ [![Python 3](https://img.shields.io/static/v1?label=Python&logo=Python&color=3776AB&message=3)](https://www.python.org/)
45
+ [![LLVM](https://img.shields.io/static/v1?label=LLVM&logo=LLVM&color=gold&message=Numba)](https://numba.pydata.org)
46
+ [![CUDA](https://img.shields.io/static/v1?label=CUDA&logo=nVidia&color=87ce3e&message=ThrustRTC)](https://pypi.org/project/ThrustRTC/)
47
+ [![Linux OK](https://img.shields.io/static/v1?label=Linux&logo=Linux&color=yellow&message=%E2%9C%93)](https://en.wikipedia.org/wiki/Linux)
48
+ [![macOS OK](https://img.shields.io/static/v1?label=macOS&logo=Apple&color=silver&message=%E2%9C%93)](https://en.wikipedia.org/wiki/macOS)
49
+ [![Windows OK](https://img.shields.io/static/v1?label=Windows&logo=Windows&color=white&message=%E2%9C%93)](https://en.wikipedia.org/wiki/Windows)
50
+ [![Jupyter](https://img.shields.io/static/v1?label=Jupyter&logo=Jupyter&color=f37626&message=%E2%9C%93)](https://jupyter.org/)
51
+ [![Maintenance](https://img.shields.io/badge/Maintained%3F-yes-green.svg)](https://github.com/open-atmos/PySDM/graphs/commit-activity)
52
+ [![OpenHub](https://www.openhub.net/p/atmos-cloud-sim-uj-PySDM/widgets/project_thin_badge?format=gif)](https://www.openhub.net/p/atmos-cloud-sim-uj-PySDM)
53
+ [![status](https://joss.theoj.org/papers/62cad07440b941f73f57d187df1aa6e9/status.svg)](https://joss.theoj.org/papers/62cad07440b941f73f57d187df1aa6e9)
54
+ [![DOI](https://zenodo.org/badge/199064632.svg)](https://zenodo.org/badge/latestdoi/199064632)
55
+ [![EU Funding](https://img.shields.io/static/v1?label=EU%20Funding%20by&color=103069&message=FNP&logoWidth=25&logo=image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAC4AAAAeCAYAAABTwyyaAAAEzklEQVRYw9WYS2yUVRiGn3P5ZzozpZ3aUsrNgoKlKBINmkhpCCwwxIAhsDCpBBIWhmCMMYTEhSJ4i9EgBnSBEm81MRrFBhNXEuUSMCopiRWLQqEGLNgr085M5//POS46NNYFzHQ6qGc1i5nzP/P973m/9ztCrf7A8T9csiibCocUbvTzfxLcAcaM3cY3imXz25lT3Y34G7gQYAKV3+bFAHcATlBTPogJNADG92iY28FHW97kyPbnuW/W7xgzAhukQ9xe04PJeOT0HkQRwK0TlEeGWb/kOO9v3kdD3a8YK9GhDMfa6mg9fxunOm/lWPtcpDI4K7n/jnN8+uQbrFrUSiwU/DtSEUB/MsKKBT+zYslJqiYNgVE4JwhHkzy86wlWvrKVWDSZ/YFjZlU39yw4y/rGoyQGowWB67zl4QQue+jssMdXrQvZ/00jyeHwqCgDKwnsiJjSvkYAxsG5K9WsenYbJdqAtAjhCIxCSZt/4fK1w5A2WCvxrUAKCHwNVoA2aGmvq11jJQQapEXrgMBKqmJJugejKGWLIxXrBPFoigfv/omd675gRkU/xgqUDlAhH3UDaAAlLSqUQekAYyVTyhLs3tDMsvntlIYzOFcEcOcEGd9jx9oDbGs6QO0t/Tijxi9S4bhzxiWaVh5m94Zm0n7oui4ybo0raUlcncQnxx+g+WgDF/vLoYDmoqSl/dJUnt7XRCoTZjij0Z6Pc2LiNS4EBBkNvoeOJXN+yPWWSZeANOhwJq/98nKVwNdoL8B5AROxBKBL0gjh8DMhdCh3eJnrA0yqhLpplwmyup6IajvAOIGfKGVx3VmCRGnOMpe5QAdG0bT8CAeeep0d6z6nqjSJnQiZWEllLMWrmz6k+fE9rGk8MVqYgsGv5ZH2i1Opr+9kajzB5d74hKQ+KS3d/WVMLhtgdu1lriRiOR/4nDVunaR24x7qp3UV5Cb/fJvC83nv26W81LIK58SYNFmwq4hsGx/5BwKlzYRma2NUthgOJSew4i7ru9nJYCQF5tApb2yvjiDQKJV/IfJKh0o6qssSLKv/jcAoRKHQQzE2Lj2OMV5OkWFc4MZIpsev8uXWXRx6ZicbGk8QZLxxgwe+x/rlR3h3816+f2E7lbEU+ZDn3vKVpePCdFovzCISHqbl5EIoQOteKMPB1rto65zNyfOz+KOrGl06lHPQyi/WOohH0/T0l1MZH6A3GUEKl7Pmr2la6wBrBWWRDP2DUcqjKVKBGom9RZmABAykwnglafpSJSPQvsfiOR0EQ7ExVmazA8cY6N4K1iw6RdAXRwi4mgrheT5Dvs4LeuS81a15Ll/3dQisFVSVpnj7sf1sX/sZvhAc+6UOrQyBVUQ8gx/orFmDsZqtaw/y1qZ9zKjp5vDpenyjcNe+cLNmTiUdf/bEOddVQ0VpgsOn54ET+EYxvWKALSu+5tGG76it7MNaiZKGQ23zCIcMfUMxBnrjN3fmHHvCAlp+vJcXWx6itqoXpAEnUNLx8iMfo5Xh1i17R3PJYCpC2cZ3qK3sQ8WGEDDuXlAQuFKGHzpmopXhTNfk0bmxs7uC1w6uJul79AxFkMIiBJy5UoUWjrZLU5DCFdTARDHuDqVw+OkSwI0MCEW4gtNF2BPrBCo8fKNbtILWX9aUDqFqHnn7AAAAAElFTkSuQmCC)](https://www.fnp.org.pl/en/)
56
+ [![PL Funding](https://img.shields.io/static/v1?label=PL%20Funding%20by&color=d21132&message=NCN&logoWidth=25&logo=image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAANCAYAAACpUE5eAAAABmJLR0QA/wD/AP+gvaeTAAAAKUlEQVQ4jWP8////fwYqAiZqGjZqIHUAy4dJS6lqIOMdEZvRZDPcDQQAb3cIaY1Sbi4AAAAASUVORK5CYII=)](https://www.ncn.gov.pl/?language=en)
57
+ [![US Funding](https://img.shields.io/static/v1?label=US%20DOE%20Funding%20by&color=267c32&message=ASR&logoWidth=25&logo=image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAQCAMAAAA25D/gAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAASFBMVEVOTXyyIjRDQnNZWINZWITtzdFUU4BVVIFVVYHWiZM9PG/KZnNXVoJaWYT67/FKSXhgX4hgX4lcW4VbWoX03uHQeIN2VXj///9pZChlAAAAAWJLR0QXC9aYjwAAAAd0SU1FB+EICRMGJV+KCCQAAABdSURBVBjThdBJDoAgEETRkkkZBBX0/kd11QTTpH1/STqpAAwWBkobSlkGbt0o5xmEfqxDZJB2Q6XMoBwnVSbTylWp0hi42rmbwTOYPDfR5Kc+07IIUQQvghX9THsBHcES8/SiF0kAAAAldEVYdGRhdGU6Y3JlYXRlADIwMTctMDgtMDlUMTk6MDY6MzcrMDA6MDCX1tBgAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDE3LTA4LTA5VDE5OjA2OjM3KzAwOjAw5oto3AAAAABJRU5ErkJggg==)](https://asr.science.energy.gov/)
58
+
59
+ [![License: GPL v3](https://img.shields.io/badge/License-GPL%20v3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0.html)
60
+
61
+ [![Github Actions Build Status](https://github.com/open-atmos/PySDM/workflows/tests+artifacts+pypi/badge.svg?branch=main)](https://github.com/open-atmos/PySDM/actions)
62
+ [![Appveyor Build status](http://ci.appveyor.com/api/projects/status/github/open-atmos/PySDM?branch=main&svg=true)](https://ci.appveyor.com/project/slayoo/pysdm/branch/main)
63
+ [![Coverage Status](https://codecov.io/gh/open-atmos/PySDM/branch/main/graph/badge.svg)](https://app.codecov.io/gh/open-atmos/PySDM)
64
+ [![PyPI version](https://badge.fury.io/py/PySDM.svg)](https://pypi.org/project/PySDM)
65
+ [![API docs](https://shields.mitmproxy.org/badge/docs-pdoc.dev-brightgreen.svg)](https://open-atmos.github.io/PySDM/)
66
+
67
+ PySDM is a package for simulating the dynamics of population of particles.
68
+ It is intended to serve as a building block for simulation systems modelling
69
+ fluid flows involving a dispersed phase,
70
+ with PySDM being responsible for representation of the dispersed phase.
71
+ Currently, the development is focused on atmospheric cloud physics
72
+ applications, in particular on modelling the dynamics of particles immersed in moist air
73
+ using the particle-based (a.k.a. super-droplet) approach
74
+ to represent aerosol/cloud/rain microphysics.
75
+ The package features a Pythonic high-performance implementation of the
76
+ Super-Droplet Method (SDM) Monte-Carlo algorithm for representing collisional growth
77
+ ([Shima et al. 2009](https://rmets.onlinelibrary.wiley.com/doi/abs/10.1002/qj.441)), hence the name.
78
+
79
+ There is a growing set of example Jupyter notebooks exemplifying how to perform
80
+ various types of calculations and simulations using PySDM.
81
+ Most of the example notebooks reproduce results and plot from literature, see below for
82
+ a list of examples and links to the notebooks (which can be either executed or viewed
83
+ "in the cloud").
84
+
85
+ There are also a growing set of [tutorials](https://github.com/open-atmos/PySDM/tree/main/tutorials), also in the form of Jupyter notebooks.
86
+ These tutorials are intended for teaching purposes and include short explanations of cloud microphysical
87
+ concepts paired with widgets for running interactive simulations using PySDM.
88
+ Each tutorial also comes with a set of questions at the end that can be used as homework problems.
89
+ Like the examples, these tutorials can be executed or viewed "in the cloud" making it an especially
90
+ easy way for students to get started.
91
+
92
+ PySDM has two alternative parallel number-crunching backends
93
+ available: multi-threaded CPU backend based on [Numba](http://numba.pydata.org/)
94
+ and GPU-resident backend built on top of [ThrustRTC](https://pypi.org/project/ThrustRTC/).
95
+ The [`Numba`](https://open-atmos.github.io/PySDM/PySDM/backends/numba.html) backend (aliased ``CPU``) features multi-threaded parallelism for
96
+ multi-core CPUs, it uses the just-in-time compilation technique based on the LLVM infrastructure.
97
+ The [`ThrustRTC`](https://open-atmos.github.io/PySDM/PySDM/backends/thrust_rtc.html) backend (aliased ``GPU``) offers GPU-resident operation of PySDM
98
+ leveraging the [SIMT](https://en.wikipedia.org/wiki/Single_instruction,_multiple_threads)
99
+ parallelisation model.
100
+ Using the ``GPU`` backend requires nVidia hardware and [CUDA driver](https://developer.nvidia.com/cuda-downloads).
101
+
102
+ For an overview of PySDM features (and the preferred way to cite PySDM in papers), please refer to our JOSS papers:
103
+ - [Bartman et al. 2022](https://doi.org/10.21105/joss.03219) (PySDM v1).
104
+ - [de Jong, Singer et al. 2023](https://doi.org/10.21105/joss.04968) (PySDM v2).
105
+
106
+ PySDM includes an extension of the SDM scheme to represent collisional breakup described in [de Jong, Mackay et al. 2023](10.5194/gmd-16-4193-2023).
107
+ For a list of talks and other materials on PySDM as well as a list of published papers featuring PySDM simulations, see the [project wiki](https://github.com/open-atmos/PySDM/wiki).
108
+
109
+ A [pdoc-generated](https://pdoc.dev/) documentation of PySDM public API is maintained at: [https://open-atmos.github.io/PySDM](https://open-atmos.github.io/PySDM)
110
+
111
+ ## Example Jupyter notebooks (reproducing results from literature):
112
+
113
+ See [PySDM-examples README](https://github.com/open-atmos/PySDM/blob/main/examples/README.md).
114
+
115
+ ![animation](https://github.com/open-atmos/PySDM/wiki/files/kinematic_2D_example.gif)
116
+
117
+ ## Dependencies and Installation
118
+
119
+ PySDM dependencies are: [Numpy](https://numpy.org/), [Numba](http://numba.pydata.org/), [SciPy](https://scipy.org/),
120
+ [Pint](https://pint.readthedocs.io/), [chempy](https://pypi.org/project/chempy/),
121
+ [pyevtk](https://pypi.org/project/pyevtk/),
122
+ [ThrustRTC](https://fynv.github.io/ThrustRTC/) and [CURandRTC](https://github.com/fynv/CURandRTC).
123
+
124
+ To install PySDM using ``pip``, use: ``pip install PySDM``
125
+ (or ``pip install git+https://github.com/open-atmos/PySDM.git`` to get updates
126
+ beyond the latest release).
127
+
128
+ Conda users may use ``pip`` as well, see the [Installing non-conda packages](https://docs.conda.io/projects/conda/en/latest/user-guide/tasks/manage-pkgs.html#installing-non-conda-packages) section in the conda docs. Dependencies of PySDM are available at the following conda channels:
129
+ - numba: [numba](https://anaconda.org/numba/numba)
130
+ - conda-forge: [pyevtk](https://anaconda.org/conda-forge/pyevtk), [pint](https://anaconda.org/conda-forge/pint) and []()
131
+ - fyplus: [ThrustRTC](https://anaconda.org/fyplus/thrustrtc), [CURandRTC](https://anaconda.org/fyplus/curandrtc)
132
+ - bjodah: [chempy](https://anaconda.org/bjodah/chempy)
133
+ - nvidia: [cudatoolkit](https://anaconda.org/nvidia/cudatoolkit)
134
+
135
+ For development purposes, we suggest cloning the repository and installing it using ``pip -e``.
136
+ Test-time dependencies can be installed with ``pip -e .[tests]``.
137
+
138
+ PySDM examples constitute the [``PySDM-examples``](https://github.com/open-atmos/PySDM-examples) package.
139
+ The examples have additional dependencies listed in [``PySDM_examples`` package ``setup.py``](https://github.com/open-atmos/PySDM/blob/main/examples/setup.py) file.
140
+ Running the example Jupyter notebooks requires the ``PySDM_examples`` package to be installed.
141
+ The suggested install and launch steps are:
142
+ ```
143
+ git clone https://github.com/open-atmos/PySDM.git
144
+ pip install -e PySDM
145
+ pip install -e PySDM/examples
146
+ jupyter-notebook PySDM/examples/PySDM_examples
147
+ ```
148
+ Alternatively, one can also install the examples package from pypi.org by
149
+ using ``pip install PySDM-examples`` (note that this does not apply to notebooks itself,
150
+ only the supporting .py files).
151
+
152
+ ## Contributing, reporting issues, seeking support
153
+
154
+ #### Our technologicial stack:
155
+ [![Python 3](https://img.shields.io/static/v1?label=+&logo=Python&color=darkred&message=Python)](https://www.python.org/)
156
+ [![Numba](https://img.shields.io/static/v1?label=+&logo=Numba&color=orange&message=Numba)](https://numba.pydata.org)
157
+ [![LLVM](https://img.shields.io/static/v1?label=+&logo=LLVM&color=gold&message=LLVM)](https://llvm.org)
158
+ [![CUDA](https://img.shields.io/static/v1?label=+&logo=nVidia&color=darkgreen&message=ThrustRTC/CUDA)](https://pypi.org/project/ThrustRTC/)
159
+ [![NumPy](https://img.shields.io/static/v1?label=+&logo=numpy&color=blue&message=NumPy)](https://numpy.org/)
160
+ [![pytest](https://img.shields.io/static/v1?label=+&logo=pytest&color=purple&message=pytest)](https://pytest.org/)
161
+ [![Colab](https://img.shields.io/static/v1?label=+&logo=googlecolab&color=darkred&message=Colab)](https://colab.research.google.com/)
162
+ [![Codecov](https://img.shields.io/static/v1?label=+&logo=codecov&color=orange&message=Codecov)](https://codecov.io/)
163
+ [![PyPI](https://img.shields.io/static/v1?label=+&logo=pypi&color=gold&message=PyPI)](https://pypi.org/)
164
+ [![GithubActions](https://img.shields.io/static/v1?label=+&logo=github&color=darkgreen&message=GitHub&nbsp;Actions)](https://github.com/features/actions)
165
+ [![Jupyter](https://img.shields.io/static/v1?label=+&logo=Jupyter&color=blue&message=Jupyter)](https://jupyter.org/)
166
+ [![PyCharm](https://img.shields.io/static/v1?label=+&logo=pycharm&color=purple&message=PyCharm)](https:///)
167
+
168
+ Submitting new code to the project, please preferably use [GitHub pull requests](https://github.com/open-atmos/PySDM/pulls) - it helps to keep record of code authorship,
169
+ track and archive the code review workflow and allows to benefit
170
+ from the continuous integration setup which automates execution of tests
171
+ with the newly added code.
172
+
173
+ Code contributions are assumed to imply transfer of copyright.
174
+ Should there be a need to make an exception, please indicate it when creating
175
+ a pull request or contributing code in any other way. In any case,
176
+ the license of the contributed code must be compatible with GPL v3.
177
+
178
+ Developing the code, we follow [The Way of Python](https://www.python.org/dev/peps/pep-0020/) and
179
+ the [KISS principle](https://en.wikipedia.org/wiki/KISS_principle).
180
+ The codebase has greatly benefited from [PyCharm code inspections](https://www.jetbrains.com/help/pycharm/code-inspection.html)
181
+ and [Pylint](https://pylint.org), [Black](https://black.readthedocs.io/en/stable/) and [isort](https://pycqa.github.io/isort/)
182
+ code analysis (which are all part of the CI workflows).
183
+
184
+ We also use [pre-commit hooks](https://pre-commit.com).
185
+ In our case, the hooks modify files and re-format them.
186
+ The pre-commit hooks can be run locally, and then the resultant changes need to be staged before committing.
187
+ To set up the hooks locally, install pre-commit via `pip install pre-commit` and
188
+ set up the git hooks via `pre-commit install` (this needs to be done every time you clone the project).
189
+ To run all pre-commit hooks, run `pre-commit run --all-files`.
190
+ The `.pre-commit-config.yaml` file can be modified in case new hooks are to be added or
191
+ existing ones need to be altered.
192
+
193
+ Further hints addressed at PySDM developers are maintained in the [open-atmos/python-dev-hints Wiki](https://github.com/open-atmos/python-dev-hints/wiki).
194
+
195
+ Issues regarding any incorrect, unintuitive or undocumented bahaviour of
196
+ PySDM are best to be reported on the [GitHub issue tracker](https://github.com/open-atmos/PySDM/issues/new).
197
+ Feature requests are recorded in the "Ideas..." [PySDM wiki page](https://github.com/open-atmos/PySDM/wiki/Ideas-for-new-features-and-examples).
198
+
199
+ We encourage to use the [GitHub Discussions](https://github.com/open-atmos/PySDM/discussions) feature
200
+ (rather than the issue tracker) for seeking support in understanding, using and extending PySDM code.
201
+
202
+ We look forward to your contributions and feedback.
203
+
204
+ ## Licensing:
205
+
206
+ copyright: [Jagiellonian University](https://en.uj.edu.pl/en) (2019-2023) & [AGH University of Krakow](https://agh.edu.pl/en) (2023-...)
207
+ licence: [GPL v3](https://www.gnu.org/licenses/gpl-3.0.html)
208
+
209
+
@@ -0,0 +1,20 @@
1
+ # pylint:disable=invalid-name
2
+ """
3
+ .. include:: ../docs/markdown/pysdm_landing.md
4
+ """
5
+
6
+ from importlib.metadata import PackageNotFoundError, version
7
+
8
+ from PySDM.attributes.impl.attribute_registry import register_attribute
9
+
10
+ from . import attributes
11
+ from . import environments, exporters, products
12
+ from .builder import Builder
13
+ from .formulae import Formulae
14
+ from .particulator import Particulator
15
+
16
+ try:
17
+ __version__ = version(__name__)
18
+ except PackageNotFoundError:
19
+ # package is not installed
20
+ pass
@@ -21,6 +21,9 @@ class CoolingRate(DerivedAttribute):
21
21
  builder.particulator.observers.append(self)
22
22
 
23
23
  def notify(self):
24
+ """triggers update to ensure recalculation is done before
25
+ overwriting `self.prev_T` with current temperature"""
26
+ self.update()
24
27
  cell_id = self.particulator.attributes["cell id"]
25
28
  self.prev_T[:] = self.particulator.environment["T"][cell_id]
26
29
 
@@ -0,0 +1,209 @@
1
+ Metadata-Version: 2.1
2
+ Name: PySDM
3
+ Version: 2.81
4
+ Summary: Pythonic particle-based (super-droplet) warm-rain/aqueous-chemistry cloud microphysics package with box, parcel & 1D/2D prescribed-flow examples in Python, Julia and Matlab
5
+ Home-page: https://github.com/open-atmos/PySDM
6
+ Author: https://github.com/open-atmos/PySDM/graphs/contributors
7
+ Author-email: sylwester.arabas@agh.edu.pl
8
+ License: GPL-3.0
9
+ Project-URL: Tracker, https://github.com/open-atmos/PySDM/issues
10
+ Project-URL: Documentation, https://open-atmos.github.io/PySDM
11
+ Project-URL: Source, https://github.com/open-atmos/PySDM
12
+ Keywords: physics-simulation,monte-carlo-simulation,gpu-computing,atmospheric-modelling,particle-system,numba,thrust,nvrtc,pint,atmospheric-physics
13
+ Classifier: Development Status :: 4 - Beta
14
+ Classifier: Intended Audience :: Science/Research
15
+ Classifier: License :: OSI Approved :: GNU General Public License v3 (GPLv3)
16
+ Classifier: Operating System :: OS Independent
17
+ Classifier: Programming Language :: Python :: 3
18
+ Classifier: Topic :: Scientific/Engineering
19
+ Classifier: Topic :: Scientific/Engineering :: Atmospheric Science
20
+ Classifier: Topic :: Scientific/Engineering :: Mathematics
21
+ Classifier: Topic :: Scientific/Engineering :: Physics
22
+ Classifier: Topic :: Software Development :: Libraries
23
+ Description-Content-Type: text/markdown
24
+ License-File: LICENSE
25
+ Requires-Dist: ThrustRTC==0.3.20
26
+ Requires-Dist: CURandRTC>=0.1.2
27
+ Requires-Dist: numba>=0.51.2
28
+ Requires-Dist: numpy
29
+ Requires-Dist: Pint
30
+ Requires-Dist: chempy
31
+ Requires-Dist: scipy
32
+ Requires-Dist: pyevtk
33
+ Requires-Dist: flexparser<0.4
34
+ Provides-Extra: tests
35
+ Requires-Dist: matplotlib; extra == "tests"
36
+ Requires-Dist: pytest; extra == "tests"
37
+ Requires-Dist: pytest-timeout; extra == "tests"
38
+ Requires-Dist: pyrcel; extra == "tests"
39
+ Requires-Dist: jupyter-core<5.0.0; extra == "tests"
40
+ Requires-Dist: ipywidgets!=8.0.3; extra == "tests"
41
+
42
+ # <img src="https://raw.githubusercontent.com/open-atmos/PySDM/main/.github/pysdm_logo.png" width=100 height=146 alt="pysdm logo">
43
+
44
+ [![Python 3](https://img.shields.io/static/v1?label=Python&logo=Python&color=3776AB&message=3)](https://www.python.org/)
45
+ [![LLVM](https://img.shields.io/static/v1?label=LLVM&logo=LLVM&color=gold&message=Numba)](https://numba.pydata.org)
46
+ [![CUDA](https://img.shields.io/static/v1?label=CUDA&logo=nVidia&color=87ce3e&message=ThrustRTC)](https://pypi.org/project/ThrustRTC/)
47
+ [![Linux OK](https://img.shields.io/static/v1?label=Linux&logo=Linux&color=yellow&message=%E2%9C%93)](https://en.wikipedia.org/wiki/Linux)
48
+ [![macOS OK](https://img.shields.io/static/v1?label=macOS&logo=Apple&color=silver&message=%E2%9C%93)](https://en.wikipedia.org/wiki/macOS)
49
+ [![Windows OK](https://img.shields.io/static/v1?label=Windows&logo=Windows&color=white&message=%E2%9C%93)](https://en.wikipedia.org/wiki/Windows)
50
+ [![Jupyter](https://img.shields.io/static/v1?label=Jupyter&logo=Jupyter&color=f37626&message=%E2%9C%93)](https://jupyter.org/)
51
+ [![Maintenance](https://img.shields.io/badge/Maintained%3F-yes-green.svg)](https://github.com/open-atmos/PySDM/graphs/commit-activity)
52
+ [![OpenHub](https://www.openhub.net/p/atmos-cloud-sim-uj-PySDM/widgets/project_thin_badge?format=gif)](https://www.openhub.net/p/atmos-cloud-sim-uj-PySDM)
53
+ [![status](https://joss.theoj.org/papers/62cad07440b941f73f57d187df1aa6e9/status.svg)](https://joss.theoj.org/papers/62cad07440b941f73f57d187df1aa6e9)
54
+ [![DOI](https://zenodo.org/badge/199064632.svg)](https://zenodo.org/badge/latestdoi/199064632)
55
+ [![EU Funding](https://img.shields.io/static/v1?label=EU%20Funding%20by&color=103069&message=FNP&logoWidth=25&logo=image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAC4AAAAeCAYAAABTwyyaAAAEzklEQVRYw9WYS2yUVRiGn3P5ZzozpZ3aUsrNgoKlKBINmkhpCCwwxIAhsDCpBBIWhmCMMYTEhSJ4i9EgBnSBEm81MRrFBhNXEuUSMCopiRWLQqEGLNgr085M5//POS46NNYFzHQ6qGc1i5nzP/P973m/9ztCrf7A8T9csiibCocUbvTzfxLcAcaM3cY3imXz25lT3Y34G7gQYAKV3+bFAHcATlBTPogJNADG92iY28FHW97kyPbnuW/W7xgzAhukQ9xe04PJeOT0HkQRwK0TlEeGWb/kOO9v3kdD3a8YK9GhDMfa6mg9fxunOm/lWPtcpDI4K7n/jnN8+uQbrFrUSiwU/DtSEUB/MsKKBT+zYslJqiYNgVE4JwhHkzy86wlWvrKVWDSZ/YFjZlU39yw4y/rGoyQGowWB67zl4QQue+jssMdXrQvZ/00jyeHwqCgDKwnsiJjSvkYAxsG5K9WsenYbJdqAtAjhCIxCSZt/4fK1w5A2WCvxrUAKCHwNVoA2aGmvq11jJQQapEXrgMBKqmJJugejKGWLIxXrBPFoigfv/omd675gRkU/xgqUDlAhH3UDaAAlLSqUQekAYyVTyhLs3tDMsvntlIYzOFcEcOcEGd9jx9oDbGs6QO0t/Tijxi9S4bhzxiWaVh5m94Zm0n7oui4ybo0raUlcncQnxx+g+WgDF/vLoYDmoqSl/dJUnt7XRCoTZjij0Z6Pc2LiNS4EBBkNvoeOJXN+yPWWSZeANOhwJq/98nKVwNdoL8B5AROxBKBL0gjh8DMhdCh3eJnrA0yqhLpplwmyup6IajvAOIGfKGVx3VmCRGnOMpe5QAdG0bT8CAeeep0d6z6nqjSJnQiZWEllLMWrmz6k+fE9rGk8MVqYgsGv5ZH2i1Opr+9kajzB5d74hKQ+KS3d/WVMLhtgdu1lriRiOR/4nDVunaR24x7qp3UV5Cb/fJvC83nv26W81LIK58SYNFmwq4hsGx/5BwKlzYRma2NUthgOJSew4i7ru9nJYCQF5tApb2yvjiDQKJV/IfJKh0o6qssSLKv/jcAoRKHQQzE2Lj2OMV5OkWFc4MZIpsev8uXWXRx6ZicbGk8QZLxxgwe+x/rlR3h3816+f2E7lbEU+ZDn3vKVpePCdFovzCISHqbl5EIoQOteKMPB1rto65zNyfOz+KOrGl06lHPQyi/WOohH0/T0l1MZH6A3GUEKl7Pmr2la6wBrBWWRDP2DUcqjKVKBGom9RZmABAykwnglafpSJSPQvsfiOR0EQ7ExVmazA8cY6N4K1iw6RdAXRwi4mgrheT5Dvs4LeuS81a15Ll/3dQisFVSVpnj7sf1sX/sZvhAc+6UOrQyBVUQ8gx/orFmDsZqtaw/y1qZ9zKjp5vDpenyjcNe+cLNmTiUdf/bEOddVQ0VpgsOn54ET+EYxvWKALSu+5tGG76it7MNaiZKGQ23zCIcMfUMxBnrjN3fmHHvCAlp+vJcXWx6itqoXpAEnUNLx8iMfo5Xh1i17R3PJYCpC2cZ3qK3sQ8WGEDDuXlAQuFKGHzpmopXhTNfk0bmxs7uC1w6uJul79AxFkMIiBJy5UoUWjrZLU5DCFdTARDHuDqVw+OkSwI0MCEW4gtNF2BPrBCo8fKNbtILWX9aUDqFqHnn7AAAAAElFTkSuQmCC)](https://www.fnp.org.pl/en/)
56
+ [![PL Funding](https://img.shields.io/static/v1?label=PL%20Funding%20by&color=d21132&message=NCN&logoWidth=25&logo=image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAANCAYAAACpUE5eAAAABmJLR0QA/wD/AP+gvaeTAAAAKUlEQVQ4jWP8////fwYqAiZqGjZqIHUAy4dJS6lqIOMdEZvRZDPcDQQAb3cIaY1Sbi4AAAAASUVORK5CYII=)](https://www.ncn.gov.pl/?language=en)
57
+ [![US Funding](https://img.shields.io/static/v1?label=US%20DOE%20Funding%20by&color=267c32&message=ASR&logoWidth=25&logo=image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAQCAMAAAA25D/gAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAASFBMVEVOTXyyIjRDQnNZWINZWITtzdFUU4BVVIFVVYHWiZM9PG/KZnNXVoJaWYT67/FKSXhgX4hgX4lcW4VbWoX03uHQeIN2VXj///9pZChlAAAAAWJLR0QXC9aYjwAAAAd0SU1FB+EICRMGJV+KCCQAAABdSURBVBjThdBJDoAgEETRkkkZBBX0/kd11QTTpH1/STqpAAwWBkobSlkGbt0o5xmEfqxDZJB2Q6XMoBwnVSbTylWp0hi42rmbwTOYPDfR5Kc+07IIUQQvghX9THsBHcES8/SiF0kAAAAldEVYdGRhdGU6Y3JlYXRlADIwMTctMDgtMDlUMTk6MDY6MzcrMDA6MDCX1tBgAAAAJXRFWHRkYXRlOm1vZGlmeQAyMDE3LTA4LTA5VDE5OjA2OjM3KzAwOjAw5oto3AAAAABJRU5ErkJggg==)](https://asr.science.energy.gov/)
58
+
59
+ [![License: GPL v3](https://img.shields.io/badge/License-GPL%20v3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0.html)
60
+
61
+ [![Github Actions Build Status](https://github.com/open-atmos/PySDM/workflows/tests+artifacts+pypi/badge.svg?branch=main)](https://github.com/open-atmos/PySDM/actions)
62
+ [![Appveyor Build status](http://ci.appveyor.com/api/projects/status/github/open-atmos/PySDM?branch=main&svg=true)](https://ci.appveyor.com/project/slayoo/pysdm/branch/main)
63
+ [![Coverage Status](https://codecov.io/gh/open-atmos/PySDM/branch/main/graph/badge.svg)](https://app.codecov.io/gh/open-atmos/PySDM)
64
+ [![PyPI version](https://badge.fury.io/py/PySDM.svg)](https://pypi.org/project/PySDM)
65
+ [![API docs](https://shields.mitmproxy.org/badge/docs-pdoc.dev-brightgreen.svg)](https://open-atmos.github.io/PySDM/)
66
+
67
+ PySDM is a package for simulating the dynamics of population of particles.
68
+ It is intended to serve as a building block for simulation systems modelling
69
+ fluid flows involving a dispersed phase,
70
+ with PySDM being responsible for representation of the dispersed phase.
71
+ Currently, the development is focused on atmospheric cloud physics
72
+ applications, in particular on modelling the dynamics of particles immersed in moist air
73
+ using the particle-based (a.k.a. super-droplet) approach
74
+ to represent aerosol/cloud/rain microphysics.
75
+ The package features a Pythonic high-performance implementation of the
76
+ Super-Droplet Method (SDM) Monte-Carlo algorithm for representing collisional growth
77
+ ([Shima et al. 2009](https://rmets.onlinelibrary.wiley.com/doi/abs/10.1002/qj.441)), hence the name.
78
+
79
+ There is a growing set of example Jupyter notebooks exemplifying how to perform
80
+ various types of calculations and simulations using PySDM.
81
+ Most of the example notebooks reproduce results and plot from literature, see below for
82
+ a list of examples and links to the notebooks (which can be either executed or viewed
83
+ "in the cloud").
84
+
85
+ There are also a growing set of [tutorials](https://github.com/open-atmos/PySDM/tree/main/tutorials), also in the form of Jupyter notebooks.
86
+ These tutorials are intended for teaching purposes and include short explanations of cloud microphysical
87
+ concepts paired with widgets for running interactive simulations using PySDM.
88
+ Each tutorial also comes with a set of questions at the end that can be used as homework problems.
89
+ Like the examples, these tutorials can be executed or viewed "in the cloud" making it an especially
90
+ easy way for students to get started.
91
+
92
+ PySDM has two alternative parallel number-crunching backends
93
+ available: multi-threaded CPU backend based on [Numba](http://numba.pydata.org/)
94
+ and GPU-resident backend built on top of [ThrustRTC](https://pypi.org/project/ThrustRTC/).
95
+ The [`Numba`](https://open-atmos.github.io/PySDM/PySDM/backends/numba.html) backend (aliased ``CPU``) features multi-threaded parallelism for
96
+ multi-core CPUs, it uses the just-in-time compilation technique based on the LLVM infrastructure.
97
+ The [`ThrustRTC`](https://open-atmos.github.io/PySDM/PySDM/backends/thrust_rtc.html) backend (aliased ``GPU``) offers GPU-resident operation of PySDM
98
+ leveraging the [SIMT](https://en.wikipedia.org/wiki/Single_instruction,_multiple_threads)
99
+ parallelisation model.
100
+ Using the ``GPU`` backend requires nVidia hardware and [CUDA driver](https://developer.nvidia.com/cuda-downloads).
101
+
102
+ For an overview of PySDM features (and the preferred way to cite PySDM in papers), please refer to our JOSS papers:
103
+ - [Bartman et al. 2022](https://doi.org/10.21105/joss.03219) (PySDM v1).
104
+ - [de Jong, Singer et al. 2023](https://doi.org/10.21105/joss.04968) (PySDM v2).
105
+
106
+ PySDM includes an extension of the SDM scheme to represent collisional breakup described in [de Jong, Mackay et al. 2023](10.5194/gmd-16-4193-2023).
107
+ For a list of talks and other materials on PySDM as well as a list of published papers featuring PySDM simulations, see the [project wiki](https://github.com/open-atmos/PySDM/wiki).
108
+
109
+ A [pdoc-generated](https://pdoc.dev/) documentation of PySDM public API is maintained at: [https://open-atmos.github.io/PySDM](https://open-atmos.github.io/PySDM)
110
+
111
+ ## Example Jupyter notebooks (reproducing results from literature):
112
+
113
+ See [PySDM-examples README](https://github.com/open-atmos/PySDM/blob/main/examples/README.md).
114
+
115
+ ![animation](https://github.com/open-atmos/PySDM/wiki/files/kinematic_2D_example.gif)
116
+
117
+ ## Dependencies and Installation
118
+
119
+ PySDM dependencies are: [Numpy](https://numpy.org/), [Numba](http://numba.pydata.org/), [SciPy](https://scipy.org/),
120
+ [Pint](https://pint.readthedocs.io/), [chempy](https://pypi.org/project/chempy/),
121
+ [pyevtk](https://pypi.org/project/pyevtk/),
122
+ [ThrustRTC](https://fynv.github.io/ThrustRTC/) and [CURandRTC](https://github.com/fynv/CURandRTC).
123
+
124
+ To install PySDM using ``pip``, use: ``pip install PySDM``
125
+ (or ``pip install git+https://github.com/open-atmos/PySDM.git`` to get updates
126
+ beyond the latest release).
127
+
128
+ Conda users may use ``pip`` as well, see the [Installing non-conda packages](https://docs.conda.io/projects/conda/en/latest/user-guide/tasks/manage-pkgs.html#installing-non-conda-packages) section in the conda docs. Dependencies of PySDM are available at the following conda channels:
129
+ - numba: [numba](https://anaconda.org/numba/numba)
130
+ - conda-forge: [pyevtk](https://anaconda.org/conda-forge/pyevtk), [pint](https://anaconda.org/conda-forge/pint) and []()
131
+ - fyplus: [ThrustRTC](https://anaconda.org/fyplus/thrustrtc), [CURandRTC](https://anaconda.org/fyplus/curandrtc)
132
+ - bjodah: [chempy](https://anaconda.org/bjodah/chempy)
133
+ - nvidia: [cudatoolkit](https://anaconda.org/nvidia/cudatoolkit)
134
+
135
+ For development purposes, we suggest cloning the repository and installing it using ``pip -e``.
136
+ Test-time dependencies can be installed with ``pip -e .[tests]``.
137
+
138
+ PySDM examples constitute the [``PySDM-examples``](https://github.com/open-atmos/PySDM-examples) package.
139
+ The examples have additional dependencies listed in [``PySDM_examples`` package ``setup.py``](https://github.com/open-atmos/PySDM/blob/main/examples/setup.py) file.
140
+ Running the example Jupyter notebooks requires the ``PySDM_examples`` package to be installed.
141
+ The suggested install and launch steps are:
142
+ ```
143
+ git clone https://github.com/open-atmos/PySDM.git
144
+ pip install -e PySDM
145
+ pip install -e PySDM/examples
146
+ jupyter-notebook PySDM/examples/PySDM_examples
147
+ ```
148
+ Alternatively, one can also install the examples package from pypi.org by
149
+ using ``pip install PySDM-examples`` (note that this does not apply to notebooks itself,
150
+ only the supporting .py files).
151
+
152
+ ## Contributing, reporting issues, seeking support
153
+
154
+ #### Our technologicial stack:
155
+ [![Python 3](https://img.shields.io/static/v1?label=+&logo=Python&color=darkred&message=Python)](https://www.python.org/)
156
+ [![Numba](https://img.shields.io/static/v1?label=+&logo=Numba&color=orange&message=Numba)](https://numba.pydata.org)
157
+ [![LLVM](https://img.shields.io/static/v1?label=+&logo=LLVM&color=gold&message=LLVM)](https://llvm.org)
158
+ [![CUDA](https://img.shields.io/static/v1?label=+&logo=nVidia&color=darkgreen&message=ThrustRTC/CUDA)](https://pypi.org/project/ThrustRTC/)
159
+ [![NumPy](https://img.shields.io/static/v1?label=+&logo=numpy&color=blue&message=NumPy)](https://numpy.org/)
160
+ [![pytest](https://img.shields.io/static/v1?label=+&logo=pytest&color=purple&message=pytest)](https://pytest.org/)
161
+ [![Colab](https://img.shields.io/static/v1?label=+&logo=googlecolab&color=darkred&message=Colab)](https://colab.research.google.com/)
162
+ [![Codecov](https://img.shields.io/static/v1?label=+&logo=codecov&color=orange&message=Codecov)](https://codecov.io/)
163
+ [![PyPI](https://img.shields.io/static/v1?label=+&logo=pypi&color=gold&message=PyPI)](https://pypi.org/)
164
+ [![GithubActions](https://img.shields.io/static/v1?label=+&logo=github&color=darkgreen&message=GitHub&nbsp;Actions)](https://github.com/features/actions)
165
+ [![Jupyter](https://img.shields.io/static/v1?label=+&logo=Jupyter&color=blue&message=Jupyter)](https://jupyter.org/)
166
+ [![PyCharm](https://img.shields.io/static/v1?label=+&logo=pycharm&color=purple&message=PyCharm)](https:///)
167
+
168
+ Submitting new code to the project, please preferably use [GitHub pull requests](https://github.com/open-atmos/PySDM/pulls) - it helps to keep record of code authorship,
169
+ track and archive the code review workflow and allows to benefit
170
+ from the continuous integration setup which automates execution of tests
171
+ with the newly added code.
172
+
173
+ Code contributions are assumed to imply transfer of copyright.
174
+ Should there be a need to make an exception, please indicate it when creating
175
+ a pull request or contributing code in any other way. In any case,
176
+ the license of the contributed code must be compatible with GPL v3.
177
+
178
+ Developing the code, we follow [The Way of Python](https://www.python.org/dev/peps/pep-0020/) and
179
+ the [KISS principle](https://en.wikipedia.org/wiki/KISS_principle).
180
+ The codebase has greatly benefited from [PyCharm code inspections](https://www.jetbrains.com/help/pycharm/code-inspection.html)
181
+ and [Pylint](https://pylint.org), [Black](https://black.readthedocs.io/en/stable/) and [isort](https://pycqa.github.io/isort/)
182
+ code analysis (which are all part of the CI workflows).
183
+
184
+ We also use [pre-commit hooks](https://pre-commit.com).
185
+ In our case, the hooks modify files and re-format them.
186
+ The pre-commit hooks can be run locally, and then the resultant changes need to be staged before committing.
187
+ To set up the hooks locally, install pre-commit via `pip install pre-commit` and
188
+ set up the git hooks via `pre-commit install` (this needs to be done every time you clone the project).
189
+ To run all pre-commit hooks, run `pre-commit run --all-files`.
190
+ The `.pre-commit-config.yaml` file can be modified in case new hooks are to be added or
191
+ existing ones need to be altered.
192
+
193
+ Further hints addressed at PySDM developers are maintained in the [open-atmos/python-dev-hints Wiki](https://github.com/open-atmos/python-dev-hints/wiki).
194
+
195
+ Issues regarding any incorrect, unintuitive or undocumented bahaviour of
196
+ PySDM are best to be reported on the [GitHub issue tracker](https://github.com/open-atmos/PySDM/issues/new).
197
+ Feature requests are recorded in the "Ideas..." [PySDM wiki page](https://github.com/open-atmos/PySDM/wiki/Ideas-for-new-features-and-examples).
198
+
199
+ We encourage to use the [GitHub Discussions](https://github.com/open-atmos/PySDM/discussions) feature
200
+ (rather than the issue tracker) for seeking support in understanding, using and extending PySDM code.
201
+
202
+ We look forward to your contributions and feedback.
203
+
204
+ ## Licensing:
205
+
206
+ copyright: [Jagiellonian University](https://en.uj.edu.pl/en) (2019-2023) & [AGH University of Krakow](https://agh.edu.pl/en) (2023-...)
207
+ licence: [GPL v3](https://www.gnu.org/licenses/gpl-3.0.html)
208
+
209
+