PySDM 2.71__tar.gz → 2.73__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 (865) hide show
  1. {PySDM-2.71 → PySDM-2.73}/.github/workflows/tests+artifacts+pypi.yml +2 -3
  2. {PySDM-2.71 → PySDM-2.73}/PKG-INFO +26 -26
  3. {PySDM-2.71 → PySDM-2.73}/PySDM/builder.py +1 -2
  4. {PySDM-2.71 → PySDM-2.73}/PySDM/environments/box.py +2 -0
  5. PySDM-2.73/PySDM/environments/impl/__init__.py +3 -0
  6. PySDM-2.73/PySDM/environments/impl/register_environment.py +24 -0
  7. {PySDM-2.71 → PySDM-2.73}/PySDM/environments/kinematic_1d.py +4 -2
  8. {PySDM-2.71 → PySDM-2.73}/PySDM/environments/kinematic_2d.py +3 -2
  9. {PySDM-2.71 → PySDM-2.73}/PySDM/environments/parcel.py +2 -0
  10. {PySDM-2.71 → PySDM-2.73}/PySDM.egg-info/PKG-INFO +26 -26
  11. {PySDM-2.71 → PySDM-2.73}/PySDM.egg-info/SOURCES.txt +4 -1
  12. {PySDM-2.71 → PySDM-2.73}/README.md +25 -25
  13. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Abade_and_Albuquerque_2024/simulation.py +9 -10
  14. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Abdul_Razzak_Ghan_2000/run_ARG_parcel.py +3 -2
  15. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Alpert_and_Knopf_2016/simulation.py +6 -2
  16. PySDM-2.73/examples/PySDM_examples/Arabas_et_al_2023/aida.ipynb +4944 -0
  17. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Arabas_et_al_2023/fig_A2.ipynb +4 -5
  18. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Arabas_et_al_2023/make_particulator.py +2 -2
  19. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Bieli_et_al_2022/simulation.py +4 -3
  20. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Grabowski_and_Pawlowska_2023/simulation.py +9 -9
  21. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Graf_et_al_2019/figure_4.ipynb +2 -2
  22. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Jensen_and_Nugent_2017/simulation.py +13 -13
  23. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Kreidenweis_et_al_2003/simulation.py +9 -11
  24. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Lowe_et_al_2019/simulation.py +9 -10
  25. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Pyrcel/simulation.py +13 -11
  26. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Rozanski_and_Sonntag_1982/figs_4_5_6.ipynb +1 -1
  27. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Shipway_and_Hill_2012/simulation.py +3 -3
  28. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Szumowski_et_al_1998/simulation.py +6 -2
  29. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/deJong_Azimi/simulation_0D.py +4 -3
  30. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/deJong_Mackay_et_al_2023/simulation_0D.py +8 -6
  31. PySDM-2.73/pdoc_templates/index.html.jinja2 +23 -0
  32. {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/box/partmc/test_dry_wet_equilibration.py +4 -5
  33. {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/parcel_c/abdul_razzak_ghan_2000/test_single_supersaturation_peak.py +17 -11
  34. {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/attributes/test_critical_supersaturation.py +1 -1
  35. {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/attributes/test_reynolds_number.py +3 -3
  36. {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/backends/test_freezing_methods.py +8 -8
  37. {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/dummy_environment.py +7 -5
  38. {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/dummy_particulator.py +1 -1
  39. {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/dynamics/collisions/test_sdm_breakup.py +1 -1
  40. {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/dynamics/condensation/test_diagnostics.py +2 -0
  41. {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/dynamics/condensation/test_parcel_sanity_checks.py +3 -3
  42. {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/dynamics/test_eulerian_advection.py +1 -1
  43. PySDM-2.73/tests/unit_tests/environments/test_impl.py +59 -0
  44. PySDM-2.73/tests/unit_tests/products/__init__.py +0 -0
  45. {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/products/test_averaged_terminal_velocity.py +3 -2
  46. {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/products/test_collision_rates.py +5 -5
  47. {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/products/test_concentration_product.py +2 -2
  48. {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/products/test_cooling_rate.py +3 -2
  49. {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/products/test_effective_radii.py +1 -1
  50. {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/products/test_parcel_liquid_water_path.py +11 -11
  51. {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/test_builder.py +1 -1
  52. PySDM-2.71/.github/workflows/pdoc_index_workaround.py +0 -21
  53. PySDM-2.71/PySDM/environments/impl/__init__.py +0 -1
  54. PySDM-2.71/examples/PySDM_examples/Arabas_et_al_2023/aida.ipynb +0 -420
  55. {PySDM-2.71 → PySDM-2.73}/.appveyor.yml +0 -0
  56. {PySDM-2.71 → PySDM-2.73}/.binder/apt.txt +0 -0
  57. {PySDM-2.71 → PySDM-2.73}/.binder/postBuild +0 -0
  58. {PySDM-2.71 → PySDM-2.73}/.binder/requirements.txt +0 -0
  59. {PySDM-2.71 → PySDM-2.73}/.codecov.yml +0 -0
  60. {PySDM-2.71 → PySDM-2.73}/.github/dependabot.yml +0 -0
  61. {PySDM-2.71 → PySDM-2.73}/.github/workflows/cancel.yml +0 -0
  62. {PySDM-2.71 → PySDM-2.73}/.github/workflows/joss.yml +0 -0
  63. {PySDM-2.71 → PySDM-2.73}/.github/workflows/joss_paper.yml +0 -0
  64. {PySDM-2.71 → PySDM-2.73}/.github/workflows/readme_snippets.yml +0 -0
  65. {PySDM-2.71 → PySDM-2.73}/.github/workflows/stale.yml +0 -0
  66. {PySDM-2.71 → PySDM-2.73}/.gitignore +0 -0
  67. {PySDM-2.71 → PySDM-2.73}/.gitmodules +0 -0
  68. {PySDM-2.71 → PySDM-2.73}/.pre-commit-config.yaml +0 -0
  69. {PySDM-2.71 → PySDM-2.73}/.zenodo.json +0 -0
  70. {PySDM-2.71 → PySDM-2.73}/LICENSE +0 -0
  71. {PySDM-2.71 → PySDM-2.73}/PySDM/__init__.py +0 -0
  72. {PySDM-2.71 → PySDM-2.73}/PySDM/attributes/__init__.py +0 -0
  73. {PySDM-2.71 → PySDM-2.73}/PySDM/attributes/chemistry/__init__.py +0 -0
  74. {PySDM-2.71 → PySDM-2.73}/PySDM/attributes/chemistry/acidity.py +0 -0
  75. {PySDM-2.71 → PySDM-2.73}/PySDM/attributes/chemistry/concentration.py +0 -0
  76. {PySDM-2.71 → PySDM-2.73}/PySDM/attributes/chemistry/hydrogen_ion_concentration.py +0 -0
  77. {PySDM-2.71 → PySDM-2.73}/PySDM/attributes/ice/__init__.py +0 -0
  78. {PySDM-2.71 → PySDM-2.73}/PySDM/attributes/ice/cooling_rate.py +0 -0
  79. {PySDM-2.71 → PySDM-2.73}/PySDM/attributes/ice/freezing_temperature.py +0 -0
  80. {PySDM-2.71 → PySDM-2.73}/PySDM/attributes/ice/immersed_surface_area.py +0 -0
  81. {PySDM-2.71 → PySDM-2.73}/PySDM/attributes/impl/__init__.py +0 -0
  82. {PySDM-2.71 → PySDM-2.73}/PySDM/attributes/impl/attribute.py +0 -0
  83. {PySDM-2.71 → PySDM-2.73}/PySDM/attributes/impl/attribute_registry.py +0 -0
  84. {PySDM-2.71 → PySDM-2.73}/PySDM/attributes/impl/base_attribute.py +0 -0
  85. {PySDM-2.71 → PySDM-2.73}/PySDM/attributes/impl/cell_attribute.py +0 -0
  86. {PySDM-2.71 → PySDM-2.73}/PySDM/attributes/impl/derived_attribute.py +0 -0
  87. {PySDM-2.71 → PySDM-2.73}/PySDM/attributes/impl/dummy_attribute.py +0 -0
  88. {PySDM-2.71 → PySDM-2.73}/PySDM/attributes/impl/extensive_attribute.py +0 -0
  89. {PySDM-2.71 → PySDM-2.73}/PySDM/attributes/impl/intensive_attribute.py +0 -0
  90. {PySDM-2.71 → PySDM-2.73}/PySDM/attributes/impl/maximum_attribute.py +0 -0
  91. {PySDM-2.71 → PySDM-2.73}/PySDM/attributes/impl/mole_amount.py +0 -0
  92. {PySDM-2.71 → PySDM-2.73}/PySDM/attributes/isotopes/__init__.py +0 -0
  93. {PySDM-2.71 → PySDM-2.73}/PySDM/attributes/isotopes/delta.py +0 -0
  94. {PySDM-2.71 → PySDM-2.73}/PySDM/attributes/isotopes/moles.py +0 -0
  95. {PySDM-2.71 → PySDM-2.73}/PySDM/attributes/numerics/__init__.py +0 -0
  96. {PySDM-2.71 → PySDM-2.73}/PySDM/attributes/numerics/cell_id.py +0 -0
  97. {PySDM-2.71 → PySDM-2.73}/PySDM/attributes/numerics/cell_origin.py +0 -0
  98. {PySDM-2.71 → PySDM-2.73}/PySDM/attributes/numerics/position_in_cell.py +0 -0
  99. {PySDM-2.71 → PySDM-2.73}/PySDM/attributes/physics/__init__.py +0 -0
  100. {PySDM-2.71 → PySDM-2.73}/PySDM/attributes/physics/area.py +0 -0
  101. {PySDM-2.71 → PySDM-2.73}/PySDM/attributes/physics/critical_supersaturation.py +0 -0
  102. {PySDM-2.71 → PySDM-2.73}/PySDM/attributes/physics/critical_volume.py +0 -0
  103. {PySDM-2.71 → PySDM-2.73}/PySDM/attributes/physics/dry_radius.py +0 -0
  104. {PySDM-2.71 → PySDM-2.73}/PySDM/attributes/physics/dry_volume.py +0 -0
  105. {PySDM-2.71 → PySDM-2.73}/PySDM/attributes/physics/equilibrium_supersaturation.py +0 -0
  106. {PySDM-2.71 → PySDM-2.73}/PySDM/attributes/physics/heat.py +0 -0
  107. {PySDM-2.71 → PySDM-2.73}/PySDM/attributes/physics/hygroscopicity.py +0 -0
  108. {PySDM-2.71 → PySDM-2.73}/PySDM/attributes/physics/multiplicity.py +0 -0
  109. {PySDM-2.71 → PySDM-2.73}/PySDM/attributes/physics/radius.py +0 -0
  110. {PySDM-2.71 → PySDM-2.73}/PySDM/attributes/physics/relative_fall_velocity.py +0 -0
  111. {PySDM-2.71 → PySDM-2.73}/PySDM/attributes/physics/reynolds_number.py +0 -0
  112. {PySDM-2.71 → PySDM-2.73}/PySDM/attributes/physics/temperature.py +0 -0
  113. {PySDM-2.71 → PySDM-2.73}/PySDM/attributes/physics/terminal_velocity.py +0 -0
  114. {PySDM-2.71 → PySDM-2.73}/PySDM/attributes/physics/volume.py +0 -0
  115. {PySDM-2.71 → PySDM-2.73}/PySDM/attributes/physics/water_mass.py +0 -0
  116. {PySDM-2.71 → PySDM-2.73}/PySDM/backends/__init__.py +0 -0
  117. {PySDM-2.71 → PySDM-2.73}/PySDM/backends/impl_common/__init__.py +0 -0
  118. {PySDM-2.71 → PySDM-2.73}/PySDM/backends/impl_common/backend_methods.py +0 -0
  119. {PySDM-2.71 → PySDM-2.73}/PySDM/backends/impl_common/freezing_attributes.py +0 -0
  120. {PySDM-2.71 → PySDM-2.73}/PySDM/backends/impl_common/index.py +0 -0
  121. {PySDM-2.71 → PySDM-2.73}/PySDM/backends/impl_common/indexed_storage.py +0 -0
  122. {PySDM-2.71 → PySDM-2.73}/PySDM/backends/impl_common/pair_indicator.py +0 -0
  123. {PySDM-2.71 → PySDM-2.73}/PySDM/backends/impl_common/pairwise_storage.py +0 -0
  124. {PySDM-2.71 → PySDM-2.73}/PySDM/backends/impl_common/random_common.py +0 -0
  125. {PySDM-2.71 → PySDM-2.73}/PySDM/backends/impl_common/storage_utils.py +0 -0
  126. {PySDM-2.71 → PySDM-2.73}/PySDM/backends/impl_numba/__init__.py +0 -0
  127. {PySDM-2.71 → PySDM-2.73}/PySDM/backends/impl_numba/atomic_operations.py +0 -0
  128. {PySDM-2.71 → PySDM-2.73}/PySDM/backends/impl_numba/conf.py +0 -0
  129. {PySDM-2.71 → PySDM-2.73}/PySDM/backends/impl_numba/methods/__init__.py +0 -0
  130. {PySDM-2.71 → PySDM-2.73}/PySDM/backends/impl_numba/methods/chemistry_methods.py +0 -0
  131. {PySDM-2.71 → PySDM-2.73}/PySDM/backends/impl_numba/methods/collisions_methods.py +0 -0
  132. {PySDM-2.71 → PySDM-2.73}/PySDM/backends/impl_numba/methods/condensation_methods.py +0 -0
  133. {PySDM-2.71 → PySDM-2.73}/PySDM/backends/impl_numba/methods/displacement_methods.py +0 -0
  134. {PySDM-2.71 → PySDM-2.73}/PySDM/backends/impl_numba/methods/fragmentation_methods.py +0 -0
  135. {PySDM-2.71 → PySDM-2.73}/PySDM/backends/impl_numba/methods/freezing_methods.py +0 -0
  136. {PySDM-2.71 → PySDM-2.73}/PySDM/backends/impl_numba/methods/index_methods.py +0 -0
  137. {PySDM-2.71 → PySDM-2.73}/PySDM/backends/impl_numba/methods/isotope_methods.py +0 -0
  138. {PySDM-2.71 → PySDM-2.73}/PySDM/backends/impl_numba/methods/moments_methods.py +0 -0
  139. {PySDM-2.71 → PySDM-2.73}/PySDM/backends/impl_numba/methods/pair_methods.py +0 -0
  140. {PySDM-2.71 → PySDM-2.73}/PySDM/backends/impl_numba/methods/physics_methods.py +0 -0
  141. {PySDM-2.71 → PySDM-2.73}/PySDM/backends/impl_numba/methods/terminal_velocity_methods.py +0 -0
  142. {PySDM-2.71 → PySDM-2.73}/PySDM/backends/impl_numba/random.py +0 -0
  143. {PySDM-2.71 → PySDM-2.73}/PySDM/backends/impl_numba/storage.py +0 -0
  144. {PySDM-2.71 → PySDM-2.73}/PySDM/backends/impl_numba/storage_impl.py +0 -0
  145. {PySDM-2.71 → PySDM-2.73}/PySDM/backends/impl_numba/test_helpers/__init__.py +0 -0
  146. {PySDM-2.71 → PySDM-2.73}/PySDM/backends/impl_numba/test_helpers/scipy_ode_condensation_solver.py +0 -0
  147. {PySDM-2.71 → PySDM-2.73}/PySDM/backends/impl_numba/toms748.py +0 -0
  148. {PySDM-2.71 → PySDM-2.73}/PySDM/backends/impl_numba/warnings.py +0 -0
  149. {PySDM-2.71 → PySDM-2.73}/PySDM/backends/impl_thrust_rtc/__init__.py +0 -0
  150. {PySDM-2.71 → PySDM-2.73}/PySDM/backends/impl_thrust_rtc/bisection.py +0 -0
  151. {PySDM-2.71 → PySDM-2.73}/PySDM/backends/impl_thrust_rtc/conf.py +0 -0
  152. {PySDM-2.71 → PySDM-2.73}/PySDM/backends/impl_thrust_rtc/methods/__init__.py +0 -0
  153. {PySDM-2.71 → PySDM-2.73}/PySDM/backends/impl_thrust_rtc/methods/collisions_methods.py +0 -0
  154. {PySDM-2.71 → PySDM-2.73}/PySDM/backends/impl_thrust_rtc/methods/condensation_methods.py +0 -0
  155. {PySDM-2.71 → PySDM-2.73}/PySDM/backends/impl_thrust_rtc/methods/displacement_methods.py +0 -0
  156. {PySDM-2.71 → PySDM-2.73}/PySDM/backends/impl_thrust_rtc/methods/freezing_methods.py +0 -0
  157. {PySDM-2.71 → PySDM-2.73}/PySDM/backends/impl_thrust_rtc/methods/index_methods.py +0 -0
  158. {PySDM-2.71 → PySDM-2.73}/PySDM/backends/impl_thrust_rtc/methods/isotope_methods.py +0 -0
  159. {PySDM-2.71 → PySDM-2.73}/PySDM/backends/impl_thrust_rtc/methods/moments_methods.py +0 -0
  160. {PySDM-2.71 → PySDM-2.73}/PySDM/backends/impl_thrust_rtc/methods/pair_methods.py +0 -0
  161. {PySDM-2.71 → PySDM-2.73}/PySDM/backends/impl_thrust_rtc/methods/physics_methods.py +0 -0
  162. {PySDM-2.71 → PySDM-2.73}/PySDM/backends/impl_thrust_rtc/methods/terminal_velocity_methods.py +0 -0
  163. {PySDM-2.71 → PySDM-2.73}/PySDM/backends/impl_thrust_rtc/methods/thrust_rtc_backend_methods.py +0 -0
  164. {PySDM-2.71 → PySDM-2.73}/PySDM/backends/impl_thrust_rtc/nice_thrust.py +0 -0
  165. {PySDM-2.71 → PySDM-2.73}/PySDM/backends/impl_thrust_rtc/random.py +0 -0
  166. {PySDM-2.71 → PySDM-2.73}/PySDM/backends/impl_thrust_rtc/storage.py +0 -0
  167. {PySDM-2.71 → PySDM-2.73}/PySDM/backends/impl_thrust_rtc/test_helpers/__init__.py +0 -0
  168. {PySDM-2.71 → PySDM-2.73}/PySDM/backends/impl_thrust_rtc/test_helpers/cpp2python.py +0 -0
  169. {PySDM-2.71 → PySDM-2.73}/PySDM/backends/impl_thrust_rtc/test_helpers/fake_thrust_rtc.py +0 -0
  170. {PySDM-2.71 → PySDM-2.73}/PySDM/backends/impl_thrust_rtc/test_helpers/flag.py +0 -0
  171. {PySDM-2.71 → PySDM-2.73}/PySDM/backends/numba.py +0 -0
  172. {PySDM-2.71 → PySDM-2.73}/PySDM/backends/thrust_rtc.py +0 -0
  173. {PySDM-2.71 → PySDM-2.73}/PySDM/dynamics/__init__.py +0 -0
  174. {PySDM-2.71 → PySDM-2.73}/PySDM/dynamics/ambient_thermodynamics.py +0 -0
  175. {PySDM-2.71 → PySDM-2.73}/PySDM/dynamics/aqueous_chemistry.py +0 -0
  176. {PySDM-2.71 → PySDM-2.73}/PySDM/dynamics/collisions/__init__.py +0 -0
  177. {PySDM-2.71 → PySDM-2.73}/PySDM/dynamics/collisions/breakup_efficiencies/__init__.py +0 -0
  178. {PySDM-2.71 → PySDM-2.73}/PySDM/dynamics/collisions/breakup_efficiencies/constEb.py +0 -0
  179. {PySDM-2.71 → PySDM-2.73}/PySDM/dynamics/collisions/breakup_fragmentations/__init__.py +0 -0
  180. {PySDM-2.71 → PySDM-2.73}/PySDM/dynamics/collisions/breakup_fragmentations/always_n.py +0 -0
  181. {PySDM-2.71 → PySDM-2.73}/PySDM/dynamics/collisions/breakup_fragmentations/constant_mass.py +0 -0
  182. {PySDM-2.71 → PySDM-2.73}/PySDM/dynamics/collisions/breakup_fragmentations/expon_frag.py +0 -0
  183. {PySDM-2.71 → PySDM-2.73}/PySDM/dynamics/collisions/breakup_fragmentations/exponential.py +0 -0
  184. {PySDM-2.71 → PySDM-2.73}/PySDM/dynamics/collisions/breakup_fragmentations/feingold1988.py +0 -0
  185. {PySDM-2.71 → PySDM-2.73}/PySDM/dynamics/collisions/breakup_fragmentations/gaussian.py +0 -0
  186. {PySDM-2.71 → PySDM-2.73}/PySDM/dynamics/collisions/breakup_fragmentations/impl/__init__.py +0 -0
  187. {PySDM-2.71 → PySDM-2.73}/PySDM/dynamics/collisions/breakup_fragmentations/impl/volume_based.py +0 -0
  188. {PySDM-2.71 → PySDM-2.73}/PySDM/dynamics/collisions/breakup_fragmentations/lowlist82.py +0 -0
  189. {PySDM-2.71 → PySDM-2.73}/PySDM/dynamics/collisions/breakup_fragmentations/slams.py +0 -0
  190. {PySDM-2.71 → PySDM-2.73}/PySDM/dynamics/collisions/breakup_fragmentations/straub2010.py +0 -0
  191. {PySDM-2.71 → PySDM-2.73}/PySDM/dynamics/collisions/coalescence_efficiencies/__init__.py +0 -0
  192. {PySDM-2.71 → PySDM-2.73}/PySDM/dynamics/collisions/coalescence_efficiencies/_gravitational.py +0 -0
  193. {PySDM-2.71 → PySDM-2.73}/PySDM/dynamics/collisions/coalescence_efficiencies/_parameterized.py +0 -0
  194. {PySDM-2.71 → PySDM-2.73}/PySDM/dynamics/collisions/coalescence_efficiencies/berry1967.py +0 -0
  195. {PySDM-2.71 → PySDM-2.73}/PySDM/dynamics/collisions/coalescence_efficiencies/constEc.py +0 -0
  196. {PySDM-2.71 → PySDM-2.73}/PySDM/dynamics/collisions/coalescence_efficiencies/lowlist1982.py +0 -0
  197. {PySDM-2.71 → PySDM-2.73}/PySDM/dynamics/collisions/coalescence_efficiencies/specified_eff.py +0 -0
  198. {PySDM-2.71 → PySDM-2.73}/PySDM/dynamics/collisions/coalescence_efficiencies/straub2010.py +0 -0
  199. {PySDM-2.71 → PySDM-2.73}/PySDM/dynamics/collisions/collision.py +0 -0
  200. {PySDM-2.71 → PySDM-2.73}/PySDM/dynamics/collisions/collision_kernels/__init__.py +0 -0
  201. {PySDM-2.71 → PySDM-2.73}/PySDM/dynamics/collisions/collision_kernels/constantK.py +0 -0
  202. {PySDM-2.71 → PySDM-2.73}/PySDM/dynamics/collisions/collision_kernels/electric.py +0 -0
  203. {PySDM-2.71 → PySDM-2.73}/PySDM/dynamics/collisions/collision_kernels/geometric.py +0 -0
  204. {PySDM-2.71 → PySDM-2.73}/PySDM/dynamics/collisions/collision_kernels/golovin.py +0 -0
  205. {PySDM-2.71 → PySDM-2.73}/PySDM/dynamics/collisions/collision_kernels/hydrodynamic.py +0 -0
  206. {PySDM-2.71 → PySDM-2.73}/PySDM/dynamics/collisions/collision_kernels/impl/__init__.py +0 -0
  207. {PySDM-2.71 → PySDM-2.73}/PySDM/dynamics/collisions/collision_kernels/impl/gravitational.py +0 -0
  208. {PySDM-2.71 → PySDM-2.73}/PySDM/dynamics/collisions/collision_kernels/impl/parameterized.py +0 -0
  209. {PySDM-2.71 → PySDM-2.73}/PySDM/dynamics/collisions/collision_kernels/linear.py +0 -0
  210. {PySDM-2.71 → PySDM-2.73}/PySDM/dynamics/collisions/collision_kernels/simple_geometric.py +0 -0
  211. {PySDM-2.71 → PySDM-2.73}/PySDM/dynamics/condensation.py +0 -0
  212. {PySDM-2.71 → PySDM-2.73}/PySDM/dynamics/displacement.py +0 -0
  213. {PySDM-2.71 → PySDM-2.73}/PySDM/dynamics/eulerian_advection.py +0 -0
  214. {PySDM-2.71 → PySDM-2.73}/PySDM/dynamics/freezing.py +0 -0
  215. {PySDM-2.71 → PySDM-2.73}/PySDM/dynamics/impl/__init__.py +0 -0
  216. {PySDM-2.71 → PySDM-2.73}/PySDM/dynamics/impl/chemistry_utils.py +0 -0
  217. {PySDM-2.71 → PySDM-2.73}/PySDM/dynamics/impl/random_generator_optimizer.py +0 -0
  218. {PySDM-2.71 → PySDM-2.73}/PySDM/dynamics/impl/random_generator_optimizer_nopair.py +0 -0
  219. {PySDM-2.71 → PySDM-2.73}/PySDM/dynamics/impl/register_dynamic.py +0 -0
  220. {PySDM-2.71 → PySDM-2.73}/PySDM/dynamics/isotopic_fractionation.py +0 -0
  221. {PySDM-2.71 → PySDM-2.73}/PySDM/dynamics/relaxed_velocity.py +0 -0
  222. {PySDM-2.71 → PySDM-2.73}/PySDM/dynamics/terminal_velocity/__init__.py +0 -0
  223. {PySDM-2.71 → PySDM-2.73}/PySDM/dynamics/terminal_velocity/gunn_and_kinzer.py +0 -0
  224. {PySDM-2.71 → PySDM-2.73}/PySDM/dynamics/terminal_velocity/power_series.py +0 -0
  225. {PySDM-2.71 → PySDM-2.73}/PySDM/dynamics/terminal_velocity/rogers_and_yau.py +0 -0
  226. {PySDM-2.71 → PySDM-2.73}/PySDM/environments/__init__.py +0 -0
  227. {PySDM-2.71 → PySDM-2.73}/PySDM/environments/impl/moist.py +0 -0
  228. {PySDM-2.71 → PySDM-2.73}/PySDM/exporters/__init__.py +0 -0
  229. {PySDM-2.71 → PySDM-2.73}/PySDM/exporters/netcdf_exporter.py +0 -0
  230. {PySDM-2.71 → PySDM-2.73}/PySDM/exporters/netcdf_exporter_1d.py +0 -0
  231. {PySDM-2.71 → PySDM-2.73}/PySDM/exporters/vtk_exporter.py +0 -0
  232. {PySDM-2.71 → PySDM-2.73}/PySDM/exporters/vtk_exporter_1d.py +0 -0
  233. {PySDM-2.71 → PySDM-2.73}/PySDM/formulae.py +0 -0
  234. {PySDM-2.71 → PySDM-2.73}/PySDM/impl/__init__.py +0 -0
  235. {PySDM-2.71 → PySDM-2.73}/PySDM/impl/arakawa_c.py +0 -0
  236. {PySDM-2.71 → PySDM-2.73}/PySDM/impl/camel_case.py +0 -0
  237. {PySDM-2.71 → PySDM-2.73}/PySDM/impl/mesh.py +0 -0
  238. {PySDM-2.71 → PySDM-2.73}/PySDM/impl/null_physics_class.py +0 -0
  239. {PySDM-2.71 → PySDM-2.73}/PySDM/impl/particle_attributes.py +0 -0
  240. {PySDM-2.71 → PySDM-2.73}/PySDM/impl/particle_attributes_factory.py +0 -0
  241. {PySDM-2.71 → PySDM-2.73}/PySDM/impl/wall_timer.py +0 -0
  242. {PySDM-2.71 → PySDM-2.73}/PySDM/initialisation/__init__.py +0 -0
  243. {PySDM-2.71 → PySDM-2.73}/PySDM/initialisation/aerosol_composition/__init__.py +0 -0
  244. {PySDM-2.71 → PySDM-2.73}/PySDM/initialisation/aerosol_composition/dry_aerosol.py +0 -0
  245. {PySDM-2.71 → PySDM-2.73}/PySDM/initialisation/discretise_multiplicities.py +0 -0
  246. {PySDM-2.71 → PySDM-2.73}/PySDM/initialisation/equilibrate_wet_radii.py +0 -0
  247. {PySDM-2.71 → PySDM-2.73}/PySDM/initialisation/impl/__init__.py +0 -0
  248. {PySDM-2.71 → PySDM-2.73}/PySDM/initialisation/impl/spectrum.py +0 -0
  249. {PySDM-2.71 → PySDM-2.73}/PySDM/initialisation/init_fall_momenta.py +0 -0
  250. {PySDM-2.71 → PySDM-2.73}/PySDM/initialisation/sampling/__init__.py +0 -0
  251. {PySDM-2.71 → PySDM-2.73}/PySDM/initialisation/sampling/spatial_sampling.py +0 -0
  252. {PySDM-2.71 → PySDM-2.73}/PySDM/initialisation/sampling/spectral_sampling.py +0 -0
  253. {PySDM-2.71 → PySDM-2.73}/PySDM/initialisation/sampling/spectro_glacial_sampling.py +0 -0
  254. {PySDM-2.71 → PySDM-2.73}/PySDM/initialisation/spectra/__init__.py +0 -0
  255. {PySDM-2.71 → PySDM-2.73}/PySDM/initialisation/spectra/exponential.py +0 -0
  256. {PySDM-2.71 → PySDM-2.73}/PySDM/initialisation/spectra/gamma.py +0 -0
  257. {PySDM-2.71 → PySDM-2.73}/PySDM/initialisation/spectra/gaussian.py +0 -0
  258. {PySDM-2.71 → PySDM-2.73}/PySDM/initialisation/spectra/lognormal.py +0 -0
  259. {PySDM-2.71 → PySDM-2.73}/PySDM/initialisation/spectra/sum.py +0 -0
  260. {PySDM-2.71 → PySDM-2.73}/PySDM/initialisation/spectra/top_hat.py +0 -0
  261. {PySDM-2.71 → PySDM-2.73}/PySDM/particulator.py +0 -0
  262. {PySDM-2.71 → PySDM-2.73}/PySDM/physics/__init__.py +0 -0
  263. {PySDM-2.71 → PySDM-2.73}/PySDM/physics/air_dynamic_viscosity/__init__.py +0 -0
  264. {PySDM-2.71 → PySDM-2.73}/PySDM/physics/air_dynamic_viscosity/zografos_et_al_1987.py +0 -0
  265. {PySDM-2.71 → PySDM-2.73}/PySDM/physics/bulk_phase_partitioning/__init__.py +0 -0
  266. {PySDM-2.71 → PySDM-2.73}/PySDM/physics/bulk_phase_partitioning/kaul_et_al_2015.py +0 -0
  267. {PySDM-2.71 → PySDM-2.73}/PySDM/physics/condensation_coordinate/__init__.py +0 -0
  268. {PySDM-2.71 → PySDM-2.73}/PySDM/physics/condensation_coordinate/volume.py +0 -0
  269. {PySDM-2.71 → PySDM-2.73}/PySDM/physics/condensation_coordinate/volume_logarithm.py +0 -0
  270. {PySDM-2.71 → PySDM-2.73}/PySDM/physics/constants.py +0 -0
  271. {PySDM-2.71 → PySDM-2.73}/PySDM/physics/constants_defaults.py +0 -0
  272. {PySDM-2.71 → PySDM-2.73}/PySDM/physics/diffusion_kinetics/__init__.py +0 -0
  273. {PySDM-2.71 → PySDM-2.73}/PySDM/physics/diffusion_kinetics/fuchs_sutugin.py +0 -0
  274. {PySDM-2.71 → PySDM-2.73}/PySDM/physics/diffusion_kinetics/grabowski_et_al_2011.py +0 -0
  275. {PySDM-2.71 → PySDM-2.73}/PySDM/physics/diffusion_kinetics/lowe_et_al_2019.py +0 -0
  276. {PySDM-2.71 → PySDM-2.73}/PySDM/physics/diffusion_kinetics/neglect.py +0 -0
  277. {PySDM-2.71 → PySDM-2.73}/PySDM/physics/diffusion_kinetics/pruppacher_and_klett_2005.py +0 -0
  278. {PySDM-2.71 → PySDM-2.73}/PySDM/physics/diffusion_thermics/__init__.py +0 -0
  279. {PySDM-2.71 → PySDM-2.73}/PySDM/physics/diffusion_thermics/grabowski_et_al_2011.py +0 -0
  280. {PySDM-2.71 → PySDM-2.73}/PySDM/physics/diffusion_thermics/lowe_et_al_2019.py +0 -0
  281. {PySDM-2.71 → PySDM-2.73}/PySDM/physics/diffusion_thermics/neglect.py +0 -0
  282. {PySDM-2.71 → PySDM-2.73}/PySDM/physics/diffusion_thermics/seinfeld_and_pandis_2010.py +0 -0
  283. {PySDM-2.71 → PySDM-2.73}/PySDM/physics/diffusion_thermics/tracy_welch_porter.py +0 -0
  284. {PySDM-2.71 → PySDM-2.73}/PySDM/physics/dimensional_analysis.py +0 -0
  285. {PySDM-2.71 → PySDM-2.73}/PySDM/physics/drop_growth/__init__.py +0 -0
  286. {PySDM-2.71 → PySDM-2.73}/PySDM/physics/drop_growth/mason_1951.py +0 -0
  287. {PySDM-2.71 → PySDM-2.73}/PySDM/physics/drop_growth/mason_1971.py +0 -0
  288. {PySDM-2.71 → PySDM-2.73}/PySDM/physics/fragmentation_function/__init__.py +0 -0
  289. {PySDM-2.71 → PySDM-2.73}/PySDM/physics/fragmentation_function/always_n.py +0 -0
  290. {PySDM-2.71 → PySDM-2.73}/PySDM/physics/fragmentation_function/constant_mass.py +0 -0
  291. {PySDM-2.71 → PySDM-2.73}/PySDM/physics/fragmentation_function/expon_frag.py +0 -0
  292. {PySDM-2.71 → PySDM-2.73}/PySDM/physics/fragmentation_function/exponential.py +0 -0
  293. {PySDM-2.71 → PySDM-2.73}/PySDM/physics/fragmentation_function/feingold1988.py +0 -0
  294. {PySDM-2.71 → PySDM-2.73}/PySDM/physics/fragmentation_function/gaussian.py +0 -0
  295. {PySDM-2.71 → PySDM-2.73}/PySDM/physics/fragmentation_function/lowlist82.py +0 -0
  296. {PySDM-2.71 → PySDM-2.73}/PySDM/physics/fragmentation_function/slams.py +0 -0
  297. {PySDM-2.71 → PySDM-2.73}/PySDM/physics/fragmentation_function/straub2010nf.py +0 -0
  298. {PySDM-2.71 → PySDM-2.73}/PySDM/physics/freezing_temperature_spectrum/__init__.py +0 -0
  299. {PySDM-2.71 → PySDM-2.73}/PySDM/physics/freezing_temperature_spectrum/bigg_1953.py +0 -0
  300. {PySDM-2.71 → PySDM-2.73}/PySDM/physics/freezing_temperature_spectrum/niemand_et_al_2012.py +0 -0
  301. {PySDM-2.71 → PySDM-2.73}/PySDM/physics/freezing_temperature_spectrum/null.py +0 -0
  302. {PySDM-2.71 → PySDM-2.73}/PySDM/physics/heterogeneous_ice_nucleation_rate/__init__.py +0 -0
  303. {PySDM-2.71 → PySDM-2.73}/PySDM/physics/heterogeneous_ice_nucleation_rate/abifm.py +0 -0
  304. {PySDM-2.71 → PySDM-2.73}/PySDM/physics/heterogeneous_ice_nucleation_rate/constant.py +0 -0
  305. {PySDM-2.71 → PySDM-2.73}/PySDM/physics/heterogeneous_ice_nucleation_rate/null.py +0 -0
  306. {PySDM-2.71 → PySDM-2.73}/PySDM/physics/hydrostatics/__init__.py +0 -0
  307. {PySDM-2.71 → PySDM-2.73}/PySDM/physics/hydrostatics/default.py +0 -0
  308. {PySDM-2.71 → PySDM-2.73}/PySDM/physics/hygroscopicity/__init__.py +0 -0
  309. {PySDM-2.71 → PySDM-2.73}/PySDM/physics/hygroscopicity/kappa_koehler.py +0 -0
  310. {PySDM-2.71 → PySDM-2.73}/PySDM/physics/hygroscopicity/kappa_koehler_leading_terms.py +0 -0
  311. {PySDM-2.71 → PySDM-2.73}/PySDM/physics/impl/__init__.py +0 -0
  312. {PySDM-2.71 → PySDM-2.73}/PySDM/physics/impl/fake_unit_registry.py +0 -0
  313. {PySDM-2.71 → PySDM-2.73}/PySDM/physics/impl/flag.py +0 -0
  314. {PySDM-2.71 → PySDM-2.73}/PySDM/physics/isotope_diffusivity_ratios/__init__.py +0 -0
  315. {PySDM-2.71 → PySDM-2.73}/PySDM/physics/isotope_diffusivity_ratios/grahams_law.py +0 -0
  316. {PySDM-2.71 → PySDM-2.73}/PySDM/physics/isotope_diffusivity_ratios/hellmann_and_harvey_2020.py +0 -0
  317. {PySDM-2.71 → PySDM-2.73}/PySDM/physics/isotope_diffusivity_ratios/stewart_1975.py +0 -0
  318. {PySDM-2.71 → PySDM-2.73}/PySDM/physics/isotope_equilibrium_fractionation_factors/__init__.py +0 -0
  319. {PySDM-2.71 → PySDM-2.73}/PySDM/physics/isotope_equilibrium_fractionation_factors/barkan_and_luz_2005.py +0 -0
  320. {PySDM-2.71 → PySDM-2.73}/PySDM/physics/isotope_equilibrium_fractionation_factors/ellehoj_et_al_2013.py +0 -0
  321. {PySDM-2.71 → PySDM-2.73}/PySDM/physics/isotope_equilibrium_fractionation_factors/horita_and_wesolowski_1994.py +0 -0
  322. {PySDM-2.71 → PySDM-2.73}/PySDM/physics/isotope_equilibrium_fractionation_factors/lamb_et_al_2017.py +0 -0
  323. {PySDM-2.71 → PySDM-2.73}/PySDM/physics/isotope_equilibrium_fractionation_factors/majoube_1970.py +0 -0
  324. {PySDM-2.71 → PySDM-2.73}/PySDM/physics/isotope_equilibrium_fractionation_factors/majoube_1971.py +0 -0
  325. {PySDM-2.71 → PySDM-2.73}/PySDM/physics/isotope_equilibrium_fractionation_factors/merlivat_and_nief_1967.py +0 -0
  326. {PySDM-2.71 → PySDM-2.73}/PySDM/physics/isotope_equilibrium_fractionation_factors/van_hook_1968.py +0 -0
  327. {PySDM-2.71 → PySDM-2.73}/PySDM/physics/isotope_meteoric_water_line_excess/__init__.py +0 -0
  328. {PySDM-2.71 → PySDM-2.73}/PySDM/physics/isotope_meteoric_water_line_excess/barkan_and_luz_2007.py +0 -0
  329. {PySDM-2.71 → PySDM-2.73}/PySDM/physics/isotope_meteoric_water_line_excess/dansgaard_1964.py +0 -0
  330. {PySDM-2.71 → PySDM-2.73}/PySDM/physics/isotope_ratio_evolution/__init__.py +0 -0
  331. {PySDM-2.71 → PySDM-2.73}/PySDM/physics/isotope_ratio_evolution/gedzelman_and_arnold_1994.py +0 -0
  332. {PySDM-2.71 → PySDM-2.73}/PySDM/physics/isotope_ratio_evolution/merlivat_and_jouzel_1979.py +0 -0
  333. {PySDM-2.71 → PySDM-2.73}/PySDM/physics/isotope_ratio_evolution/rayleigh_distillation.py +0 -0
  334. {PySDM-2.71 → PySDM-2.73}/PySDM/physics/isotope_relaxation_timescale/__init__.py +0 -0
  335. {PySDM-2.71 → PySDM-2.73}/PySDM/physics/isotope_relaxation_timescale/miyake_et_al_1968.py +0 -0
  336. {PySDM-2.71 → PySDM-2.73}/PySDM/physics/latent_heat/__init__.py +0 -0
  337. {PySDM-2.71 → PySDM-2.73}/PySDM/physics/latent_heat/constant.py +0 -0
  338. {PySDM-2.71 → PySDM-2.73}/PySDM/physics/latent_heat/kirchhoff.py +0 -0
  339. {PySDM-2.71 → PySDM-2.73}/PySDM/physics/latent_heat/lowe2019.py +0 -0
  340. {PySDM-2.71 → PySDM-2.73}/PySDM/physics/latent_heat/seinfeld_and_pandis_2010.py +0 -0
  341. {PySDM-2.71 → PySDM-2.73}/PySDM/physics/optical_albedo/__init__.py +0 -0
  342. {PySDM-2.71 → PySDM-2.73}/PySDM/physics/optical_albedo/bohren1987.py +0 -0
  343. {PySDM-2.71 → PySDM-2.73}/PySDM/physics/optical_depth/__init__.py +0 -0
  344. {PySDM-2.71 → PySDM-2.73}/PySDM/physics/optical_depth/stephens_1978.py +0 -0
  345. {PySDM-2.71 → PySDM-2.73}/PySDM/physics/particle_advection/__init__.py +0 -0
  346. {PySDM-2.71 → PySDM-2.73}/PySDM/physics/particle_advection/explicit_in_space.py +0 -0
  347. {PySDM-2.71 → PySDM-2.73}/PySDM/physics/particle_advection/implicit_in_space.py +0 -0
  348. {PySDM-2.71 → PySDM-2.73}/PySDM/physics/particle_shape_and_density/__init__.py +0 -0
  349. {PySDM-2.71 → PySDM-2.73}/PySDM/physics/particle_shape_and_density/liquid_spheres.py +0 -0
  350. {PySDM-2.71 → PySDM-2.73}/PySDM/physics/particle_shape_and_density/mixed_phase_spheres.py +0 -0
  351. {PySDM-2.71 → PySDM-2.73}/PySDM/physics/particle_shape_and_density/porous_spheroids.py +0 -0
  352. {PySDM-2.71 → PySDM-2.73}/PySDM/physics/saturation_vapour_pressure/__init__.py +0 -0
  353. {PySDM-2.71 → PySDM-2.73}/PySDM/physics/saturation_vapour_pressure/august_roche_magnus.py +0 -0
  354. {PySDM-2.71 → PySDM-2.73}/PySDM/physics/saturation_vapour_pressure/bolton_1980.py +0 -0
  355. {PySDM-2.71 → PySDM-2.73}/PySDM/physics/saturation_vapour_pressure/flatau_walko_cotton.py +0 -0
  356. {PySDM-2.71 → PySDM-2.73}/PySDM/physics/saturation_vapour_pressure/lowe1977.py +0 -0
  357. {PySDM-2.71 → PySDM-2.73}/PySDM/physics/saturation_vapour_pressure/murphy_koop_2005.py +0 -0
  358. {PySDM-2.71 → PySDM-2.73}/PySDM/physics/saturation_vapour_pressure/wexler_1976.py +0 -0
  359. {PySDM-2.71 → PySDM-2.73}/PySDM/physics/state_variable_triplet/__init__.py +0 -0
  360. {PySDM-2.71 → PySDM-2.73}/PySDM/physics/state_variable_triplet/libcloudphplusplus.py +0 -0
  361. {PySDM-2.71 → PySDM-2.73}/PySDM/physics/surface_tension/__init__.py +0 -0
  362. {PySDM-2.71 → PySDM-2.73}/PySDM/physics/surface_tension/compressed_film_ovadnevaite.py +0 -0
  363. {PySDM-2.71 → PySDM-2.73}/PySDM/physics/surface_tension/compressed_film_ruehl.py +0 -0
  364. {PySDM-2.71 → PySDM-2.73}/PySDM/physics/surface_tension/constant.py +0 -0
  365. {PySDM-2.71 → PySDM-2.73}/PySDM/physics/surface_tension/szyszkowski_langmuir.py +0 -0
  366. {PySDM-2.71 → PySDM-2.73}/PySDM/physics/terminal_velocity/__init__.py +0 -0
  367. {PySDM-2.71 → PySDM-2.73}/PySDM/physics/terminal_velocity/gunn_kinzer_1949.py +0 -0
  368. {PySDM-2.71 → PySDM-2.73}/PySDM/physics/terminal_velocity/power_series.py +0 -0
  369. {PySDM-2.71 → PySDM-2.73}/PySDM/physics/terminal_velocity/rogers_yau.py +0 -0
  370. {PySDM-2.71 → PySDM-2.73}/PySDM/physics/trivia.py +0 -0
  371. {PySDM-2.71 → PySDM-2.73}/PySDM/physics/ventilation/__init__.py +0 -0
  372. {PySDM-2.71 → PySDM-2.73}/PySDM/physics/ventilation/froessling_1938.py +0 -0
  373. {PySDM-2.71 → PySDM-2.73}/PySDM/physics/ventilation/neglect.py +0 -0
  374. {PySDM-2.71 → PySDM-2.73}/PySDM/physics/ventilation/pruppacher_rasmussen_1979.py +0 -0
  375. {PySDM-2.71 → PySDM-2.73}/PySDM/products/__init__.py +0 -0
  376. {PySDM-2.71 → PySDM-2.73}/PySDM/products/ambient_thermodynamics/__init__.py +0 -0
  377. {PySDM-2.71 → PySDM-2.73}/PySDM/products/ambient_thermodynamics/ambient_dry_air_density.py +0 -0
  378. {PySDM-2.71 → PySDM-2.73}/PySDM/products/ambient_thermodynamics/ambient_dry_air_potential_temperature.py +0 -0
  379. {PySDM-2.71 → PySDM-2.73}/PySDM/products/ambient_thermodynamics/ambient_pressure.py +0 -0
  380. {PySDM-2.71 → PySDM-2.73}/PySDM/products/ambient_thermodynamics/ambient_relative_humidity.py +0 -0
  381. {PySDM-2.71 → PySDM-2.73}/PySDM/products/ambient_thermodynamics/ambient_temperature.py +0 -0
  382. {PySDM-2.71 → PySDM-2.73}/PySDM/products/ambient_thermodynamics/ambient_water_vapour_mixing_ratio.py +0 -0
  383. {PySDM-2.71 → PySDM-2.73}/PySDM/products/aqueous_chemistry/__init__.py +0 -0
  384. {PySDM-2.71 → PySDM-2.73}/PySDM/products/aqueous_chemistry/acidity.py +0 -0
  385. {PySDM-2.71 → PySDM-2.73}/PySDM/products/aqueous_chemistry/aqueous_mass_spectrum.py +0 -0
  386. {PySDM-2.71 → PySDM-2.73}/PySDM/products/aqueous_chemistry/aqueous_mole_fraction.py +0 -0
  387. {PySDM-2.71 → PySDM-2.73}/PySDM/products/aqueous_chemistry/gaseous_mole_fraction.py +0 -0
  388. {PySDM-2.71 → PySDM-2.73}/PySDM/products/aqueous_chemistry/total_dry_mass_mixing_ratio.py +0 -0
  389. {PySDM-2.71 → PySDM-2.73}/PySDM/products/collision/__init__.py +0 -0
  390. {PySDM-2.71 → PySDM-2.73}/PySDM/products/collision/collision_rates.py +0 -0
  391. {PySDM-2.71 → PySDM-2.73}/PySDM/products/collision/collision_timestep_mean.py +0 -0
  392. {PySDM-2.71 → PySDM-2.73}/PySDM/products/collision/collision_timestep_min.py +0 -0
  393. {PySDM-2.71 → PySDM-2.73}/PySDM/products/condensation/__init__.py +0 -0
  394. {PySDM-2.71 → PySDM-2.73}/PySDM/products/condensation/activable_fraction.py +0 -0
  395. {PySDM-2.71 → PySDM-2.73}/PySDM/products/condensation/condensation_timestep.py +0 -0
  396. {PySDM-2.71 → PySDM-2.73}/PySDM/products/condensation/event_rates.py +0 -0
  397. {PySDM-2.71 → PySDM-2.73}/PySDM/products/condensation/peak_supersaturation.py +0 -0
  398. {PySDM-2.71 → PySDM-2.73}/PySDM/products/displacement/__init__.py +0 -0
  399. {PySDM-2.71 → PySDM-2.73}/PySDM/products/displacement/averaged_terminal_velocity.py +0 -0
  400. {PySDM-2.71 → PySDM-2.73}/PySDM/products/displacement/flow_velocity_component.py +0 -0
  401. {PySDM-2.71 → PySDM-2.73}/PySDM/products/displacement/max_courant_number.py +0 -0
  402. {PySDM-2.71 → PySDM-2.73}/PySDM/products/displacement/surface_precipitation.py +0 -0
  403. {PySDM-2.71 → PySDM-2.73}/PySDM/products/freezing/__init__.py +0 -0
  404. {PySDM-2.71 → PySDM-2.73}/PySDM/products/freezing/cooling_rate.py +0 -0
  405. {PySDM-2.71 → PySDM-2.73}/PySDM/products/freezing/freezable_specific_concentration.py +0 -0
  406. {PySDM-2.71 → PySDM-2.73}/PySDM/products/freezing/frozen_particle_concentration.py +0 -0
  407. {PySDM-2.71 → PySDM-2.73}/PySDM/products/freezing/ice_nuclei_concentration.py +0 -0
  408. {PySDM-2.71 → PySDM-2.73}/PySDM/products/freezing/total_unfrozen_immersed_surface_area.py +0 -0
  409. {PySDM-2.71 → PySDM-2.73}/PySDM/products/housekeeping/__init__.py +0 -0
  410. {PySDM-2.71 → PySDM-2.73}/PySDM/products/housekeeping/dynamic_wall_time.py +0 -0
  411. {PySDM-2.71 → PySDM-2.73}/PySDM/products/housekeeping/super_droplet_count_per_gridbox.py +0 -0
  412. {PySDM-2.71 → PySDM-2.73}/PySDM/products/housekeeping/time.py +0 -0
  413. {PySDM-2.71 → PySDM-2.73}/PySDM/products/housekeeping/timers.py +0 -0
  414. {PySDM-2.71 → PySDM-2.73}/PySDM/products/impl/__init__.py +0 -0
  415. {PySDM-2.71 → PySDM-2.73}/PySDM/products/impl/activation_filtered_product.py +0 -0
  416. {PySDM-2.71 → PySDM-2.73}/PySDM/products/impl/concentration_product.py +0 -0
  417. {PySDM-2.71 → PySDM-2.73}/PySDM/products/impl/moist_environment_product.py +0 -0
  418. {PySDM-2.71 → PySDM-2.73}/PySDM/products/impl/moment_product.py +0 -0
  419. {PySDM-2.71 → PySDM-2.73}/PySDM/products/impl/product.py +0 -0
  420. {PySDM-2.71 → PySDM-2.73}/PySDM/products/impl/rate_product.py +0 -0
  421. {PySDM-2.71 → PySDM-2.73}/PySDM/products/impl/register_product.py +0 -0
  422. {PySDM-2.71 → PySDM-2.73}/PySDM/products/impl/spectrum_moment_product.py +0 -0
  423. {PySDM-2.71 → PySDM-2.73}/PySDM/products/optical/__init__.py +0 -0
  424. {PySDM-2.71 → PySDM-2.73}/PySDM/products/optical/cloud_albedo.py +0 -0
  425. {PySDM-2.71 → PySDM-2.73}/PySDM/products/optical/cloud_optical_depth.py +0 -0
  426. {PySDM-2.71 → PySDM-2.73}/PySDM/products/parcel/__init__.py +0 -0
  427. {PySDM-2.71 → PySDM-2.73}/PySDM/products/parcel/cloud_water_path.py +0 -0
  428. {PySDM-2.71 → PySDM-2.73}/PySDM/products/parcel/parcel_displacement.py +0 -0
  429. {PySDM-2.71 → PySDM-2.73}/PySDM/products/size_spectral/__init__.py +0 -0
  430. {PySDM-2.71 → PySDM-2.73}/PySDM/products/size_spectral/arbitrary_moment.py +0 -0
  431. {PySDM-2.71 → PySDM-2.73}/PySDM/products/size_spectral/cloud_water_content.py +0 -0
  432. {PySDM-2.71 → PySDM-2.73}/PySDM/products/size_spectral/effective_radius.py +0 -0
  433. {PySDM-2.71 → PySDM-2.73}/PySDM/products/size_spectral/effective_radius_activated.py +0 -0
  434. {PySDM-2.71 → PySDM-2.73}/PySDM/products/size_spectral/mean_radius.py +0 -0
  435. {PySDM-2.71 → PySDM-2.73}/PySDM/products/size_spectral/mean_radius_activated.py +0 -0
  436. {PySDM-2.71 → PySDM-2.73}/PySDM/products/size_spectral/mean_volume_radius.py +0 -0
  437. {PySDM-2.71 → PySDM-2.73}/PySDM/products/size_spectral/number_size_spectrum.py +0 -0
  438. {PySDM-2.71 → PySDM-2.73}/PySDM/products/size_spectral/particle_concentration.py +0 -0
  439. {PySDM-2.71 → PySDM-2.73}/PySDM/products/size_spectral/particle_concentration_activated.py +0 -0
  440. {PySDM-2.71 → PySDM-2.73}/PySDM/products/size_spectral/particle_size_spectrum.py +0 -0
  441. {PySDM-2.71 → PySDM-2.73}/PySDM/products/size_spectral/particle_volume_versus_radius_logarithm_spectrum.py +0 -0
  442. {PySDM-2.71 → PySDM-2.73}/PySDM/products/size_spectral/radius_binned_number_averaged_terminal_velocity.py +0 -0
  443. {PySDM-2.71 → PySDM-2.73}/PySDM/products/size_spectral/size_standard_deviation.py +0 -0
  444. {PySDM-2.71 → PySDM-2.73}/PySDM/products/size_spectral/total_particle_concentration.py +0 -0
  445. {PySDM-2.71 → PySDM-2.73}/PySDM/products/size_spectral/total_particle_specific_concentration.py +0 -0
  446. {PySDM-2.71 → PySDM-2.73}/PySDM/products/size_spectral/water_mixing_ratio.py +0 -0
  447. {PySDM-2.71 → PySDM-2.73}/PySDM.egg-info/dependency_links.txt +0 -0
  448. {PySDM-2.71 → PySDM-2.73}/PySDM.egg-info/requires.txt +0 -0
  449. {PySDM-2.71 → PySDM-2.73}/PySDM.egg-info/top_level.txt +0 -0
  450. {PySDM-2.71 → PySDM-2.73}/examples/MANIFEST.in +0 -0
  451. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Abade_and_Albuquerque_2024/__init__.py +0 -0
  452. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Abade_and_Albuquerque_2024/fig_2.ipynb +0 -0
  453. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Abade_and_Albuquerque_2024/settings.py +0 -0
  454. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Abdul_Razzak_Ghan_2000/__init__.py +0 -0
  455. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Abdul_Razzak_Ghan_2000/aerosol.py +0 -0
  456. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Abdul_Razzak_Ghan_2000/data_from_ARG2000_paper.py +0 -0
  457. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Abdul_Razzak_Ghan_2000/data_from_CloudMicrophysics_ARG.py +0 -0
  458. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Abdul_Razzak_Ghan_2000/fig_4_kinetic_limitations.ipynb +0 -0
  459. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Abdul_Razzak_Ghan_2000/figs1-5.ipynb +0 -0
  460. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Alpert_and_Knopf_2016/__init__.py +0 -0
  461. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Alpert_and_Knopf_2016/fig_1.ipynb +0 -0
  462. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Alpert_and_Knopf_2016/fig_2.ipynb +0 -0
  463. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Alpert_and_Knopf_2016/fig_3.ipynb +0 -0
  464. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Alpert_and_Knopf_2016/fig_4.ipynb +0 -0
  465. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Alpert_and_Knopf_2016/fig_5.ipynb +0 -0
  466. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Alpert_and_Knopf_2016/table.py +0 -0
  467. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Alpert_and_Knopf_2016/table_1.py +0 -0
  468. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Alpert_and_Knopf_2016/table_2.py +0 -0
  469. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Arabas_and_Shima_2017/__init__.py +0 -0
  470. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Arabas_and_Shima_2017/example.py +0 -0
  471. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Arabas_and_Shima_2017/fig_5.ipynb +0 -0
  472. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Arabas_and_Shima_2017/settings.py +0 -0
  473. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Arabas_and_Shima_2017/simulation.py +0 -0
  474. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Arabas_et_al_2015/__init__.py +0 -0
  475. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Arabas_et_al_2015/example.py +0 -0
  476. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Arabas_et_al_2015/example_benchmark.py +0 -0
  477. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Arabas_et_al_2015/gui.ipynb +0 -0
  478. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Arabas_et_al_2015/paraview_hello_world.ipynb +0 -0
  479. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Arabas_et_al_2015/settings.py +0 -0
  480. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Arabas_et_al_2015/spin_up.py +0 -0
  481. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Arabas_et_al_2023/__init__.py +0 -0
  482. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Arabas_et_al_2023/commons.py +0 -0
  483. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Arabas_et_al_2023/copula_hello.ipynb +0 -0
  484. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Arabas_et_al_2023/curved_text.py +0 -0
  485. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Arabas_et_al_2023/fig_11.ipynb +0 -0
  486. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Arabas_et_al_2023/fig_2.ipynb +0 -0
  487. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Arabas_et_al_2023/figs_3_and_7_and_8.ipynb +0 -0
  488. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Arabas_et_al_2023/figs_5_and_6.ipynb +0 -0
  489. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Arabas_et_al_2023/frozen_fraction.py +0 -0
  490. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Arabas_et_al_2023/plots.py +0 -0
  491. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Arabas_et_al_2023/run_simulation.py +0 -0
  492. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Bartman_2020_MasterThesis/__init__.py +0 -0
  493. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Bartman_2020_MasterThesis/fig_4_adaptive_sdm.py +0 -0
  494. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Bartman_2020_MasterThesis/fig_5_SCIPY_VS_ADAPTIVE.py +0 -0
  495. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Bartman_et_al_2021/__init__.py +0 -0
  496. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Bartman_et_al_2021/demo.ipynb +0 -0
  497. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Bartman_et_al_2021/demo_fig2.ipynb +0 -0
  498. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Bartman_et_al_2021/demo_fig3.ipynb +0 -0
  499. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Bartman_et_al_2021/label.py +0 -0
  500. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Berry_1967/__init__.py +0 -0
  501. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Berry_1967/example.py +0 -0
  502. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Berry_1967/example_fig_6.py +0 -0
  503. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Berry_1967/figs_5_8_10.ipynb +0 -0
  504. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Berry_1967/settings.py +0 -0
  505. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Berry_1967/spectrum_plotter.py +0 -0
  506. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Bieli_et_al_2022/__init__.py +0 -0
  507. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Bieli_et_al_2022/make_fig_3.ipynb +0 -0
  508. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Bieli_et_al_2022/settings.py +0 -0
  509. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Bolot_et_al_2013/__init__.py +0 -0
  510. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Bolot_et_al_2013/fig_1.ipynb +0 -0
  511. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Bulenok_2023_MasterThesis/__init__.py +0 -0
  512. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Bulenok_2023_MasterThesis/performance_comparison_Srivastava_Setup.ipynb +0 -0
  513. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Bulenok_2023_MasterThesis/setups.py +0 -0
  514. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Bulenok_2023_MasterThesis/utils.py +0 -0
  515. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Ervens_and_Feingold_2012/__init__.py +0 -0
  516. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Ervens_and_Feingold_2012/settings.py +0 -0
  517. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Gedzelman_and_Arnold_1994/__init__.py +0 -0
  518. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Gedzelman_and_Arnold_1994/fig_2.ipynb +0 -0
  519. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Grabowski_and_Pawlowska_2023/__init__.py +0 -0
  520. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Grabowski_and_Pawlowska_2023/figure_1.ipynb +0 -0
  521. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Grabowski_and_Pawlowska_2023/figure_2.ipynb +0 -0
  522. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Grabowski_and_Pawlowska_2023/figure_3.ipynb +0 -0
  523. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Grabowski_and_Pawlowska_2023/figure_4.ipynb +0 -0
  524. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Grabowski_and_Pawlowska_2023/figure_ripening_rate.ipynb +0 -0
  525. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Grabowski_and_Pawlowska_2023/settings.py +0 -0
  526. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Graf_et_al_2019/Table_1.ipynb +0 -0
  527. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Graf_et_al_2019/__init__.py +0 -0
  528. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Jaruga_and_Pawlowska_2018/__init__.py +0 -0
  529. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Jaruga_and_Pawlowska_2018/fig_2.ipynb +0 -0
  530. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Jaruga_and_Pawlowska_2018/fig_3.ipynb +0 -0
  531. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Jensen_and_Nugent_2017/Fig_1.ipynb +0 -0
  532. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Jensen_and_Nugent_2017/Fig_3_and_Tab_4_upper_rows.ipynb +0 -0
  533. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Jensen_and_Nugent_2017/Fig_4_and_7_and_Tab_4_bottom_rows.ipynb +0 -0
  534. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Jensen_and_Nugent_2017/Fig_5.ipynb +0 -0
  535. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Jensen_and_Nugent_2017/Fig_6.ipynb +0 -0
  536. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Jensen_and_Nugent_2017/Fig_8.ipynb +0 -0
  537. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Jensen_and_Nugent_2017/__init__.py +0 -0
  538. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Jensen_and_Nugent_2017/plotting.py +0 -0
  539. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Jensen_and_Nugent_2017/settings.py +0 -0
  540. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Jensen_and_Nugent_2017/table_3.py +0 -0
  541. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Kreidenweis_et_al_2003/__init__.py +0 -0
  542. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Kreidenweis_et_al_2003/fig_1.ipynb +0 -0
  543. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Kreidenweis_et_al_2003/settings.py +0 -0
  544. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Lamb_et_al_2017/__init__.py +0 -0
  545. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Lamb_et_al_2017/fig_4.ipynb +0 -0
  546. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Lowe_et_al_2019/__init__.py +0 -0
  547. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Lowe_et_al_2019/aerosol.py +0 -0
  548. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Lowe_et_al_2019/aerosol_code.py +0 -0
  549. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Lowe_et_al_2019/constants_def.py +0 -0
  550. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Lowe_et_al_2019/fig_1.ipynb +0 -0
  551. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Lowe_et_al_2019/fig_2.ipynb +0 -0
  552. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Lowe_et_al_2019/fig_3.ipynb +0 -0
  553. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Lowe_et_al_2019/fig_s2.ipynb +0 -0
  554. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Lowe_et_al_2019/plot_helper.py +0 -0
  555. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Lowe_et_al_2019/settings.py +0 -0
  556. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Merlivat_and_Nief_1967/__init__.py +0 -0
  557. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Merlivat_and_Nief_1967/fig_2.ipynb +0 -0
  558. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Miyake_et_al_1968/__init__.py +0 -0
  559. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Miyake_et_al_1968/fig_19.ipynb +0 -0
  560. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Morrison_and_Grabowski_2007/__init__.py +0 -0
  561. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Morrison_and_Grabowski_2007/common.py +0 -0
  562. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Morrison_and_Grabowski_2007/cumulus.py +0 -0
  563. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Morrison_and_Grabowski_2007/fig_2.ipynb +0 -0
  564. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Morrison_and_Grabowski_2007/fig_3.ipynb +0 -0
  565. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Morrison_and_Grabowski_2007/strato_cumulus.py +0 -0
  566. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Niedermeier_et_al_2014/__init__.py +0 -0
  567. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Niedermeier_et_al_2014/fig_2.ipynb +0 -0
  568. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Niedermeier_et_al_2014/settings.py +0 -0
  569. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Niedermeier_et_al_2014/simulation.py +0 -0
  570. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Pierchala_et_al_2022/__init__.py +0 -0
  571. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Pierchala_et_al_2022/commons.py +0 -0
  572. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Pierchala_et_al_2022/fig_3.ipynb +0 -0
  573. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Pierchala_et_al_2022/fig_4.ipynb +0 -0
  574. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Pyrcel/__init__.py +0 -0
  575. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Pyrcel/example_basic_run.ipynb +0 -0
  576. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Pyrcel/profile_plotter.py +0 -0
  577. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Pyrcel/settings.py +0 -0
  578. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Pyrcel/tutorial_settings.py +0 -0
  579. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Pyrcel/tutorial_simulation.py +0 -0
  580. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Rozanski_and_Sonntag_1982/__init__.py +0 -0
  581. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Shima_et_al_2009/__init__.py +0 -0
  582. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Shima_et_al_2009/error_measure.py +0 -0
  583. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Shima_et_al_2009/example.py +0 -0
  584. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Shima_et_al_2009/example_timing.py +0 -0
  585. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Shima_et_al_2009/fig_2.ipynb +0 -0
  586. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Shima_et_al_2009/settings.py +0 -0
  587. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Shima_et_al_2009/spectrum_plotter.py +0 -0
  588. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Shima_et_al_2009/tutorial_example.py +0 -0
  589. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Shima_et_al_2009/tutorial_plotter.py +0 -0
  590. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Shima_et_al_2009/tutorial_settings.py +0 -0
  591. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Shipway_and_Hill_2012/__init__.py +0 -0
  592. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Shipway_and_Hill_2012/fig_1.ipynb +0 -0
  593. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Shipway_and_Hill_2012/mpdata_1d.py +0 -0
  594. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Shipway_and_Hill_2012/plot.py +0 -0
  595. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Shipway_and_Hill_2012/settings.py +0 -0
  596. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Singer_Ward/MWE_joss_paper.ipynb +0 -0
  597. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Singer_Ward/__init__.py +0 -0
  598. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Singer_Ward/aerosol.py +0 -0
  599. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Singer_Ward/kohler.ipynb +0 -0
  600. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Srivastava_1982/__init__.py +0 -0
  601. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Srivastava_1982/equations.py +0 -0
  602. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Srivastava_1982/example.py +0 -0
  603. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Srivastava_1982/figures.ipynb +0 -0
  604. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Srivastava_1982/settings.py +0 -0
  605. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Srivastava_1982/simulation.py +0 -0
  606. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Szumowski_et_al_1998/__init__.py +0 -0
  607. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Szumowski_et_al_1998/fields.py +0 -0
  608. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Szumowski_et_al_1998/gui.py +0 -0
  609. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Szumowski_et_al_1998/gui_controller.py +0 -0
  610. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Szumowski_et_al_1998/gui_settings.py +0 -0
  611. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Szumowski_et_al_1998/gui_viewer.py +0 -0
  612. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Szumowski_et_al_1998/make_default_product_collection.py +0 -0
  613. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Szumowski_et_al_1998/mpdata_2d.py +0 -0
  614. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Szumowski_et_al_1998/plots.py +0 -0
  615. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Szumowski_et_al_1998/sounding.py +0 -0
  616. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Szumowski_et_al_1998/storage.py +0 -0
  617. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Van_Hook_1968/__init__.py +0 -0
  618. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Van_Hook_1968/fig_1.ipynb +0 -0
  619. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Yang_et_al_2018/__init__.py +0 -0
  620. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Yang_et_al_2018/fig_2.ipynb +0 -0
  621. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Yang_et_al_2018/settings.py +0 -0
  622. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/Yang_et_al_2018/simulation.py +0 -0
  623. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/__init__.py +0 -0
  624. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/deJong_Azimi/__init__.py +0 -0
  625. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/deJong_Azimi/box.ipynb +0 -0
  626. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/deJong_Azimi/cloudy_data.py +0 -0
  627. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/deJong_Azimi/cloudy_data_0d.py +0 -0
  628. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/deJong_Azimi/rainshaft.ipynb +0 -0
  629. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/deJong_Azimi/settings1D.py +0 -0
  630. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/deJong_Mackay_et_al_2023/__init__.py +0 -0
  631. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/deJong_Mackay_et_al_2023/data/straub_fig10.csv +0 -0
  632. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/deJong_Mackay_et_al_2023/fig_9.ipynb +0 -0
  633. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/deJong_Mackay_et_al_2023/figs_10_11_12_13.ipynb +0 -0
  634. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/deJong_Mackay_et_al_2023/figs_3_4_5.ipynb +0 -0
  635. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/deJong_Mackay_et_al_2023/figs_6_7_8.ipynb +0 -0
  636. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/deJong_Mackay_et_al_2023/plot_rates.py +0 -0
  637. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/deJong_Mackay_et_al_2023/settings1D.py +0 -0
  638. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/deJong_Mackay_et_al_2023/settings_0D.py +0 -0
  639. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/deJong_Mackay_et_al_2023/simulation1D.py +0 -0
  640. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/deJong_Mackay_et_al_2023/simulation_ss.py +0 -0
  641. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/utils/__init__.py +0 -0
  642. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/utils/basic_simulation.py +0 -0
  643. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/utils/dummy_controller.py +0 -0
  644. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/utils/notebook_vars.py +0 -0
  645. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/utils/progbar_controller.py +0 -0
  646. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/utils/read_vtk_1d.py +0 -0
  647. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/utils/widgets/__init__.py +0 -0
  648. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/utils/widgets/freezer.py +0 -0
  649. {PySDM-2.71 → PySDM-2.73}/examples/PySDM_examples/utils/widgets/progbar_updater.py +0 -0
  650. {PySDM-2.71 → PySDM-2.73}/examples/README.md +0 -0
  651. {PySDM-2.71 → PySDM-2.73}/examples/pyproject.toml +0 -0
  652. {PySDM-2.71 → PySDM-2.73}/examples/setup.py +0 -0
  653. {PySDM-2.71 → PySDM-2.73}/paper/joss-ARG-fig_1.pdf +0 -0
  654. {PySDM-2.71 → PySDM-2.73}/paper/paper.bib +0 -0
  655. {PySDM-2.71 → PySDM-2.73}/paper/paper.md +0 -0
  656. {PySDM-2.71 → PySDM-2.73}/paper/paperv1.md +0 -0
  657. {PySDM-2.71 → PySDM-2.73}/paper/readme.pdf +0 -0
  658. {PySDM-2.71 → PySDM-2.73}/paper/test.pdf +0 -0
  659. {PySDM-2.71 → PySDM-2.73}/pyproject.toml +0 -0
  660. {PySDM-2.71 → PySDM-2.73}/setup.cfg +0 -0
  661. {PySDM-2.71 → PySDM-2.73}/setup.py +0 -0
  662. {PySDM-2.71 → PySDM-2.73}/tests/__init__.py +0 -0
  663. {PySDM-2.71 → PySDM-2.73}/tests/examples_tests/__init__.py +0 -0
  664. {PySDM-2.71 → PySDM-2.73}/tests/examples_tests/conftest.py +0 -0
  665. {PySDM-2.71 → PySDM-2.73}/tests/examples_tests/test_run_examples.py +0 -0
  666. {PySDM-2.71 → PySDM-2.73}/tests/examples_tests/test_run_notebooks.py +0 -0
  667. {PySDM-2.71 → PySDM-2.73}/tests/examples_tests/test_tests_completeness.py +0 -0
  668. {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/__init__.py +0 -0
  669. {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/box/alpert_and_knopf_2016/__init__.py +0 -0
  670. {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/box/alpert_and_knopf_2016/test_ak16_fig_1.py +0 -0
  671. {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/box/alpert_and_knopf_2016/test_frozen_fraction.py +0 -0
  672. {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/box/berry_1967/__init__.py +0 -0
  673. {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/box/berry_1967/test_coalescence.py +0 -0
  674. {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/box/bieli_et_al_2022/__init__.py +0 -0
  675. {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/box/bieli_et_al_2022/test_moments.py +0 -0
  676. {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/box/dejong_and_mackay_et_al_2023/__init__.py +0 -0
  677. {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/box/dejong_and_mackay_et_al_2023/test_collision.py +0 -0
  678. {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/box/dejong_and_mackay_et_al_2023/test_fig_6.py +0 -0
  679. {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/box/dejong_and_mackay_et_al_2023/test_fig_7.py +0 -0
  680. {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/box/dejong_and_mackay_et_al_2023/test_fig_8.py +0 -0
  681. {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/box/dejong_azimi/test_box.py +0 -0
  682. {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/box/partmc/__init__.py +0 -0
  683. {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/box/shima_et_al_2009/__init__.py +0 -0
  684. {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/box/shima_et_al_2009/test_lwc_constant.py +0 -0
  685. {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/box/srivastava_1982/__init__.py +0 -0
  686. {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/box/srivastava_1982/test_eq_10.py +0 -0
  687. {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/box/srivastava_1982/test_eq_13.py +0 -0
  688. {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/box/srivastava_1982/test_equations.py +0 -0
  689. {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/conftest.py +0 -0
  690. {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/kinematic_1d/deJong_Azimi/__init__.py +0 -0
  691. {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/kinematic_1d/deJong_Azimi/test_few_steps.py +0 -0
  692. {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/kinematic_1d/deJong_Azimi/test_initial_condition.py +0 -0
  693. {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/kinematic_1d/shipway_and_hill_2012/__init__.py +0 -0
  694. {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/kinematic_1d/shipway_and_hill_2012/test_1d_exporters.py +0 -0
  695. {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/kinematic_1d/shipway_and_hill_2012/test_few_steps.py +0 -0
  696. {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/kinematic_1d/shipway_and_hill_2012/test_initial_condition.py +0 -0
  697. {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/kinematic_1d/shipway_and_hill_2012/test_settings.py +0 -0
  698. {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/kinematic_2d/arabas_et_al_2015/__init__.py +0 -0
  699. {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/kinematic_2d/arabas_et_al_2015/dummy_storage.py +0 -0
  700. {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/kinematic_2d/arabas_et_al_2015/test_adaptive_displacement.py +0 -0
  701. {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/kinematic_2d/arabas_et_al_2015/test_environment.py +0 -0
  702. {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/kinematic_2d/arabas_et_al_2015/test_export.py +0 -0
  703. {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/kinematic_2d/arabas_et_al_2015/test_freezing.py +0 -0
  704. {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/kinematic_2d/arabas_et_al_2015/test_gui_settings.py +0 -0
  705. {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/kinematic_2d/arabas_et_al_2015/test_initialisation.py +0 -0
  706. {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/kinematic_2d/arabas_et_al_2015/test_spin_up.py +0 -0
  707. {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/no_env/gedzelman_and_arnold_1994/__init__.py +0 -0
  708. {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/no_env/gedzelman_and_arnold_1994/test_fig_2.py +0 -0
  709. {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/no_env/lamb_et_al_2017/__init__.py +0 -0
  710. {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/no_env/lamb_et_al_2017/test_fig_4.py +0 -0
  711. {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/no_env/miyake_et_al_1968/__init__.py +0 -0
  712. {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/no_env/miyake_et_al_1968/test_fig_19.py +0 -0
  713. {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/no_env/pierchala_et_al_2022/__init__.py +0 -0
  714. {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/no_env/pierchala_et_al_2022/test_fig_3.py +0 -0
  715. {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/no_env/pierchala_et_al_2022/test_fig_4.py +0 -0
  716. {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/no_env/pierchala_et_al_2022/test_supplement.py +0 -0
  717. {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/parcel_a/lowe_et_al_2019/__init__.py +0 -0
  718. {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/parcel_a/lowe_et_al_2019/conftest.py +0 -0
  719. {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/parcel_a/lowe_et_al_2019/test_dz_sensitivity.py +0 -0
  720. {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/parcel_a/lowe_et_al_2019/test_fig_1.py +0 -0
  721. {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/parcel_a/lowe_et_al_2019/test_fig_2.py +0 -0
  722. {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/parcel_a/lowe_et_al_2019/test_fig_s2.py +0 -0
  723. {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/parcel_a/lowe_et_al_2019/test_surface_tension_models.py +0 -0
  724. {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/parcel_a/lowe_et_al_2019/test_zero_forg.py +0 -0
  725. {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/parcel_a/pyrcel/__init__.py +0 -0
  726. {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/parcel_a/pyrcel/test_parcel_example.py +0 -0
  727. {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/parcel_a/rozanski_and_sonntag_1982/__init__.py +0 -0
  728. {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/parcel_a/rozanski_and_sonntag_1982/test_figs_4_5_6.py +0 -0
  729. {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/parcel_b/arabas_and_shima_2017/__init__.py +0 -0
  730. {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/parcel_b/arabas_and_shima_2017/test_conservation.py +0 -0
  731. {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/parcel_b/arabas_and_shima_2017/test_displacement.py +0 -0
  732. {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/parcel_b/arabas_and_shima_2017/test_event_rates.py +0 -0
  733. {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/parcel_b/arabas_and_shima_2017/test_initialisation.py +0 -0
  734. {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/parcel_b/arabas_and_shima_2017/test_vs_scipy.py +0 -0
  735. {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/parcel_b/yang_et_al_2018/__init__.py +0 -0
  736. {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/parcel_b/yang_et_al_2018/test_displacement.py +0 -0
  737. {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/parcel_b/yang_et_al_2018/test_initialisation.py +0 -0
  738. {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/parcel_b/yang_et_al_2018/test_just_do_it.py +0 -0
  739. {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/parcel_c/abade_and_albuquerque_2024/__init__.py +0 -0
  740. {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/parcel_c/abade_and_albuquerque_2024/test_fig_2.py +0 -0
  741. {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/parcel_c/abdul_razzak_ghan_2000/__init__.py +0 -0
  742. {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/parcel_c/abdul_razzak_ghan_2000/test_ARG_example.py +0 -0
  743. {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/parcel_c/abdul_razzak_ghan_2000/test_just_do_it.py +0 -0
  744. {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/parcel_c/grabowski_and_pawlowska_2023/__init__.py +0 -0
  745. {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/parcel_c/grabowski_and_pawlowska_2023/test_condensation_tolerance.py +0 -0
  746. {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/parcel_c/grabowski_and_pawlowska_2023/test_figure_1_and_2.py +0 -0
  747. {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/parcel_c/grabowski_and_pawlowska_2023/test_figure_3.py +0 -0
  748. {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/parcel_c/grabowski_and_pawlowska_2023/test_figure_4.py +0 -0
  749. {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/parcel_c/grabowski_and_pawlowska_2023/test_ripening_rate.py +0 -0
  750. {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/parcel_c/graf_et_al_2019/__init__.py +0 -0
  751. {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/parcel_c/graf_et_al_2019/test_fig_4.py +0 -0
  752. {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/parcel_c/graf_et_al_2019/test_table_1.py +0 -0
  753. {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/parcel_c/jensen_and_nugent_2017/__init__.py +0 -0
  754. {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/parcel_c/jensen_and_nugent_2017/test_fig_1.py +0 -0
  755. {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/parcel_c/jensen_and_nugent_2017/test_fig_3_and_tab_4_upper_rows.py +0 -0
  756. {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/parcel_c/jensen_and_nugent_2017/test_fig_4_and_7_and_tab_4_bottom_rows.py +0 -0
  757. {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/parcel_c/jensen_and_nugent_2017/test_fig_5.py +0 -0
  758. {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/parcel_c/jensen_and_nugent_2017/test_fig_6.py +0 -0
  759. {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/parcel_c/jensen_and_nugent_2017/test_table_3.py +0 -0
  760. {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/parcel_c/kreidenweis_et_al_2003/__init__.py +0 -0
  761. {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/parcel_c/kreidenweis_et_al_2003/test_fig_1.py +0 -0
  762. {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/parcel_c/kreidenweis_et_al_2003/test_ionic_strength.py +0 -0
  763. {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/parcel_c/kreidenweis_et_al_2003/test_spectrum_at_t_0.py +0 -0
  764. {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/parcel_c/kreidenweis_et_al_2003/test_table_3.py +0 -0
  765. {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/parcel_c/niedermeier_et_al_2013/__init__.py +0 -0
  766. {PySDM-2.71 → PySDM-2.73}/tests/smoke_tests/parcel_c/niedermeier_et_al_2013/test_temperature_profile.py +0 -0
  767. {PySDM-2.71 → PySDM-2.73}/tests/tutorials_tests/__init__.py +0 -0
  768. {PySDM-2.71 → PySDM-2.73}/tests/tutorials_tests/conftest.py +0 -0
  769. {PySDM-2.71 → PySDM-2.73}/tests/tutorials_tests/test_run_notebooks.py +0 -0
  770. {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/__init__.py +0 -0
  771. {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/attributes/__init__.py +0 -0
  772. {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/attributes/test_acidity.py +0 -0
  773. {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/attributes/test_area_radius.py +0 -0
  774. {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/attributes/test_fall_velocity.py +0 -0
  775. {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/attributes/test_impl_attribute_registry.py +0 -0
  776. {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/attributes/test_isotopes.py +0 -0
  777. {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/attributes/test_multiplicities.py +0 -0
  778. {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/backends/__init__.py +0 -0
  779. {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/backends/storage/__init__.py +0 -0
  780. {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/backends/storage/test_basic_ops.py +0 -0
  781. {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/backends/storage/test_index.py +0 -0
  782. {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/backends/storage/test_setitem.py +0 -0
  783. {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/backends/test_collisions_methods.py +0 -0
  784. {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/backends/test_ctor_defaults.py +0 -0
  785. {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/backends/test_fake_thrust.py +0 -0
  786. {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/backends/test_isotope_methods.py +0 -0
  787. {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/backends/test_moments_methods.py +0 -0
  788. {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/backends/test_oxidation.py +0 -0
  789. {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/backends/test_pair_methods.py +0 -0
  790. {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/backends/test_physics_methods.py +0 -0
  791. {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/backends/test_toms748.py +0 -0
  792. {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/conftest.py +0 -0
  793. {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/dynamics/__init__.py +0 -0
  794. {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/dynamics/collisions/__init__.py +0 -0
  795. {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/dynamics/collisions/conftest.py +0 -0
  796. {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/dynamics/collisions/test_croupiers.py +0 -0
  797. {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/dynamics/collisions/test_defaults.py +0 -0
  798. {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/dynamics/collisions/test_efficiencies.py +0 -0
  799. {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/dynamics/collisions/test_fragmentations.py +0 -0
  800. {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/dynamics/collisions/test_kernels.py +0 -0
  801. {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/dynamics/collisions/test_sdm_multi_cell.py +0 -0
  802. {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/dynamics/collisions/test_sdm_single_cell.py +0 -0
  803. {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/dynamics/condensation/test_ventilation.py +0 -0
  804. {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/dynamics/displacement/__init__.py +0 -0
  805. {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/dynamics/displacement/displacement_settings.py +0 -0
  806. {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/dynamics/displacement/test_advection.py +0 -0
  807. {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/dynamics/displacement/test_courant_product.py +0 -0
  808. {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/dynamics/displacement/test_sedimentation.py +0 -0
  809. {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/dynamics/test_impl_register_dynamic.py +0 -0
  810. {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/dynamics/test_isotopic_fractionation.py +0 -0
  811. {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/dynamics/test_relaxed_velocity.py +0 -0
  812. {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/dynamics/test_terminal_velocity.py +0 -0
  813. {PySDM-2.71/tests/unit_tests/impl → PySDM-2.73/tests/unit_tests/environments}/__init__.py +0 -0
  814. {PySDM-2.71/tests/unit_tests/initialisation → PySDM-2.73/tests/unit_tests/impl}/__init__.py +0 -0
  815. {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/impl/test_camel_case.py +0 -0
  816. {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/impl/test_mesh.py +0 -0
  817. {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/impl/test_moments.py +0 -0
  818. {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/impl/test_particle_attributes.py +0 -0
  819. {PySDM-2.71/tests/unit_tests/physics → PySDM-2.73/tests/unit_tests/initialisation}/__init__.py +0 -0
  820. {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/initialisation/test_aerosol_init.py +0 -0
  821. {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/initialisation/test_equilibrate_wet_radii.py +0 -0
  822. {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/initialisation/test_init_fall_momenta.py +0 -0
  823. {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/initialisation/test_spatial_discretisation.py +0 -0
  824. {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/initialisation/test_spectra_lognormal.py +0 -0
  825. {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/initialisation/test_spectral_discretisation.py +0 -0
  826. {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/initialisation/test_spectro_glacial_discretisation.py +0 -0
  827. {PySDM-2.71/tests/unit_tests/products → PySDM-2.73/tests/unit_tests/physics}/__init__.py +0 -0
  828. {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/physics/test_accommodation_coefficients.py +0 -0
  829. {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/physics/test_air_dynamic_viscosity.py +0 -0
  830. {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/physics/test_bulk_phase_partitioning.py +0 -0
  831. {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/physics/test_constants.py +0 -0
  832. {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/physics/test_dimensional_analysis.py +0 -0
  833. {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/physics/test_drop_growth.py +0 -0
  834. {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/physics/test_formulae.py +0 -0
  835. {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/physics/test_fragmentation_functions.py +0 -0
  836. {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/physics/test_freezing_temperature_spectra.py +0 -0
  837. {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/physics/test_hygroscopicity_fierce_diagrams.py +0 -0
  838. {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/physics/test_isotope_diffusivity_ratios.py +0 -0
  839. {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/physics/test_isotope_equilibrium_fractionation_factors.py +0 -0
  840. {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/physics/test_isotope_meteoric_water_line_excess.py +0 -0
  841. {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/physics/test_isotope_ratio_evolution.py +0 -0
  842. {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/physics/test_isotope_relaxation_timescale.py +0 -0
  843. {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/physics/test_latent_heat.py +0 -0
  844. {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/physics/test_optical.py +0 -0
  845. {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/physics/test_particle_shape_and_density.py +0 -0
  846. {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/physics/test_saturation_vapour_pressure.py +0 -0
  847. {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/physics/test_spectra.py +0 -0
  848. {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/physics/test_spectra_top_hat.py +0 -0
  849. {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/physics/test_surface_tension.py +0 -0
  850. {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/physics/test_thermal_conductivity.py +0 -0
  851. {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/physics/test_trivia.py +0 -0
  852. {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/physics/test_ventilation_coefficient.py +0 -0
  853. {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/products/test_ambient_relative_humidity.py +0 -0
  854. {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/products/test_arbitrary_moment.py +0 -0
  855. {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/products/test_impl.py +0 -0
  856. {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/products/test_particle_size_product.py +0 -0
  857. {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/products/test_particle_size_spectrum.py +0 -0
  858. {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/test_formulae.py +0 -0
  859. {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/test_imports.py +0 -0
  860. {PySDM-2.71 → PySDM-2.73}/tests/unit_tests/test_particulator.py +0 -0
  861. {PySDM-2.71 → PySDM-2.73}/tutorials/README.md +0 -0
  862. {PySDM-2.71 → PySDM-2.73}/tutorials/collisions/collection_droplet.svg +0 -0
  863. {PySDM-2.71 → PySDM-2.73}/tutorials/collisions/collisions_playground.ipynb +0 -0
  864. {PySDM-2.71 → PySDM-2.73}/tutorials/condensation/condensation_playground.ipynb +0 -0
  865. {PySDM-2.71 → PySDM-2.73}/tutorials/condensation/kohler_curve.svg +0 -0
@@ -69,11 +69,10 @@ jobs:
69
69
  with:
70
70
  python-version: 3.9
71
71
  - run: |
72
- pip install pdoc3
72
+ pip install pdoc
73
73
  pip install -e .
74
74
  pip install -e examples
75
- python -We -m pdoc --html PySDM examples/PySDM_examples
76
- python -We .github/workflows/pdoc_index_workaround.py
75
+ PDOC_ALLOW_EXEC=1 python -We -m pdoc -o html PySDM examples/PySDM_examples -t pdoc_templates
77
76
  - if: ${{ github.ref == 'refs/heads/main' && matrix.platform == 'ubuntu-latest' }}
78
77
  uses: JamesIves/github-pages-deploy-action@4.1.1
79
78
  with:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: PySDM
3
- Version: 2.71
3
+ Version: 2.73
4
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
5
  Home-page: https://github.com/open-atmos/PySDM
6
6
  Author: https://github.com/open-atmos/PySDM/graphs/contributors
@@ -32,7 +32,7 @@ Description: # PySDM
32
32
  [![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)
33
33
  [![Coverage Status](https://codecov.io/gh/open-atmos/PySDM/branch/main/graph/badge.svg)](https://app.codecov.io/gh/open-atmos/PySDM)
34
34
  [![PyPI version](https://badge.fury.io/py/PySDM.svg)](https://pypi.org/project/PySDM)
35
- [![API docs](https://img.shields.io/badge/API_docs-pdoc3-blue.svg)](https://open-atmos.github.io/PySDM/)
35
+ [![API docs](https://shields.mitmproxy.org/badge/docs-pdoc.dev-brightgreen.svg)](https://open-atmos.github.io/PySDM/)
36
36
 
37
37
  PySDM is a package for simulating the dynamics of population of particles.
38
38
  It is intended to serve as a building block for simulation systems modelling
@@ -62,9 +62,9 @@ Description: # PySDM
62
62
  PySDM has two alternative parallel number-crunching backends
63
63
  available: multi-threaded CPU backend based on [Numba](http://numba.pydata.org/)
64
64
  and GPU-resident backend built on top of [ThrustRTC](https://pypi.org/project/ThrustRTC/).
65
- The [`Numba`](https://open-atmos.github.io/PySDM/PySDM/backends/numba/numba.html) backend (aliased ``CPU``) features multi-threaded parallelism for
65
+ The [`Numba`](https://open-atmos.github.io/PySDM/PySDM/backends/numba.html) backend (aliased ``CPU``) features multi-threaded parallelism for
66
66
  multi-core CPUs, it uses the just-in-time compilation technique based on the LLVM infrastructure.
67
- The [`ThrustRTC`](https://open-atmos.github.io/PySDM/PySDM/backends/thrustRTC/thrustRTC.html) backend (aliased ``GPU``) offers GPU-resident operation of PySDM
67
+ The [`ThrustRTC`](https://open-atmos.github.io/PySDM/PySDM/backends/thrust_rtc.html) backend (aliased ``GPU``) offers GPU-resident operation of PySDM
68
68
  leveraging the [SIMT](https://en.wikipedia.org/wiki/Single_instruction,_multiple_threads)
69
69
  parallelisation model.
70
70
  Using the ``GPU`` backend requires nVidia hardware and [CUDA driver](https://developer.nvidia.com/cuda-downloads).
@@ -76,7 +76,7 @@ Description: # PySDM
76
76
  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).
77
77
  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).
78
78
 
79
- A [pdoc-generated](https://pdoc3.github.io/pdoc) documentation of PySDM public API is maintained at: [https://open-atmos.github.io/PySDM](https://open-atmos.github.io/PySDM)
79
+ 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)
80
80
 
81
81
  ## Example Jupyter notebooks (reproducing results from literature):
82
82
 
@@ -186,8 +186,8 @@ Description: # PySDM
186
186
  listings provide sample code roughly reproducing the
187
187
  Figure 2 from [Shima et al. 2009 paper](http://doi.org/10.1002/qj.441)
188
188
  using PySDM from Python, Julia and Matlab.
189
- It is a [`Coalescence`](https://open-atmos.github.io/PySDM/PySDM/dynamics/coalescence.html)-only set-up in which the initial particle size
190
- spectrum is [`Exponential`](https://open-atmos.github.io/PySDM/PySDM/initialisation/spectra.html#PySDM.initialisation.spectra.Exponential) and is deterministically sampled to match
189
+ It is a [`Coalescence`](https://open-atmos.github.io/PySDM/PySDM/dynamics/collisions/sollision.html#Coalescence)-only set-up in which the initial particle size
190
+ spectrum is [`Exponential`](https://open-atmos.github.io/PySDM/PySDM/initialisation/spectra/exponential.html#Exponential) and is deterministically sampled to match
191
191
  the condition of each super-droplet having equal initial multiplicity:
192
192
  <details>
193
193
  <summary>Julia (click to expand)</summary>
@@ -241,9 +241,9 @@ Description: # PySDM
241
241
  ```
242
242
  </details>
243
243
 
244
- The key element of the PySDM interface is the [``Particulator``](https://open-atmos.github.io/PySDM/PySDM/particulator.html)
244
+ The key element of the PySDM interface is the [``Particulator``](https://open-atmos.github.io/PySDM/PySDM/particulator.html#Particulator)
245
245
  class instances of which are used to manage the system state and control the simulation.
246
- Instantiation of the [``Particulator``](https://open-atmos.github.io/PySDM/PySDM/particulator.html) class is handled by the [``Builder``](https://open-atmos.github.io/PySDM/PySDM/builder.html)
246
+ Instantiation of the [``Particulator``](https://open-atmos.github.io/PySDM/PySDM/particulator.html#Particulator) class is handled by the [``Builder``](https://open-atmos.github.io/PySDM/PySDM/builder.html#Builder)
247
247
  as exemplified below:
248
248
  <details>
249
249
  <summary>Julia (click to expand)</summary>
@@ -313,18 +313,18 @@ Description: # PySDM
313
313
  The ``backend`` argument may be set to ``CPU`` or ``GPU``
314
314
  what translates to choosing the multi-threaded backend or the
315
315
  GPU-resident computation mode, respectively.
316
- The employed [`Box`](https://open-atmos.github.io/PySDM/PySDM/environments/box.html) environment corresponds to a zero-dimensional framework
316
+ The employed [`Box`](https://open-atmos.github.io/PySDM/PySDM/environments/box.html#Box) environment corresponds to a zero-dimensional framework
317
317
  (particle positions are not considered).
318
318
  The vectors of particle multiplicities ``n`` and particle volumes ``v`` are
319
319
  used to initialise super-droplet attributes.
320
- The [`Coalescence`](https://open-atmos.github.io/PySDM/PySDM/dynamics/coalescence.html)
320
+ The [`Coalescence`](https://open-atmos.github.io/PySDM/PySDM/dynamics/collisions/collision.html#Coalescence)
321
321
  Monte-Carlo algorithm (Super Droplet Method) is registered as the only
322
322
  dynamic in the system.
323
- Finally, the [`build()`](https://open-atmos.github.io/PySDM/PySDM/builder.html#PySDM.builder.Builder.build) method is used to obtain an instance
324
- of [`Particulator`](https://open-atmos.github.io/PySDM/PySDM/particulator.html#PySDM.particulator.Particulator) which can then be used to control time-stepping and
323
+ Finally, the [`build()`](https://open-atmos.github.io/PySDM/PySDM/builder.html#Builder.build) method is used to obtain an instance
324
+ of [`Particulator`](https://open-atmos.github.io/PySDM/PySDM/particulator.html#Particulator) which can then be used to control time-stepping and
325
325
  access simulation state.
326
326
 
327
- The [`run(nt)`](https://open-atmos.github.io/PySDM/PySDM/particulator.html#PySDM.particuparticulatorr.Particulator.run) method advances the simulation by ``nt`` timesteps.
327
+ The [`run(nt)`](https://open-atmos.github.io/PySDM/PySDM/particulator.html#Particulator.run) method advances the simulation by ``nt`` timesteps.
328
328
  In the listing below, its usage is interleaved with plotting logic
329
329
  which displays a histogram of particle mass distribution
330
330
  at selected timesteps:
@@ -441,16 +441,16 @@ Description: # PySDM
441
441
  SPECTRUM_INIT["ParticleVolumeVersusRadiusLogarithmSpectrum.__init__()"] -->|instantiates| SPECTRUM
442
442
  SPECTRUM[":ParticleVolumeVersusRadiusLogarithmSpectrum"] -->|added as element of| PRODUCTS
443
443
 
444
- click COAL "https://open-atmos.github.io/PySDM/PySDM/dynamics/collisions/collision.html"
444
+ click COAL "https://open-atmos.github.io/PySDM/PySDM/dynamics/collisions/collision.html#Coalescence"
445
445
  click BUILDER_INSTANCE "https://open-atmos.github.io/PySDM/PySDM/builder.html"
446
446
  click BUILDER_INIT "https://open-atmos.github.io/PySDM/PySDM/builder.html"
447
447
  click BUILDER_ADD_DYN "https://open-atmos.github.io/PySDM/PySDM/builder.html"
448
- click ENV_INIT "https://open-atmos.github.io/PySDM/PySDM/environments/index.html"
449
- click ENV "https://open-atmos.github.io/PySDM/PySDM/environments/index.html"
450
- click KERNEL_INIT "https://open-atmos.github.io/PySDM/PySDM/dynamics/collisions/collision_kernels/index.html"
451
- click KERNEL "https://open-atmos.github.io/PySDM/PySDM/dynamics/collisions/collision_kernels/index.html"
452
- click EXP_INIT "https://open-atmos.github.io/PySDM/PySDM/initialisation/spectra/index.html"
453
- click IS "https://open-atmos.github.io/PySDM/PySDM/initialisation/spectra/index.html"
448
+ click ENV_INIT "https://open-atmos.github.io/PySDM/PySDM/environments.html"
449
+ click ENV "https://open-atmos.github.io/PySDM/PySDM/environments.html"
450
+ click KERNEL_INIT "https://open-atmos.github.io/PySDM/PySDM/dynamics/collisions/collision_kernels.html"
451
+ click KERNEL "https://open-atmos.github.io/PySDM/PySDM/dynamics/collisions/collision_kernels.html"
452
+ click EXP_INIT "https://open-atmos.github.io/PySDM/PySDM/initialisation/spectra.html"
453
+ click IS "https://open-atmos.github.io/PySDM/PySDM/initialisation/spectra.html"
454
454
  click CM_INIT "https://open-atmos.github.io/PySDM/PySDM/initialisation/sampling/spectral_sampling.html"
455
455
  click CM_INSTANCE "https://open-atmos.github.io/PySDM/PySDM/initialisation/sampling/spectral_sampling.html"
456
456
  click SAMPLE "https://open-atmos.github.io/PySDM/PySDM/initialisation/sampling/spectral_sampling.html"
@@ -466,7 +466,7 @@ Description: # PySDM
466
466
 
467
467
  In the following example, a condensation-only setup is used with the adiabatic
468
468
  [`Parcel`](https://open-atmos.github.io/PySDM/PySDM/environments/parcel.html) environment.
469
- An initial [`Lognormal`](https://open-atmos.github.io/PySDM/PySDM/initialisation/spectra.html#PySDM.initialisation.spectra.Lognormal)
469
+ An initial [`Lognormal`](https://open-atmos.github.io/PySDM/PySDM/initialisation/spectra/lognormal.html#Lognormal)
470
470
  spectrum of dry aerosol particles is first initialised to equilibrium wet size for the given
471
471
  initial humidity.
472
472
  Subsequent particle growth due to [`Condensation`](https://open-atmos.github.io/PySDM/PySDM/dynamics/condensation.html) of water vapour (coupled with the release of latent heat)
@@ -476,7 +476,7 @@ Description: # PySDM
476
476
  and depict the evolution of
477
477
  [`PeakSupersaturation`](https://open-atmos.github.io/PySDM/PySDM/products/condensation/peak_supersaturation.html),
478
478
  [`EffectiveRadius`](https://open-atmos.github.io/PySDM/PySDM/products/size_spectral/effective_radius.html),
479
- [`ParticleConcentration`](https://open-atmos.github.io/PySDM/PySDM/products/size_spectral/particle_concentration.html#PySDM.products.particles_concentration.ParticleConcentration)
479
+ [`ParticleConcentration`](https://open-atmos.github.io/PySDM/PySDM/products/size_spectral/particle_concentration.html#ParticleConcentration)
480
480
  and the
481
481
  [`WaterMixingRatio `](https://open-atmos.github.io/PySDM/PySDM/products/size_spectral/water_mixing_ratio.html).
482
482
 
@@ -521,7 +521,7 @@ Description: # PySDM
521
521
 
522
522
  r_dry, specific_concentration = spectral_sampling.Logarithmic(spectrum).sample(n_sd)
523
523
  v_dry = formulae.trivia.volume(radius=r_dry)
524
- r_wet = equilibrate_wet_radii(r_dry=r_dry, environment=env, kappa_times_dry_volume=kappa * v_dry)
524
+ r_wet = equilibrate_wet_radii(r_dry=r_dry, environment=builder.particulator.environment, kappa_times_dry_volume=kappa * v_dry)
525
525
 
526
526
  attributes = Dict()
527
527
  attributes["multiplicity"] = discretise_multiplicities(specific_concentration * env.mass_of_dry_air)
@@ -606,7 +606,7 @@ Description: # PySDM
606
606
  specific_concentration = tmp{2};
607
607
  r_wet = equilibrate_wet_radii(pyargs(...
608
608
  'r_dry', r_dry, ...
609
- 'environment', env, ...
609
+ 'environment', builder.particulator.environment, ...
610
610
  'kappa_times_dry_volume', kappa * v_dry...
611
611
  ));
612
612
 
@@ -702,7 +702,7 @@ Description: # PySDM
702
702
 
703
703
  r_dry, specific_concentration = spectral_sampling.Logarithmic(spectrum).sample(n_sd)
704
704
  v_dry = formulae.trivia.volume(radius=r_dry)
705
- r_wet = equilibrate_wet_radii(r_dry=r_dry, environment=env, kappa_times_dry_volume=kappa * v_dry)
705
+ r_wet = equilibrate_wet_radii(r_dry=r_dry, environment=builder.particulator.environment, kappa_times_dry_volume=kappa * v_dry)
706
706
 
707
707
  attributes = {
708
708
  'multiplicity': discretise_multiplicities(specific_concentration * env.mass_of_dry_air),
@@ -49,8 +49,7 @@ class Builder:
49
49
  def _set_environment(self, environment):
50
50
  if self.particulator.environment is not None:
51
51
  raise AssertionError("environment has already been set")
52
- self.particulator.environment = environment
53
- self.particulator.environment.register(self)
52
+ self.particulator.environment = environment.instantiate(builder=self)
54
53
 
55
54
  def add_dynamic(self, dynamic):
56
55
  assert self.particulator.environment is not None
@@ -5,8 +5,10 @@ Bare zero-dimensional framework
5
5
  import numpy as np
6
6
 
7
7
  from PySDM.impl.mesh import Mesh
8
+ from PySDM.environments.impl import register_environment
8
9
 
9
10
 
11
+ @register_environment()
10
12
  class Box:
11
13
  def __init__(self, dt, dv):
12
14
  self.dt = dt
@@ -0,0 +1,3 @@
1
+ """ common internals not intended to be imported from user code """
2
+
3
+ from PySDM.environments.impl.register_environment import register_environment
@@ -0,0 +1,24 @@
1
+ """ decorator for environment classes
2
+ ensuring that their instances can be re-used with multiple builders """
3
+
4
+ from copy import deepcopy
5
+
6
+
7
+ def _instantiate(self, *, builder):
8
+ copy = deepcopy(self)
9
+ copy.register(builder=builder)
10
+ return copy
11
+
12
+
13
+ def register_environment():
14
+ def decorator(cls):
15
+ if hasattr(cls, "instantiate"):
16
+ if cls.instantiate is not _instantiate:
17
+ raise AttributeError(
18
+ "decorated class has a different instantiate method"
19
+ )
20
+ else:
21
+ setattr(cls, "instantiate", _instantiate)
22
+ return cls
23
+
24
+ return decorator
@@ -7,10 +7,12 @@ import numpy as np
7
7
 
8
8
  from PySDM.environments.impl.moist import Moist
9
9
 
10
- from ..impl import arakawa_c
11
- from ..initialisation.equilibrate_wet_radii import equilibrate_wet_radii
10
+ from PySDM.impl import arakawa_c
11
+ from PySDM.initialisation.equilibrate_wet_radii import equilibrate_wet_radii
12
+ from PySDM.environments.impl import register_environment
12
13
 
13
14
 
15
+ @register_environment()
14
16
  class Kinematic1D(Moist):
15
17
  def __init__(self, *, dt, mesh, thd_of_z, rhod_of_z, z0=0):
16
18
  super().__init__(dt, mesh, [])
@@ -12,10 +12,11 @@ from PySDM.initialisation.equilibrate_wet_radii import (
12
12
  equilibrate_wet_radii,
13
13
  )
14
14
  from PySDM.initialisation.sampling.spectral_sampling import ConstantMultiplicity
15
-
16
- from ..impl import arakawa_c
15
+ from PySDM.impl import arakawa_c
16
+ from PySDM.environments.impl import register_environment
17
17
 
18
18
 
19
+ @register_environment()
19
20
  class Kinematic2D(Moist):
20
21
  def __init__(self, *, dt, grid, size, rhod_of, mixed_phase=False):
21
22
  super().__init__(dt, Mesh(grid, size), [], mixed_phase=mixed_phase)
@@ -12,8 +12,10 @@ from PySDM.initialisation.equilibrate_wet_radii import (
12
12
  default_rtol,
13
13
  equilibrate_wet_radii,
14
14
  )
15
+ from PySDM.environments.impl import register_environment
15
16
 
16
17
 
18
+ @register_environment()
17
19
  class Parcel(Moist): # pylint: disable=too-many-instance-attributes
18
20
  def __init__(
19
21
  self,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: PySDM
3
- Version: 2.71
3
+ Version: 2.73
4
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
5
  Home-page: https://github.com/open-atmos/PySDM
6
6
  Author: https://github.com/open-atmos/PySDM/graphs/contributors
@@ -32,7 +32,7 @@ Description: # PySDM
32
32
  [![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)
33
33
  [![Coverage Status](https://codecov.io/gh/open-atmos/PySDM/branch/main/graph/badge.svg)](https://app.codecov.io/gh/open-atmos/PySDM)
34
34
  [![PyPI version](https://badge.fury.io/py/PySDM.svg)](https://pypi.org/project/PySDM)
35
- [![API docs](https://img.shields.io/badge/API_docs-pdoc3-blue.svg)](https://open-atmos.github.io/PySDM/)
35
+ [![API docs](https://shields.mitmproxy.org/badge/docs-pdoc.dev-brightgreen.svg)](https://open-atmos.github.io/PySDM/)
36
36
 
37
37
  PySDM is a package for simulating the dynamics of population of particles.
38
38
  It is intended to serve as a building block for simulation systems modelling
@@ -62,9 +62,9 @@ Description: # PySDM
62
62
  PySDM has two alternative parallel number-crunching backends
63
63
  available: multi-threaded CPU backend based on [Numba](http://numba.pydata.org/)
64
64
  and GPU-resident backend built on top of [ThrustRTC](https://pypi.org/project/ThrustRTC/).
65
- The [`Numba`](https://open-atmos.github.io/PySDM/PySDM/backends/numba/numba.html) backend (aliased ``CPU``) features multi-threaded parallelism for
65
+ The [`Numba`](https://open-atmos.github.io/PySDM/PySDM/backends/numba.html) backend (aliased ``CPU``) features multi-threaded parallelism for
66
66
  multi-core CPUs, it uses the just-in-time compilation technique based on the LLVM infrastructure.
67
- The [`ThrustRTC`](https://open-atmos.github.io/PySDM/PySDM/backends/thrustRTC/thrustRTC.html) backend (aliased ``GPU``) offers GPU-resident operation of PySDM
67
+ The [`ThrustRTC`](https://open-atmos.github.io/PySDM/PySDM/backends/thrust_rtc.html) backend (aliased ``GPU``) offers GPU-resident operation of PySDM
68
68
  leveraging the [SIMT](https://en.wikipedia.org/wiki/Single_instruction,_multiple_threads)
69
69
  parallelisation model.
70
70
  Using the ``GPU`` backend requires nVidia hardware and [CUDA driver](https://developer.nvidia.com/cuda-downloads).
@@ -76,7 +76,7 @@ Description: # PySDM
76
76
  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).
77
77
  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).
78
78
 
79
- A [pdoc-generated](https://pdoc3.github.io/pdoc) documentation of PySDM public API is maintained at: [https://open-atmos.github.io/PySDM](https://open-atmos.github.io/PySDM)
79
+ 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)
80
80
 
81
81
  ## Example Jupyter notebooks (reproducing results from literature):
82
82
 
@@ -186,8 +186,8 @@ Description: # PySDM
186
186
  listings provide sample code roughly reproducing the
187
187
  Figure 2 from [Shima et al. 2009 paper](http://doi.org/10.1002/qj.441)
188
188
  using PySDM from Python, Julia and Matlab.
189
- It is a [`Coalescence`](https://open-atmos.github.io/PySDM/PySDM/dynamics/coalescence.html)-only set-up in which the initial particle size
190
- spectrum is [`Exponential`](https://open-atmos.github.io/PySDM/PySDM/initialisation/spectra.html#PySDM.initialisation.spectra.Exponential) and is deterministically sampled to match
189
+ It is a [`Coalescence`](https://open-atmos.github.io/PySDM/PySDM/dynamics/collisions/sollision.html#Coalescence)-only set-up in which the initial particle size
190
+ spectrum is [`Exponential`](https://open-atmos.github.io/PySDM/PySDM/initialisation/spectra/exponential.html#Exponential) and is deterministically sampled to match
191
191
  the condition of each super-droplet having equal initial multiplicity:
192
192
  <details>
193
193
  <summary>Julia (click to expand)</summary>
@@ -241,9 +241,9 @@ Description: # PySDM
241
241
  ```
242
242
  </details>
243
243
 
244
- The key element of the PySDM interface is the [``Particulator``](https://open-atmos.github.io/PySDM/PySDM/particulator.html)
244
+ The key element of the PySDM interface is the [``Particulator``](https://open-atmos.github.io/PySDM/PySDM/particulator.html#Particulator)
245
245
  class instances of which are used to manage the system state and control the simulation.
246
- Instantiation of the [``Particulator``](https://open-atmos.github.io/PySDM/PySDM/particulator.html) class is handled by the [``Builder``](https://open-atmos.github.io/PySDM/PySDM/builder.html)
246
+ Instantiation of the [``Particulator``](https://open-atmos.github.io/PySDM/PySDM/particulator.html#Particulator) class is handled by the [``Builder``](https://open-atmos.github.io/PySDM/PySDM/builder.html#Builder)
247
247
  as exemplified below:
248
248
  <details>
249
249
  <summary>Julia (click to expand)</summary>
@@ -313,18 +313,18 @@ Description: # PySDM
313
313
  The ``backend`` argument may be set to ``CPU`` or ``GPU``
314
314
  what translates to choosing the multi-threaded backend or the
315
315
  GPU-resident computation mode, respectively.
316
- The employed [`Box`](https://open-atmos.github.io/PySDM/PySDM/environments/box.html) environment corresponds to a zero-dimensional framework
316
+ The employed [`Box`](https://open-atmos.github.io/PySDM/PySDM/environments/box.html#Box) environment corresponds to a zero-dimensional framework
317
317
  (particle positions are not considered).
318
318
  The vectors of particle multiplicities ``n`` and particle volumes ``v`` are
319
319
  used to initialise super-droplet attributes.
320
- The [`Coalescence`](https://open-atmos.github.io/PySDM/PySDM/dynamics/coalescence.html)
320
+ The [`Coalescence`](https://open-atmos.github.io/PySDM/PySDM/dynamics/collisions/collision.html#Coalescence)
321
321
  Monte-Carlo algorithm (Super Droplet Method) is registered as the only
322
322
  dynamic in the system.
323
- Finally, the [`build()`](https://open-atmos.github.io/PySDM/PySDM/builder.html#PySDM.builder.Builder.build) method is used to obtain an instance
324
- of [`Particulator`](https://open-atmos.github.io/PySDM/PySDM/particulator.html#PySDM.particulator.Particulator) which can then be used to control time-stepping and
323
+ Finally, the [`build()`](https://open-atmos.github.io/PySDM/PySDM/builder.html#Builder.build) method is used to obtain an instance
324
+ of [`Particulator`](https://open-atmos.github.io/PySDM/PySDM/particulator.html#Particulator) which can then be used to control time-stepping and
325
325
  access simulation state.
326
326
 
327
- The [`run(nt)`](https://open-atmos.github.io/PySDM/PySDM/particulator.html#PySDM.particuparticulatorr.Particulator.run) method advances the simulation by ``nt`` timesteps.
327
+ The [`run(nt)`](https://open-atmos.github.io/PySDM/PySDM/particulator.html#Particulator.run) method advances the simulation by ``nt`` timesteps.
328
328
  In the listing below, its usage is interleaved with plotting logic
329
329
  which displays a histogram of particle mass distribution
330
330
  at selected timesteps:
@@ -441,16 +441,16 @@ Description: # PySDM
441
441
  SPECTRUM_INIT["ParticleVolumeVersusRadiusLogarithmSpectrum.__init__()"] -->|instantiates| SPECTRUM
442
442
  SPECTRUM[":ParticleVolumeVersusRadiusLogarithmSpectrum"] -->|added as element of| PRODUCTS
443
443
 
444
- click COAL "https://open-atmos.github.io/PySDM/PySDM/dynamics/collisions/collision.html"
444
+ click COAL "https://open-atmos.github.io/PySDM/PySDM/dynamics/collisions/collision.html#Coalescence"
445
445
  click BUILDER_INSTANCE "https://open-atmos.github.io/PySDM/PySDM/builder.html"
446
446
  click BUILDER_INIT "https://open-atmos.github.io/PySDM/PySDM/builder.html"
447
447
  click BUILDER_ADD_DYN "https://open-atmos.github.io/PySDM/PySDM/builder.html"
448
- click ENV_INIT "https://open-atmos.github.io/PySDM/PySDM/environments/index.html"
449
- click ENV "https://open-atmos.github.io/PySDM/PySDM/environments/index.html"
450
- click KERNEL_INIT "https://open-atmos.github.io/PySDM/PySDM/dynamics/collisions/collision_kernels/index.html"
451
- click KERNEL "https://open-atmos.github.io/PySDM/PySDM/dynamics/collisions/collision_kernels/index.html"
452
- click EXP_INIT "https://open-atmos.github.io/PySDM/PySDM/initialisation/spectra/index.html"
453
- click IS "https://open-atmos.github.io/PySDM/PySDM/initialisation/spectra/index.html"
448
+ click ENV_INIT "https://open-atmos.github.io/PySDM/PySDM/environments.html"
449
+ click ENV "https://open-atmos.github.io/PySDM/PySDM/environments.html"
450
+ click KERNEL_INIT "https://open-atmos.github.io/PySDM/PySDM/dynamics/collisions/collision_kernels.html"
451
+ click KERNEL "https://open-atmos.github.io/PySDM/PySDM/dynamics/collisions/collision_kernels.html"
452
+ click EXP_INIT "https://open-atmos.github.io/PySDM/PySDM/initialisation/spectra.html"
453
+ click IS "https://open-atmos.github.io/PySDM/PySDM/initialisation/spectra.html"
454
454
  click CM_INIT "https://open-atmos.github.io/PySDM/PySDM/initialisation/sampling/spectral_sampling.html"
455
455
  click CM_INSTANCE "https://open-atmos.github.io/PySDM/PySDM/initialisation/sampling/spectral_sampling.html"
456
456
  click SAMPLE "https://open-atmos.github.io/PySDM/PySDM/initialisation/sampling/spectral_sampling.html"
@@ -466,7 +466,7 @@ Description: # PySDM
466
466
 
467
467
  In the following example, a condensation-only setup is used with the adiabatic
468
468
  [`Parcel`](https://open-atmos.github.io/PySDM/PySDM/environments/parcel.html) environment.
469
- An initial [`Lognormal`](https://open-atmos.github.io/PySDM/PySDM/initialisation/spectra.html#PySDM.initialisation.spectra.Lognormal)
469
+ An initial [`Lognormal`](https://open-atmos.github.io/PySDM/PySDM/initialisation/spectra/lognormal.html#Lognormal)
470
470
  spectrum of dry aerosol particles is first initialised to equilibrium wet size for the given
471
471
  initial humidity.
472
472
  Subsequent particle growth due to [`Condensation`](https://open-atmos.github.io/PySDM/PySDM/dynamics/condensation.html) of water vapour (coupled with the release of latent heat)
@@ -476,7 +476,7 @@ Description: # PySDM
476
476
  and depict the evolution of
477
477
  [`PeakSupersaturation`](https://open-atmos.github.io/PySDM/PySDM/products/condensation/peak_supersaturation.html),
478
478
  [`EffectiveRadius`](https://open-atmos.github.io/PySDM/PySDM/products/size_spectral/effective_radius.html),
479
- [`ParticleConcentration`](https://open-atmos.github.io/PySDM/PySDM/products/size_spectral/particle_concentration.html#PySDM.products.particles_concentration.ParticleConcentration)
479
+ [`ParticleConcentration`](https://open-atmos.github.io/PySDM/PySDM/products/size_spectral/particle_concentration.html#ParticleConcentration)
480
480
  and the
481
481
  [`WaterMixingRatio `](https://open-atmos.github.io/PySDM/PySDM/products/size_spectral/water_mixing_ratio.html).
482
482
 
@@ -521,7 +521,7 @@ Description: # PySDM
521
521
 
522
522
  r_dry, specific_concentration = spectral_sampling.Logarithmic(spectrum).sample(n_sd)
523
523
  v_dry = formulae.trivia.volume(radius=r_dry)
524
- r_wet = equilibrate_wet_radii(r_dry=r_dry, environment=env, kappa_times_dry_volume=kappa * v_dry)
524
+ r_wet = equilibrate_wet_radii(r_dry=r_dry, environment=builder.particulator.environment, kappa_times_dry_volume=kappa * v_dry)
525
525
 
526
526
  attributes = Dict()
527
527
  attributes["multiplicity"] = discretise_multiplicities(specific_concentration * env.mass_of_dry_air)
@@ -606,7 +606,7 @@ Description: # PySDM
606
606
  specific_concentration = tmp{2};
607
607
  r_wet = equilibrate_wet_radii(pyargs(...
608
608
  'r_dry', r_dry, ...
609
- 'environment', env, ...
609
+ 'environment', builder.particulator.environment, ...
610
610
  'kappa_times_dry_volume', kappa * v_dry...
611
611
  ));
612
612
 
@@ -702,7 +702,7 @@ Description: # PySDM
702
702
 
703
703
  r_dry, specific_concentration = spectral_sampling.Logarithmic(spectrum).sample(n_sd)
704
704
  v_dry = formulae.trivia.volume(radius=r_dry)
705
- r_wet = equilibrate_wet_radii(r_dry=r_dry, environment=env, kappa_times_dry_volume=kappa * v_dry)
705
+ r_wet = equilibrate_wet_radii(r_dry=r_dry, environment=builder.particulator.environment, kappa_times_dry_volume=kappa * v_dry)
706
706
 
707
707
  attributes = {
708
708
  'multiplicity': discretise_multiplicities(specific_concentration * env.mass_of_dry_air),
@@ -15,7 +15,6 @@ setup.py
15
15
  .github/workflows/cancel.yml
16
16
  .github/workflows/joss.yml
17
17
  .github/workflows/joss_paper.yml
18
- .github/workflows/pdoc_index_workaround.py
19
18
  .github/workflows/readme_snippets.yml
20
19
  .github/workflows/stale.yml
21
20
  .github/workflows/tests+artifacts+pypi.yml
@@ -189,6 +188,7 @@ PySDM/environments/kinematic_2d.py
189
188
  PySDM/environments/parcel.py
190
189
  PySDM/environments/impl/__init__.py
191
190
  PySDM/environments/impl/moist.py
191
+ PySDM/environments/impl/register_environment.py
192
192
  PySDM/exporters/__init__.py
193
193
  PySDM/exporters/netcdf_exporter.py
194
194
  PySDM/exporters/netcdf_exporter_1d.py
@@ -633,6 +633,7 @@ paper/paper.md
633
633
  paper/paperv1.md
634
634
  paper/readme.pdf
635
635
  paper/test.pdf
636
+ pdoc_templates/index.html.jinja2
636
637
  tests/__init__.py
637
638
  tests/examples_tests/__init__.py
638
639
  tests/examples_tests/conftest.py
@@ -799,6 +800,8 @@ tests/unit_tests/dynamics/displacement/displacement_settings.py
799
800
  tests/unit_tests/dynamics/displacement/test_advection.py
800
801
  tests/unit_tests/dynamics/displacement/test_courant_product.py
801
802
  tests/unit_tests/dynamics/displacement/test_sedimentation.py
803
+ tests/unit_tests/environments/__init__.py
804
+ tests/unit_tests/environments/test_impl.py
802
805
  tests/unit_tests/impl/__init__.py
803
806
  tests/unit_tests/impl/test_camel_case.py
804
807
  tests/unit_tests/impl/test_mesh.py
@@ -21,7 +21,7 @@
21
21
  [![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)
22
22
  [![Coverage Status](https://codecov.io/gh/open-atmos/PySDM/branch/main/graph/badge.svg)](https://app.codecov.io/gh/open-atmos/PySDM)
23
23
  [![PyPI version](https://badge.fury.io/py/PySDM.svg)](https://pypi.org/project/PySDM)
24
- [![API docs](https://img.shields.io/badge/API_docs-pdoc3-blue.svg)](https://open-atmos.github.io/PySDM/)
24
+ [![API docs](https://shields.mitmproxy.org/badge/docs-pdoc.dev-brightgreen.svg)](https://open-atmos.github.io/PySDM/)
25
25
 
26
26
  PySDM is a package for simulating the dynamics of population of particles.
27
27
  It is intended to serve as a building block for simulation systems modelling
@@ -51,9 +51,9 @@ Like the examples, these tutorials can be executed or viewed "in the cloud" maki
51
51
  PySDM has two alternative parallel number-crunching backends
52
52
  available: multi-threaded CPU backend based on [Numba](http://numba.pydata.org/)
53
53
  and GPU-resident backend built on top of [ThrustRTC](https://pypi.org/project/ThrustRTC/).
54
- The [`Numba`](https://open-atmos.github.io/PySDM/PySDM/backends/numba/numba.html) backend (aliased ``CPU``) features multi-threaded parallelism for
54
+ The [`Numba`](https://open-atmos.github.io/PySDM/PySDM/backends/numba.html) backend (aliased ``CPU``) features multi-threaded parallelism for
55
55
  multi-core CPUs, it uses the just-in-time compilation technique based on the LLVM infrastructure.
56
- The [`ThrustRTC`](https://open-atmos.github.io/PySDM/PySDM/backends/thrustRTC/thrustRTC.html) backend (aliased ``GPU``) offers GPU-resident operation of PySDM
56
+ The [`ThrustRTC`](https://open-atmos.github.io/PySDM/PySDM/backends/thrust_rtc.html) backend (aliased ``GPU``) offers GPU-resident operation of PySDM
57
57
  leveraging the [SIMT](https://en.wikipedia.org/wiki/Single_instruction,_multiple_threads)
58
58
  parallelisation model.
59
59
  Using the ``GPU`` backend requires nVidia hardware and [CUDA driver](https://developer.nvidia.com/cuda-downloads).
@@ -65,7 +65,7 @@ For an overview of PySDM features (and the preferred way to cite PySDM in papers
65
65
  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).
66
66
  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).
67
67
 
68
- A [pdoc-generated](https://pdoc3.github.io/pdoc) documentation of PySDM public API is maintained at: [https://open-atmos.github.io/PySDM](https://open-atmos.github.io/PySDM)
68
+ 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)
69
69
 
70
70
  ## Example Jupyter notebooks (reproducing results from literature):
71
71
 
@@ -175,8 +175,8 @@ In order to depict the PySDM API with a practical example, the following
175
175
  listings provide sample code roughly reproducing the
176
176
  Figure 2 from [Shima et al. 2009 paper](http://doi.org/10.1002/qj.441)
177
177
  using PySDM from Python, Julia and Matlab.
178
- It is a [`Coalescence`](https://open-atmos.github.io/PySDM/PySDM/dynamics/coalescence.html)-only set-up in which the initial particle size
179
- spectrum is [`Exponential`](https://open-atmos.github.io/PySDM/PySDM/initialisation/spectra.html#PySDM.initialisation.spectra.Exponential) and is deterministically sampled to match
178
+ It is a [`Coalescence`](https://open-atmos.github.io/PySDM/PySDM/dynamics/collisions/sollision.html#Coalescence)-only set-up in which the initial particle size
179
+ spectrum is [`Exponential`](https://open-atmos.github.io/PySDM/PySDM/initialisation/spectra/exponential.html#Exponential) and is deterministically sampled to match
180
180
  the condition of each super-droplet having equal initial multiplicity:
181
181
  <details>
182
182
  <summary>Julia (click to expand)</summary>
@@ -230,9 +230,9 @@ attributes['volume'], attributes['multiplicity'] = ConstantMultiplicity(initial_
230
230
  ```
231
231
  </details>
232
232
 
233
- The key element of the PySDM interface is the [``Particulator``](https://open-atmos.github.io/PySDM/PySDM/particulator.html)
233
+ The key element of the PySDM interface is the [``Particulator``](https://open-atmos.github.io/PySDM/PySDM/particulator.html#Particulator)
234
234
  class instances of which are used to manage the system state and control the simulation.
235
- Instantiation of the [``Particulator``](https://open-atmos.github.io/PySDM/PySDM/particulator.html) class is handled by the [``Builder``](https://open-atmos.github.io/PySDM/PySDM/builder.html)
235
+ Instantiation of the [``Particulator``](https://open-atmos.github.io/PySDM/PySDM/particulator.html#Particulator) class is handled by the [``Builder``](https://open-atmos.github.io/PySDM/PySDM/builder.html#Builder)
236
236
  as exemplified below:
237
237
  <details>
238
238
  <summary>Julia (click to expand)</summary>
@@ -302,18 +302,18 @@ particulator = builder.build(attributes, products)
302
302
  The ``backend`` argument may be set to ``CPU`` or ``GPU``
303
303
  what translates to choosing the multi-threaded backend or the
304
304
  GPU-resident computation mode, respectively.
305
- The employed [`Box`](https://open-atmos.github.io/PySDM/PySDM/environments/box.html) environment corresponds to a zero-dimensional framework
305
+ The employed [`Box`](https://open-atmos.github.io/PySDM/PySDM/environments/box.html#Box) environment corresponds to a zero-dimensional framework
306
306
  (particle positions are not considered).
307
307
  The vectors of particle multiplicities ``n`` and particle volumes ``v`` are
308
308
  used to initialise super-droplet attributes.
309
- The [`Coalescence`](https://open-atmos.github.io/PySDM/PySDM/dynamics/coalescence.html)
309
+ The [`Coalescence`](https://open-atmos.github.io/PySDM/PySDM/dynamics/collisions/collision.html#Coalescence)
310
310
  Monte-Carlo algorithm (Super Droplet Method) is registered as the only
311
311
  dynamic in the system.
312
- Finally, the [`build()`](https://open-atmos.github.io/PySDM/PySDM/builder.html#PySDM.builder.Builder.build) method is used to obtain an instance
313
- of [`Particulator`](https://open-atmos.github.io/PySDM/PySDM/particulator.html#PySDM.particulator.Particulator) which can then be used to control time-stepping and
312
+ Finally, the [`build()`](https://open-atmos.github.io/PySDM/PySDM/builder.html#Builder.build) method is used to obtain an instance
313
+ of [`Particulator`](https://open-atmos.github.io/PySDM/PySDM/particulator.html#Particulator) which can then be used to control time-stepping and
314
314
  access simulation state.
315
315
 
316
- The [`run(nt)`](https://open-atmos.github.io/PySDM/PySDM/particulator.html#PySDM.particuparticulatorr.Particulator.run) method advances the simulation by ``nt`` timesteps.
316
+ The [`run(nt)`](https://open-atmos.github.io/PySDM/PySDM/particulator.html#Particulator.run) method advances the simulation by ``nt`` timesteps.
317
317
  In the listing below, its usage is interleaved with plotting logic
318
318
  which displays a histogram of particle mass distribution
319
319
  at selected timesteps:
@@ -430,16 +430,16 @@ The component submodules used to create this simulation are visualized below:
430
430
  SPECTRUM_INIT["ParticleVolumeVersusRadiusLogarithmSpectrum.__init__()"] -->|instantiates| SPECTRUM
431
431
  SPECTRUM[":ParticleVolumeVersusRadiusLogarithmSpectrum"] -->|added as element of| PRODUCTS
432
432
 
433
- click COAL "https://open-atmos.github.io/PySDM/PySDM/dynamics/collisions/collision.html"
433
+ click COAL "https://open-atmos.github.io/PySDM/PySDM/dynamics/collisions/collision.html#Coalescence"
434
434
  click BUILDER_INSTANCE "https://open-atmos.github.io/PySDM/PySDM/builder.html"
435
435
  click BUILDER_INIT "https://open-atmos.github.io/PySDM/PySDM/builder.html"
436
436
  click BUILDER_ADD_DYN "https://open-atmos.github.io/PySDM/PySDM/builder.html"
437
- click ENV_INIT "https://open-atmos.github.io/PySDM/PySDM/environments/index.html"
438
- click ENV "https://open-atmos.github.io/PySDM/PySDM/environments/index.html"
439
- click KERNEL_INIT "https://open-atmos.github.io/PySDM/PySDM/dynamics/collisions/collision_kernels/index.html"
440
- click KERNEL "https://open-atmos.github.io/PySDM/PySDM/dynamics/collisions/collision_kernels/index.html"
441
- click EXP_INIT "https://open-atmos.github.io/PySDM/PySDM/initialisation/spectra/index.html"
442
- click IS "https://open-atmos.github.io/PySDM/PySDM/initialisation/spectra/index.html"
437
+ click ENV_INIT "https://open-atmos.github.io/PySDM/PySDM/environments.html"
438
+ click ENV "https://open-atmos.github.io/PySDM/PySDM/environments.html"
439
+ click KERNEL_INIT "https://open-atmos.github.io/PySDM/PySDM/dynamics/collisions/collision_kernels.html"
440
+ click KERNEL "https://open-atmos.github.io/PySDM/PySDM/dynamics/collisions/collision_kernels.html"
441
+ click EXP_INIT "https://open-atmos.github.io/PySDM/PySDM/initialisation/spectra.html"
442
+ click IS "https://open-atmos.github.io/PySDM/PySDM/initialisation/spectra.html"
443
443
  click CM_INIT "https://open-atmos.github.io/PySDM/PySDM/initialisation/sampling/spectral_sampling.html"
444
444
  click CM_INSTANCE "https://open-atmos.github.io/PySDM/PySDM/initialisation/sampling/spectral_sampling.html"
445
445
  click SAMPLE "https://open-atmos.github.io/PySDM/PySDM/initialisation/sampling/spectral_sampling.html"
@@ -455,7 +455,7 @@ The component submodules used to create this simulation are visualized below:
455
455
 
456
456
  In the following example, a condensation-only setup is used with the adiabatic
457
457
  [`Parcel`](https://open-atmos.github.io/PySDM/PySDM/environments/parcel.html) environment.
458
- An initial [`Lognormal`](https://open-atmos.github.io/PySDM/PySDM/initialisation/spectra.html#PySDM.initialisation.spectra.Lognormal)
458
+ An initial [`Lognormal`](https://open-atmos.github.io/PySDM/PySDM/initialisation/spectra/lognormal.html#Lognormal)
459
459
  spectrum of dry aerosol particles is first initialised to equilibrium wet size for the given
460
460
  initial humidity.
461
461
  Subsequent particle growth due to [`Condensation`](https://open-atmos.github.io/PySDM/PySDM/dynamics/condensation.html) of water vapour (coupled with the release of latent heat)
@@ -465,7 +465,7 @@ Results of the simulation are plotted against vertical
465
465
  and depict the evolution of
466
466
  [`PeakSupersaturation`](https://open-atmos.github.io/PySDM/PySDM/products/condensation/peak_supersaturation.html),
467
467
  [`EffectiveRadius`](https://open-atmos.github.io/PySDM/PySDM/products/size_spectral/effective_radius.html),
468
- [`ParticleConcentration`](https://open-atmos.github.io/PySDM/PySDM/products/size_spectral/particle_concentration.html#PySDM.products.particles_concentration.ParticleConcentration)
468
+ [`ParticleConcentration`](https://open-atmos.github.io/PySDM/PySDM/products/size_spectral/particle_concentration.html#ParticleConcentration)
469
469
  and the
470
470
  [`WaterMixingRatio `](https://open-atmos.github.io/PySDM/PySDM/products/size_spectral/water_mixing_ratio.html).
471
471
 
@@ -510,7 +510,7 @@ builder.add_dynamic(Condensation())
510
510
 
511
511
  r_dry, specific_concentration = spectral_sampling.Logarithmic(spectrum).sample(n_sd)
512
512
  v_dry = formulae.trivia.volume(radius=r_dry)
513
- r_wet = equilibrate_wet_radii(r_dry=r_dry, environment=env, kappa_times_dry_volume=kappa * v_dry)
513
+ r_wet = equilibrate_wet_radii(r_dry=r_dry, environment=builder.particulator.environment, kappa_times_dry_volume=kappa * v_dry)
514
514
 
515
515
  attributes = Dict()
516
516
  attributes["multiplicity"] = discretise_multiplicities(specific_concentration * env.mass_of_dry_air)
@@ -595,7 +595,7 @@ v_dry = formulae.trivia.volume(pyargs('radius', r_dry));
595
595
  specific_concentration = tmp{2};
596
596
  r_wet = equilibrate_wet_radii(pyargs(...
597
597
  'r_dry', r_dry, ...
598
- 'environment', env, ...
598
+ 'environment', builder.particulator.environment, ...
599
599
  'kappa_times_dry_volume', kappa * v_dry...
600
600
  ));
601
601
 
@@ -691,7 +691,7 @@ builder.add_dynamic(Condensation())
691
691
 
692
692
  r_dry, specific_concentration = spectral_sampling.Logarithmic(spectrum).sample(n_sd)
693
693
  v_dry = formulae.trivia.volume(radius=r_dry)
694
- r_wet = equilibrate_wet_radii(r_dry=r_dry, environment=env, kappa_times_dry_volume=kappa * v_dry)
694
+ r_wet = equilibrate_wet_radii(r_dry=r_dry, environment=builder.particulator.environment, kappa_times_dry_volume=kappa * v_dry)
695
695
 
696
696
  attributes = {
697
697
  'multiplicity': discretise_multiplicities(specific_concentration * env.mass_of_dry_air),