physicskit 0.3.0__tar.gz → 0.4.0__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 (565) hide show
  1. physicskit-0.4.0/MANIFEST.in +7 -0
  2. {physicskit-0.3.0 → physicskit-0.4.0}/PKG-INFO +5 -5
  3. {physicskit-0.3.0 → physicskit-0.4.0}/README.md +4 -4
  4. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/__init__.py +1 -1
  5. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/astro/__init__.py +20 -0
  6. physicskit-0.4.0/physicskit/astro/radiative_transfer.py +209 -0
  7. physicskit-0.4.0/physicskit/astro/sph.py +277 -0
  8. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/astro/stellar_structure.py +2 -2
  9. physicskit-0.4.0/physicskit/astro/tests/test_sph_and_radiative_transfer.py +79 -0
  10. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/astro/visualizers.py +2 -2
  11. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/chaos/__init__.py +6 -0
  12. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/chaos/systems/__init__.py +6 -0
  13. physicskit-0.4.0/physicskit/chaos/systems/bifurcations.py +272 -0
  14. physicskit-0.4.0/physicskit/chaos/systems/synchronization.py +263 -0
  15. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/chaos/tests/test_streamlit_app.py +5 -1
  16. physicskit-0.4.0/physicskit/chaos/tests/test_synchronization_and_hopf.py +90 -0
  17. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/chaos/visualizers/divergence.py +2 -1
  18. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/chaos/visualizers/section.py +2 -1
  19. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/chaos/visualizers/viewer3d.py +2 -2
  20. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/classical/core/base_system.py +11 -11
  21. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/classical/systems/chains.py +2 -2
  22. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/classical/systems/hamiltonian.py +2 -2
  23. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/classical/systems/lagrangian.py +6 -6
  24. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/classical/systems/newtonian.py +3 -3
  25. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/classical/systems/rotations.py +8 -8
  26. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/classical/utils/stepsize.py +1 -0
  27. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/classical/utils/symbolic.py +1 -1
  28. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/classical/visualizers/animations.py +3 -4
  29. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/classical/visualizers/interactive.py +2 -2
  30. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/condensed/models.py +1 -1
  31. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/condensed/spin_chains.py +1 -1
  32. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/condensed/tight_binding.py +9 -9
  33. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/condensed/weyl.py +1 -1
  34. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/fields/electrostatics.py +2 -2
  35. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/fluids/__init__.py +38 -1
  36. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/fluids/systems/__init__.py +28 -0
  37. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/fluids/systems/acoustics.py +1 -1
  38. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/fluids/systems/compressible_flow.py +106 -2
  39. physicskit-0.4.0/physicskit/fluids/systems/convection.py +506 -0
  40. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/fluids/systems/heat_equation.py +1 -1
  41. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/fluids/systems/potential_flow.py +1 -1
  42. physicskit-0.4.0/physicskit/fluids/systems/shallow_water.py +311 -0
  43. physicskit-0.4.0/physicskit/fluids/systems/turbulence.py +400 -0
  44. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/fluids/systems/vortex_dynamics.py +1 -1
  45. physicskit-0.4.0/physicskit/fluids/tests/test_turbulence_convection_shallow_water.py +193 -0
  46. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/optics/__init__.py +38 -0
  47. physicskit-0.4.0/physicskit/optics/_compat.py +5 -0
  48. physicskit-0.4.0/physicskit/optics/nonlinear.py +217 -0
  49. physicskit-0.4.0/physicskit/optics/tests/test_thin_films_and_nonlinear.py +111 -0
  50. physicskit-0.4.0/physicskit/optics/thin_films.py +324 -0
  51. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/particle/kinematics.py +4 -0
  52. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/particle/lattice_gauge.py +2 -1
  53. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/particle/visualizers/animations.py +2 -2
  54. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/plasma/kinetic.py +9 -7
  55. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/plasma/tests/test_plasma.py +21 -0
  56. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/quantum/__init__.py +31 -0
  57. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/quantum/_compat.py +1 -1
  58. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/quantum/chapters/entanglement.py +1 -1
  59. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/quantum/chapters/hartree_fock.py +4 -4
  60. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/quantum/chapters/perturbation.py +1 -1
  61. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/quantum/chapters/potentials.py +5 -5
  62. physicskit-0.4.0/physicskit/quantum/chapters/quantum_circuits.py +435 -0
  63. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/quantum/chapters/relativistic.py +1 -1
  64. physicskit-0.4.0/physicskit/quantum/chapters/tensor_networks.py +308 -0
  65. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/quantum/core/solvers.py +2 -2
  66. physicskit-0.4.0/physicskit/quantum/tests/test_quantum_circuits.py +93 -0
  67. physicskit-0.4.0/physicskit/quantum/tests/test_tensor_networks.py +80 -0
  68. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/quantum/visualizers/wavefunctions.py +1 -1
  69. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/relativity/__init__.py +6 -2
  70. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/relativity/chapters/__init__.py +5 -0
  71. physicskit-0.4.0/physicskit/relativity/chapters/kerr_newman.py +426 -0
  72. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/relativity/chapters/lensing.py +10 -1
  73. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/relativity/chapters/neutron_star.py +2 -2
  74. physicskit-0.4.0/physicskit/relativity/tests/test_kerr_newman.py +84 -0
  75. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/relativity/tests/test_lensing.py +8 -4
  76. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/relativity/visualizers/shadow_render.py +4 -4
  77. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/ensembles/embedded.py +1 -0
  78. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/validation/sine_kernel.py +10 -0
  79. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/semiclassical/__init__.py +29 -6
  80. physicskit-0.4.0/physicskit/semiclassical/_compat.py +5 -0
  81. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/semiclassical/core/__init__.py +16 -0
  82. physicskit-0.4.0/physicskit/semiclassical/core/bogomolny.py +172 -0
  83. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/semiclassical/core/gutzwiller.py +138 -0
  84. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/semiclassical/core/propagators.py +186 -1
  85. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/semiclassical/core/wkb.py +128 -0
  86. physicskit-0.4.0/physicskit/semiclassical/tests/test_bogomolny.py +57 -0
  87. physicskit-0.4.0/physicskit/semiclassical/tests/test_gutzwiller.py +80 -0
  88. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/semiclassical/tests/test_propagators.py +44 -0
  89. physicskit-0.4.0/physicskit/semiclassical/tests/test_wkb.py +60 -0
  90. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/semiclassical/visualizers/path_integral.py +1 -1
  91. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/statphys/__init__.py +18 -1
  92. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/statphys/chapters/__init__.py +8 -0
  93. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/statphys/chapters/ising_lattice.py +16 -9
  94. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/statphys/chapters/langevin.py +11 -11
  95. physicskit-0.4.0/physicskit/statphys/chapters/path_integral.py +213 -0
  96. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/statphys/chapters/percolation.py +1 -1
  97. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/statphys/chapters/random_walk.py +4 -6
  98. physicskit-0.4.0/physicskit/statphys/chapters/wang_landau.py +198 -0
  99. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/statphys/core/monte_carlo.py +117 -1
  100. physicskit-0.4.0/physicskit/statphys/tests/test_cluster_and_flat_histogram.py +67 -0
  101. physicskit-0.4.0/physicskit/statphys/tests/test_path_integral.py +46 -0
  102. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit.egg-info/PKG-INFO +5 -5
  103. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit.egg-info/SOURCES.txt +26 -0
  104. {physicskit-0.3.0 → physicskit-0.4.0}/pyproject.toml +23 -50
  105. physicskit-0.3.0/physicskit/optics/_compat.py +0 -5
  106. physicskit-0.3.0/physicskit/semiclassical/_compat.py +0 -5
  107. physicskit-0.3.0/physicskit/semiclassical/tests/test_gutzwiller.py +0 -35
  108. physicskit-0.3.0/physicskit/semiclassical/tests/test_wkb.py +0 -30
  109. {physicskit-0.3.0 → physicskit-0.4.0}/LICENSE +0 -0
  110. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/astro/cosmic_web.py +0 -0
  111. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/astro/galactic_dynamics.py +0 -0
  112. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/astro/nbody.py +0 -0
  113. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/astro/orbital_mechanics.py +0 -0
  114. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/astro/stellar_dynamo.py +0 -0
  115. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/astro/tests/__init__.py +0 -0
  116. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/astro/tests/conftest.py +0 -0
  117. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/astro/tests/test_cosmic_web.py +0 -0
  118. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/astro/tests/test_galactic_dynamics.py +0 -0
  119. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/astro/tests/test_nbody.py +0 -0
  120. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/astro/tests/test_orbital_mechanics.py +0 -0
  121. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/astro/tests/test_stellar_dynamo.py +0 -0
  122. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/astro/tests/test_stellar_structure.py +0 -0
  123. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/astro/tests/test_visualizers.py +0 -0
  124. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/chaos/core/__init__.py +0 -0
  125. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/chaos/core/base_system.py +0 -0
  126. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/chaos/core/integrators.py +0 -0
  127. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/chaos/exceptions.py +0 -0
  128. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/chaos/quantum/__init__.py +0 -0
  129. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/chaos/quantum/billiards.py +0 -0
  130. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/chaos/quantum/husimi.py +0 -0
  131. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/chaos/quantum/maps.py +0 -0
  132. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/chaos/systems/billiards.py +0 -0
  133. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/chaos/systems/continuous.py +0 -0
  134. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/chaos/systems/maps.py +0 -0
  135. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/chaos/tests/__init__.py +0 -0
  136. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/chaos/tests/conftest.py +0 -0
  137. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/chaos/tests/test_basins.py +0 -0
  138. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/chaos/tests/test_bifurcation.py +0 -0
  139. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/chaos/tests/test_billiards.py +0 -0
  140. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/chaos/tests/test_continuous.py +0 -0
  141. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/chaos/tests/test_dimension.py +0 -0
  142. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/chaos/tests/test_divergence.py +0 -0
  143. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/chaos/tests/test_dynamic_plots.py +0 -0
  144. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/chaos/tests/test_integrators.py +0 -0
  145. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/chaos/tests/test_io.py +0 -0
  146. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/chaos/tests/test_maps.py +0 -0
  147. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/chaos/tests/test_metrics.py +0 -0
  148. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/chaos/tests/test_phase_space.py +0 -0
  149. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/chaos/tests/test_properties.py +0 -0
  150. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/chaos/tests/test_quantum_billiards.py +0 -0
  151. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/chaos/tests/test_quantum_maps.py +0 -0
  152. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/chaos/tests/test_recurrence.py +0 -0
  153. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/chaos/tests/test_repr_and_api_consistency.py +0 -0
  154. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/chaos/tests/test_section.py +0 -0
  155. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/chaos/tests/test_spectral.py +0 -0
  156. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/chaos/tests/test_timeseries.py +0 -0
  157. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/chaos/tests/test_viewer3d.py +0 -0
  158. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/chaos/utils/__init__.py +0 -0
  159. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/chaos/utils/dimension.py +0 -0
  160. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/chaos/utils/io.py +0 -0
  161. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/chaos/utils/metrics.py +0 -0
  162. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/chaos/utils/recurrence.py +0 -0
  163. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/chaos/utils/spectral.py +0 -0
  164. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/chaos/utils/timeseries.py +0 -0
  165. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/chaos/visualizers/__init__.py +0 -0
  166. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/chaos/visualizers/basins.py +0 -0
  167. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/chaos/visualizers/bifurcation.py +0 -0
  168. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/chaos/visualizers/dynamic_plots.py +0 -0
  169. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/chaos/visualizers/phase_space.py +0 -0
  170. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/chaos/visualizers/quantum.py +0 -0
  171. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/chaos/visualizers/recurrence.py +0 -0
  172. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/chaos/visualizers/theme.py +0 -0
  173. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/classical/__init__.py +0 -0
  174. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/classical/core/__init__.py +0 -0
  175. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/classical/core/integrators.py +0 -0
  176. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/classical/systems/__init__.py +0 -0
  177. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/classical/tests/__init__.py +0 -0
  178. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/classical/tests/conftest.py +0 -0
  179. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/classical/tests/test_base_system.py +0 -0
  180. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/classical/tests/test_chains.py +0 -0
  181. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/classical/tests/test_conservation.py +0 -0
  182. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/classical/tests/test_conservation_utils.py +0 -0
  183. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/classical/tests/test_hamiltonian.py +0 -0
  184. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/classical/tests/test_integrators.py +0 -0
  185. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/classical/tests/test_lagrangian.py +0 -0
  186. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/classical/tests/test_newtonian.py +0 -0
  187. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/classical/tests/test_rotations.py +0 -0
  188. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/classical/tests/test_stepsize.py +0 -0
  189. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/classical/tests/test_symbolic.py +0 -0
  190. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/classical/tests/test_visualizers.py +0 -0
  191. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/classical/utils/__init__.py +0 -0
  192. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/classical/utils/conservation.py +0 -0
  193. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/classical/visualizers/__init__.py +0 -0
  194. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/classical/visualizers/modal_analysis.py +0 -0
  195. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/classical/visualizers/phase_space.py +0 -0
  196. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/condensed/__init__.py +0 -0
  197. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/condensed/anderson_localization.py +0 -0
  198. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/condensed/correlated.py +0 -0
  199. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/condensed/ginzburg_landau.py +0 -0
  200. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/condensed/landau_levels.py +0 -0
  201. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/condensed/laughlin.py +0 -0
  202. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/condensed/phonons.py +0 -0
  203. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/condensed/tests/__init__.py +0 -0
  204. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/condensed/tests/test_condensed.py +0 -0
  205. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/condensed/tests/test_phonons.py +0 -0
  206. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/condensed/tests/test_spin_chains.py +0 -0
  207. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/condensed/tests/test_transport.py +0 -0
  208. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/condensed/tests/test_visualizers.py +0 -0
  209. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/condensed/topological_insulator_3d.py +0 -0
  210. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/condensed/topology.py +0 -0
  211. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/condensed/transport.py +0 -0
  212. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/condensed/visualizers.py +0 -0
  213. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/constants.py +0 -0
  214. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/fields/__init__.py +0 -0
  215. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/fields/electrodynamics.py +0 -0
  216. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/fields/magnetostatics.py +0 -0
  217. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/fields/quantum_fields.py +0 -0
  218. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/fields/solitons.py +0 -0
  219. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/fields/tests/__init__.py +0 -0
  220. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/fields/tests/conftest.py +0 -0
  221. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/fields/tests/test_electrostatics.py +0 -0
  222. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/fields/tests/test_field_animations.py +0 -0
  223. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/fields/tests/test_fields.py +0 -0
  224. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/fields/tests/test_magnetostatics.py +0 -0
  225. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/fields/tests/test_visualizers.py +0 -0
  226. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/fields/visualizers.py +0 -0
  227. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/fluids/core/__init__.py +0 -0
  228. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/fluids/core/grid.py +0 -0
  229. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/fluids/core/timestepping.py +0 -0
  230. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/fluids/exceptions.py +0 -0
  231. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/fluids/systems/elasticity.py +0 -0
  232. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/fluids/systems/instabilities.py +0 -0
  233. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/fluids/systems/lattice_boltzmann.py +0 -0
  234. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/fluids/systems/navier_stokes.py +0 -0
  235. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/fluids/systems/viscous_flow.py +0 -0
  236. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/fluids/tests/__init__.py +0 -0
  237. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/fluids/tests/conftest.py +0 -0
  238. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/fluids/tests/test_acoustics.py +0 -0
  239. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/fluids/tests/test_compressible_flow.py +0 -0
  240. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/fluids/tests/test_elasticity.py +0 -0
  241. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/fluids/tests/test_heat_equation.py +0 -0
  242. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/fluids/tests/test_instabilities.py +0 -0
  243. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/fluids/tests/test_lattice_boltzmann.py +0 -0
  244. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/fluids/tests/test_navier_stokes.py +0 -0
  245. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/fluids/tests/test_potential_flow.py +0 -0
  246. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/fluids/tests/test_static_visualizers.py +0 -0
  247. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/fluids/tests/test_utils.py +0 -0
  248. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/fluids/tests/test_viscous_flow.py +0 -0
  249. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/fluids/tests/test_visualizers.py +0 -0
  250. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/fluids/tests/test_vortex_dynamics.py +0 -0
  251. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/fluids/utils/__init__.py +0 -0
  252. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/fluids/utils/dimensionless.py +0 -0
  253. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/fluids/utils/spectral_analysis.py +0 -0
  254. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/fluids/visualizers/__init__.py +0 -0
  255. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/fluids/visualizers/compressible.py +0 -0
  256. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/fluids/visualizers/flow_fields.py +0 -0
  257. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/fluids/visualizers/potential_flow.py +0 -0
  258. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/fluids/visualizers/spectra.py +0 -0
  259. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/fluids/visualizers/theme.py +0 -0
  260. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/integrators/__init__.py +0 -0
  261. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/integrators/adaptive.py +0 -0
  262. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/integrators/fixed_step.py +0 -0
  263. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/integrators/stochastic.py +0 -0
  264. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/integrators/tests/__init__.py +0 -0
  265. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/integrators/tests/test_integrators.py +0 -0
  266. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/integrators/tests/test_stochastic.py +0 -0
  267. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/io.py +0 -0
  268. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/optics/gaussian.py +0 -0
  269. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/optics/lasers.py +0 -0
  270. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/optics/quantum_optics.py +0 -0
  271. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/optics/ray.py +0 -0
  272. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/optics/tests/__init__.py +0 -0
  273. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/optics/tests/test_diffraction_animation.py +0 -0
  274. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/optics/tests/test_gaussian.py +0 -0
  275. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/optics/tests/test_lasers.py +0 -0
  276. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/optics/tests/test_quantum_optics.py +0 -0
  277. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/optics/tests/test_ray.py +0 -0
  278. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/optics/tests/test_visualizers.py +0 -0
  279. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/optics/tests/test_wave.py +0 -0
  280. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/optics/visualizers.py +0 -0
  281. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/optics/wave.py +0 -0
  282. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/particle/__init__.py +0 -0
  283. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/particle/collider.py +0 -0
  284. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/particle/confinement.py +0 -0
  285. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/particle/decays.py +0 -0
  286. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/particle/electroweak.py +0 -0
  287. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/particle/neutrinos.py +0 -0
  288. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/particle/nuclear.py +0 -0
  289. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/particle/scattering.py +0 -0
  290. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/particle/tests/__init__.py +0 -0
  291. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/particle/tests/conftest.py +0 -0
  292. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/particle/tests/test_collider.py +0 -0
  293. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/particle/tests/test_confinement.py +0 -0
  294. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/particle/tests/test_decays.py +0 -0
  295. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/particle/tests/test_electroweak.py +0 -0
  296. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/particle/tests/test_kinematics.py +0 -0
  297. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/particle/tests/test_lattice_gauge.py +0 -0
  298. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/particle/tests/test_neutrinos.py +0 -0
  299. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/particle/tests/test_nuclear.py +0 -0
  300. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/particle/tests/test_scattering.py +0 -0
  301. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/particle/tests/test_visualizers.py +0 -0
  302. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/particle/visualizers/__init__.py +0 -0
  303. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/particle/visualizers/static.py +0 -0
  304. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/plasma/__init__.py +0 -0
  305. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/plasma/acceleration.py +0 -0
  306. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/plasma/instabilities.py +0 -0
  307. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/plasma/mhd.py +0 -0
  308. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/plasma/single_particle.py +0 -0
  309. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/plasma/tests/__init__.py +0 -0
  310. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/plasma/tests/conftest.py +0 -0
  311. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/plasma/tests/test_new_time_domain_features.py +0 -0
  312. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/plasma/tests/test_visualizers.py +0 -0
  313. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/plasma/turbulence.py +0 -0
  314. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/plasma/visualizers.py +0 -0
  315. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/plasma/waves.py +0 -0
  316. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/py.typed +0 -0
  317. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/quantum/chapters/__init__.py +0 -0
  318. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/quantum/chapters/harmonic_spin.py +0 -0
  319. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/quantum/chapters/hydrogen_am.py +0 -0
  320. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/quantum/chapters/open_systems.py +0 -0
  321. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/quantum/chapters/scattering.py +0 -0
  322. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/quantum/chapters/spin.py +0 -0
  323. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/quantum/chapters/wave_packets.py +0 -0
  324. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/quantum/core/__init__.py +0 -0
  325. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/quantum/core/eigensolvers.py +0 -0
  326. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/quantum/core/operators.py +0 -0
  327. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/quantum/tests/__init__.py +0 -0
  328. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/quantum/tests/conftest.py +0 -0
  329. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/quantum/tests/test_animations.py +0 -0
  330. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/quantum/tests/test_compat.py +0 -0
  331. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/quantum/tests/test_eigensolvers.py +0 -0
  332. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/quantum/tests/test_entanglement.py +0 -0
  333. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/quantum/tests/test_harmonic_spin.py +0 -0
  334. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/quantum/tests/test_hartree_fock.py +0 -0
  335. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/quantum/tests/test_hydrogen_am.py +0 -0
  336. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/quantum/tests/test_measure.py +0 -0
  337. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/quantum/tests/test_open_systems.py +0 -0
  338. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/quantum/tests/test_operators.py +0 -0
  339. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/quantum/tests/test_perturbation.py +0 -0
  340. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/quantum/tests/test_physics_checks.py +0 -0
  341. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/quantum/tests/test_potentials.py +0 -0
  342. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/quantum/tests/test_relativistic.py +0 -0
  343. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/quantum/tests/test_scattering.py +0 -0
  344. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/quantum/tests/test_solvers.py +0 -0
  345. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/quantum/tests/test_spin.py +0 -0
  346. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/quantum/tests/test_unitarity.py +0 -0
  347. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/quantum/tests/test_wave_packets.py +0 -0
  348. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/quantum/utils/__init__.py +0 -0
  349. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/quantum/utils/measure.py +0 -0
  350. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/quantum/visualizers/__init__.py +0 -0
  351. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/quantum/visualizers/bloch_sphere.py +0 -0
  352. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/quantum/visualizers/entanglement.py +0 -0
  353. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/quantum/visualizers/orbitals.py +0 -0
  354. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/quantum/visualizers/phase_space.py +0 -0
  355. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/relativity/chapters/cosmology.py +0 -0
  356. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/relativity/chapters/gw_merger.py +0 -0
  357. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/relativity/chapters/kerr.py +0 -0
  358. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/relativity/chapters/schwarzschild.py +0 -0
  359. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/relativity/chapters/timekeeping.py +0 -0
  360. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/relativity/core/__init__.py +0 -0
  361. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/relativity/core/geodesics.py +0 -0
  362. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/relativity/core/kerr_raytracer.py +0 -0
  363. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/relativity/core/raytracer.py +0 -0
  364. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/relativity/core/tensors.py +0 -0
  365. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/relativity/tests/__init__.py +0 -0
  366. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/relativity/tests/conftest.py +0 -0
  367. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/relativity/tests/test_conservations.py +0 -0
  368. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/relativity/tests/test_constants.py +0 -0
  369. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/relativity/tests/test_cosmology.py +0 -0
  370. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/relativity/tests/test_gw_merger.py +0 -0
  371. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/relativity/tests/test_kerr.py +0 -0
  372. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/relativity/tests/test_kerr_raytracer.py +0 -0
  373. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/relativity/tests/test_neutron_star.py +0 -0
  374. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/relativity/tests/test_raytracer.py +0 -0
  375. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/relativity/tests/test_schwarzschild.py +0 -0
  376. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/relativity/tests/test_shadow_render.py +0 -0
  377. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/relativity/tests/test_tensors.py +0 -0
  378. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/relativity/tests/test_timekeeping.py +0 -0
  379. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/relativity/tests/test_visualizers_misc.py +0 -0
  380. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/relativity/utils/__init__.py +0 -0
  381. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/relativity/utils/constants.py +0 -0
  382. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/relativity/visualizers/__init__.py +0 -0
  383. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/relativity/visualizers/interactive.py +0 -0
  384. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/relativity/visualizers/spacetime_3d.py +0 -0
  385. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/relativity/visualizers/spacetime_diagrams.py +0 -0
  386. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/relativity/visualizers/wave_plots.py +0 -0
  387. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/results.py +0 -0
  388. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/__init__.py +0 -0
  389. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/ensembles/__init__.py +0 -0
  390. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/ensembles/banded.py +0 -0
  391. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/ensembles/base.py +0 -0
  392. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/ensembles/bdg.py +0 -0
  393. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/ensembles/chiral.py +0 -0
  394. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/ensembles/circular.py +0 -0
  395. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/ensembles/crossover.py +0 -0
  396. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/ensembles/density_matrix.py +0 -0
  397. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/ensembles/effective_hamiltonian.py +0 -0
  398. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/ensembles/gaussian.py +0 -0
  399. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/ensembles/ginibre.py +0 -0
  400. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/ensembles/girko.py +0 -0
  401. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/ensembles/graph_laplacian.py +0 -0
  402. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/ensembles/haar.py +0 -0
  403. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/ensembles/jacobi.py +0 -0
  404. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/ensembles/poisson.py +0 -0
  405. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/ensembles/polynomial.py +0 -0
  406. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/ensembles/pt_symmetric.py +0 -0
  407. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/ensembles/single_ring.py +0 -0
  408. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/ensembles/sparse.py +0 -0
  409. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/ensembles/syk.py +0 -0
  410. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/ensembles/truncated_unitary.py +0 -0
  411. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/ensembles/universality.py +0 -0
  412. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/ensembles/wishart.py +0 -0
  413. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/py.typed +0 -0
  414. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/spectrum.py +0 -0
  415. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/stats/__init__.py +0 -0
  416. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/stats/characteristic_polynomial.py +0 -0
  417. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/stats/circular_law.py +0 -0
  418. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/stats/correlations.py +0 -0
  419. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/stats/density.py +0 -0
  420. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/stats/entanglement.py +0 -0
  421. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/stats/free_probability.py +0 -0
  422. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/stats/localization.py +0 -0
  423. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/stats/marchenko_pastur.py +0 -0
  424. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/stats/pt_symmetric.py +0 -0
  425. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/stats/ratios.py +0 -0
  426. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/stats/real_ginibre.py +0 -0
  427. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/stats/rigidity.py +0 -0
  428. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/stats/single_ring.py +0 -0
  429. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/stats/spacing.py +0 -0
  430. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/stats/tracy_widom.py +0 -0
  431. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/stats/truncated_unitary.py +0 -0
  432. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/stats/unfolding.py +0 -0
  433. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/stats/wachter.py +0 -0
  434. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/tests/__init__.py +0 -0
  435. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/tests/cache_utils.py +0 -0
  436. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/tests/conftest.py +0 -0
  437. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/tests/test_banded.py +0 -0
  438. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/tests/test_base.py +0 -0
  439. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/tests/test_bdg.py +0 -0
  440. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/tests/test_characteristic_polynomial.py +0 -0
  441. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/tests/test_chiral.py +0 -0
  442. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/tests/test_circular.py +0 -0
  443. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/tests/test_crossover.py +0 -0
  444. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/tests/test_density.py +0 -0
  445. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/tests/test_density_matrix.py +0 -0
  446. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/tests/test_effective_hamiltonian.py +0 -0
  447. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/tests/test_embedded.py +0 -0
  448. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/tests/test_free_probability.py +0 -0
  449. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/tests/test_gaussian_ensembles.py +0 -0
  450. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/tests/test_gaussian_semicircle.py +0 -0
  451. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/tests/test_ginibre_circular_law.py +0 -0
  452. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/tests/test_girko.py +0 -0
  453. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/tests/test_graph_laplacian.py +0 -0
  454. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/tests/test_haar.py +0 -0
  455. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/tests/test_jacobi_wachter.py +0 -0
  456. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/tests/test_localization.py +0 -0
  457. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/tests/test_poisson.py +0 -0
  458. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/tests/test_polynomial.py +0 -0
  459. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/tests/test_pt_symmetric.py +0 -0
  460. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/tests/test_random_state.py +0 -0
  461. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/tests/test_real_ginibre.py +0 -0
  462. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/tests/test_rigidity_universality.py +0 -0
  463. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/tests/test_single_ring.py +0 -0
  464. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/tests/test_spacing_and_ratios.py +0 -0
  465. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/tests/test_sparse.py +0 -0
  466. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/tests/test_spectrum.py +0 -0
  467. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/tests/test_syk.py +0 -0
  468. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/tests/test_tracy_widom.py +0 -0
  469. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/tests/test_tridiagonal.py +0 -0
  470. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/tests/test_truncated_unitary.py +0 -0
  471. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/tests/test_validation_base.py +0 -0
  472. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/tests/test_validation_misc.py +0 -0
  473. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/tests/test_wishart_marchenko_pastur.py +0 -0
  474. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/utils/__init__.py +0 -0
  475. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/utils/haar.py +0 -0
  476. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/utils/random_state.py +0 -0
  477. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/utils/tridiagonal.py +0 -0
  478. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/validation/__init__.py +0 -0
  479. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/validation/base.py +0 -0
  480. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/validation/circular_law.py +0 -0
  481. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/validation/marchenko_pastur.py +0 -0
  482. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/validation/ratio_distribution.py +0 -0
  483. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/validation/real_ginibre.py +0 -0
  484. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/validation/single_ring.py +0 -0
  485. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/validation/tracy_widom.py +0 -0
  486. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/validation/universality.py +0 -0
  487. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/validation/wachter.py +0 -0
  488. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/validation/wigner_semicircle.py +0 -0
  489. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/validation/wigner_surmise.py +0 -0
  490. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/semiclassical/core/path_integral.py +0 -0
  491. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/semiclassical/systems/__init__.py +0 -0
  492. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/semiclassical/systems/scarring.py +0 -0
  493. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/semiclassical/tests/__init__.py +0 -0
  494. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/semiclassical/tests/test_path_integral.py +0 -0
  495. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/semiclassical/tests/test_scarring.py +0 -0
  496. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/semiclassical/tests/test_visualizers.py +0 -0
  497. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/semiclassical/visualizers/__init__.py +0 -0
  498. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/semiclassical/visualizers/gutzwiller.py +0 -0
  499. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/semiclassical/visualizers/propagators.py +0 -0
  500. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/semiclassical/visualizers/scarring.py +0 -0
  501. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/semiclassical/visualizers/wkb.py +0 -0
  502. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/statphys/chapters/ehrenfest_urn.py +0 -0
  503. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/statphys/chapters/kpz_growth.py +0 -0
  504. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/statphys/chapters/molecular_dynamics.py +0 -0
  505. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/statphys/chapters/nonequilibrium_work.py +0 -0
  506. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/statphys/chapters/renormalization.py +0 -0
  507. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/statphys/chapters/sandpile.py +0 -0
  508. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/statphys/chapters/spin_glass.py +0 -0
  509. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/statphys/core/__init__.py +0 -0
  510. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/statphys/core/kpz_engine.py +0 -0
  511. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/statphys/core/md_engine.py +0 -0
  512. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/statphys/core/random_walk_engine.py +0 -0
  513. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/statphys/core/sandpile_engine.py +0 -0
  514. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/statphys/tests/__init__.py +0 -0
  515. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/statphys/tests/test_dynamics.py +0 -0
  516. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/statphys/tests/test_ehrenfest_urn.py +0 -0
  517. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/statphys/tests/test_finite_size_scaling.py +0 -0
  518. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/statphys/tests/test_fokker_planck.py +0 -0
  519. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/statphys/tests/test_interactive.py +0 -0
  520. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/statphys/tests/test_ising.py +0 -0
  521. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/statphys/tests/test_kpz.py +0 -0
  522. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/statphys/tests/test_landau_theory.py +0 -0
  523. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/statphys/tests/test_langevin.py +0 -0
  524. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/statphys/tests/test_md_engine.py +0 -0
  525. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/statphys/tests/test_molecular_dynamics.py +0 -0
  526. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/statphys/tests/test_nonequilibrium_work.py +0 -0
  527. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/statphys/tests/test_partition_function.py +0 -0
  528. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/statphys/tests/test_percolation.py +0 -0
  529. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/statphys/tests/test_potts_model.py +0 -0
  530. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/statphys/tests/test_random_walk.py +0 -0
  531. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/statphys/tests/test_renormalization.py +0 -0
  532. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/statphys/tests/test_sandpile.py +0 -0
  533. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/statphys/tests/test_spin_glass.py +0 -0
  534. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/statphys/tests/test_thermodynamics.py +0 -0
  535. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/statphys/tests/test_xy_model.py +0 -0
  536. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/statphys/utils/__init__.py +0 -0
  537. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/statphys/utils/dynamics.py +0 -0
  538. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/statphys/utils/finite_size_scaling.py +0 -0
  539. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/statphys/utils/fokker_planck.py +0 -0
  540. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/statphys/utils/landau_theory.py +0 -0
  541. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/statphys/utils/partition_function.py +0 -0
  542. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/statphys/utils/thermodynamics.py +0 -0
  543. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/statphys/visualizers/__init__.py +0 -0
  544. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/statphys/visualizers/interactive.py +0 -0
  545. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/statphys/visualizers/jarzynski_render.py +0 -0
  546. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/statphys/visualizers/kpz_render.py +0 -0
  547. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/statphys/visualizers/lattice_render.py +0 -0
  548. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/statphys/visualizers/particle_render.py +0 -0
  549. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/statphys/visualizers/random_walk_render.py +0 -0
  550. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/statphys/visualizers/rg_render.py +0 -0
  551. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/statphys/visualizers/sandpile_render.py +0 -0
  552. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/statphys/visualizers/spin_glass_render.py +0 -0
  553. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/statphys/visualizers/urn_render.py +0 -0
  554. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/statphys/visualizers/vortex_render.py +0 -0
  555. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/tests/__init__.py +0 -0
  556. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/tests/test_constants.py +0 -0
  557. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/tests/test_io.py +0 -0
  558. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/tests/test_package.py +0 -0
  559. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/tests/test_results.py +0 -0
  560. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/tests/test_units.py +0 -0
  561. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/units.py +0 -0
  562. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit.egg-info/dependency_links.txt +0 -0
  563. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit.egg-info/requires.txt +0 -0
  564. {physicskit-0.3.0 → physicskit-0.4.0}/physicskit.egg-info/top_level.txt +0 -0
  565. {physicskit-0.3.0 → physicskit-0.4.0}/setup.cfg +0 -0
@@ -0,0 +1,7 @@
1
+ # The sdist carries the full test suite (each subpackage's tests/) for
2
+ # downstream packagers; the wheel does not, via exclude-package-data in
3
+ # pyproject.toml.
4
+ graft physicskit
5
+ prune physicskit/rmt/tests/.physicskit.rmt_test_cache
6
+ prune physicskit/rmt/tests/.rmtkit_test_cache
7
+ global-exclude __pycache__ *.py[cod] *.nbi *.nbc .DS_Store
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: physicskit
3
- Version: 0.3.0
3
+ Version: 0.4.0
4
4
  Summary: Unified scientific toolkit for computational physics: General Relativity, Quantum Mechanics, Chaos, Random Matrix Theory, Statistical Mechanics, Classical Dynamics, and Condensed Matter.
5
5
  Author-email: Charles Poli <cpoli374@gmail.com>
6
6
  Maintainer-email: Charles Poli <cpoli374@gmail.com>
@@ -61,7 +61,7 @@ Dynamic: license-file
61
61
 
62
62
  | | |
63
63
  |:--|:-:|
64
- | Package | [![PyPI version](https://img.shields.io/pypi/v/physicskit)](https://pypi.org/project/physicskit/) [![Python versions](https://img.shields.io/pypi/pyversions/physicskit)](https://pypi.org/project/physicskit/) |
64
+ | Package | [![PyPI version](https://img.shields.io/pypi/v/physicskit)](https://pypi.org/project/physicskit/) [![Python versions](https://img.shields.io/pypi/pyversions/physicskit)](https://pypi.org/project/physicskit/) [![DOI](https://zenodo.org/badge/1369609308.svg)](https://zenodo.org/badge/latestdoi/1369609308) |
65
65
  | Quality | [![License](https://img.shields.io/github/license/cpoli/physicskit)](https://github.com/cpoli/physicskit/blob/main/LICENSE) [![CI](https://github.com/cpoli/physicskit/actions/workflows/ci.yml/badge.svg)](https://github.com/cpoli/physicskit/actions/workflows/ci.yml) [![Coverage](https://img.shields.io/codecov/c/github/cpoli/physicskit)](https://codecov.io/gh/cpoli/physicskit) [![Coverage (manual)](https://img.shields.io/badge/coverage-96%25-brightgreen)](#coverage) |
66
66
  | Documentation | [![Docs](https://img.shields.io/badge/docs-cpoli.github.io%2Fphysicskit-blue)](https://cpoli.github.io/physicskit/) |
67
67
  | Code style | [![Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff) |
@@ -235,8 +235,7 @@ MPLBACKEND=Agg pytest --doctest-modules physicskit \
235
235
 
236
236
  Both commands, plus `ruff check`/`ruff format --check`, run in CI on
237
237
  every PR (`.github/workflows/ci.yml`) across Python 3.10-3.14 on Linux and
238
- macOS, as does `mypy` on the typed core (`constants`, `integrators`,
239
- `units`, `results`, `io`). See [CONTRIBUTING.md](CONTRIBUTING.md) before
238
+ macOS, as does `mypy` on the whole package. See [CONTRIBUTING.md](CONTRIBUTING.md) before
240
239
  opening a PR.
241
240
 
242
241
  Performance benchmarks for the shared integrators and three representative
@@ -268,7 +267,8 @@ trace into numba-compiled native code.
268
267
  ## Docs
269
268
 
270
269
  Built docs are hosted at <https://cpoli.github.io/physicskit/>, served from
271
- the `gh-pages` branch. To build locally:
270
+ the `gh-pages` branch, which CI redeploys on every push to `main` and on
271
+ each release. To build locally:
272
272
 
273
273
  ```bash
274
274
  pip install -e ".[docs]"
@@ -2,7 +2,7 @@
2
2
 
3
3
  | | |
4
4
  |:--|:-:|
5
- | Package | [![PyPI version](https://img.shields.io/pypi/v/physicskit)](https://pypi.org/project/physicskit/) [![Python versions](https://img.shields.io/pypi/pyversions/physicskit)](https://pypi.org/project/physicskit/) |
5
+ | Package | [![PyPI version](https://img.shields.io/pypi/v/physicskit)](https://pypi.org/project/physicskit/) [![Python versions](https://img.shields.io/pypi/pyversions/physicskit)](https://pypi.org/project/physicskit/) [![DOI](https://zenodo.org/badge/1369609308.svg)](https://zenodo.org/badge/latestdoi/1369609308) |
6
6
  | Quality | [![License](https://img.shields.io/github/license/cpoli/physicskit)](https://github.com/cpoli/physicskit/blob/main/LICENSE) [![CI](https://github.com/cpoli/physicskit/actions/workflows/ci.yml/badge.svg)](https://github.com/cpoli/physicskit/actions/workflows/ci.yml) [![Coverage](https://img.shields.io/codecov/c/github/cpoli/physicskit)](https://codecov.io/gh/cpoli/physicskit) [![Coverage (manual)](https://img.shields.io/badge/coverage-96%25-brightgreen)](#coverage) |
7
7
  | Documentation | [![Docs](https://img.shields.io/badge/docs-cpoli.github.io%2Fphysicskit-blue)](https://cpoli.github.io/physicskit/) |
8
8
  | Code style | [![Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff) |
@@ -176,8 +176,7 @@ MPLBACKEND=Agg pytest --doctest-modules physicskit \
176
176
 
177
177
  Both commands, plus `ruff check`/`ruff format --check`, run in CI on
178
178
  every PR (`.github/workflows/ci.yml`) across Python 3.10-3.14 on Linux and
179
- macOS, as does `mypy` on the typed core (`constants`, `integrators`,
180
- `units`, `results`, `io`). See [CONTRIBUTING.md](CONTRIBUTING.md) before
179
+ macOS, as does `mypy` on the whole package. See [CONTRIBUTING.md](CONTRIBUTING.md) before
181
180
  opening a PR.
182
181
 
183
182
  Performance benchmarks for the shared integrators and three representative
@@ -209,7 +208,8 @@ trace into numba-compiled native code.
209
208
  ## Docs
210
209
 
211
210
  Built docs are hosted at <https://cpoli.github.io/physicskit/>, served from
212
- the `gh-pages` branch. To build locally:
211
+ the `gh-pages` branch, which CI redeploys on every push to `main` and on
212
+ each release. To build locally:
213
213
 
214
214
  ```bash
215
215
  pip install -e ".[docs]"
@@ -36,7 +36,7 @@ from physicskit import (
36
36
  units,
37
37
  )
38
38
 
39
- __version__ = "0.3.0"
39
+ __version__ = "0.4.0"
40
40
 
41
41
  __all__ = [
42
42
  "astro",
@@ -14,6 +14,11 @@ geometrized units.
14
14
  state-vector conversion, and Hohmann transfers.
15
15
  - :mod:`physicskit.astro.galactic_dynamics` -- the NFW dark matter halo
16
16
  profile and the rotation curves it produces.
17
+ - :mod:`physicskit.astro.sph` -- smoothed-particle hydrodynamics in one
18
+ dimension, checked on Sod's shock tube.
19
+ - :mod:`physicskit.astro.radiative_transfer` -- the grey plane-parallel
20
+ atmosphere: the Eddington approximation, the exact Hopf function and
21
+ limb darkening.
17
22
  - :mod:`physicskit.astro.visualizers` -- N-body, Lane-Emden, and
18
23
  rotation-curve plots.
19
24
  """
@@ -27,6 +32,13 @@ from physicskit.astro.orbital_mechanics import (
27
32
  state_from_orbital_elements,
28
33
  vis_viva_speed,
29
34
  )
35
+ from physicskit.astro.radiative_transfer import (
36
+ GreyAtmosphere,
37
+ eddington_limb_darkening,
38
+ eddington_temperature,
39
+ emergent_intensity,
40
+ )
41
+ from physicskit.astro.sph import SPH1D, cubic_spline_kernel
30
42
  from physicskit.astro.stellar_structure import (
31
43
  PolytropicStar,
32
44
  chandrasekhar_mass,
@@ -63,4 +75,12 @@ __all__ = [
63
75
  "plot_nbody_trajectories",
64
76
  "plot_lane_emden",
65
77
  "plot_rotation_curve",
78
+ # sph
79
+ "SPH1D",
80
+ "cubic_spline_kernel",
81
+ # radiative_transfer
82
+ "GreyAtmosphere",
83
+ "eddington_limb_darkening",
84
+ "eddington_temperature",
85
+ "emergent_intensity",
66
86
  ]
@@ -0,0 +1,209 @@
1
+ """Grey radiative transfer in a plane-parallel stellar atmosphere.
2
+
3
+ Radiation crossing a stellar atmosphere obeys, at optical depth :math:`\\tau`
4
+ and direction cosine :math:`\\mu`,
5
+
6
+ .. math::
7
+
8
+ \\mu\\frac{dI}{d\\tau} = I - S.
9
+
10
+ For a *grey* opacity (independent of frequency) in radiative equilibrium the
11
+ source function equals the mean intensity, :math:`S = J`, and the flux
12
+ :math:`F = \\sigma T_{\\text{eff}}^4` is constant with depth. The solution
13
+ is (Milne 1921; Hopf 1930)
14
+
15
+ .. math::
16
+
17
+ T^4(\\tau) = \\tfrac34 T_{\\text{eff}}^4\\,[\\tau + q(\\tau)],
18
+
19
+ where the Hopf function :math:`q` rises from :math:`1/\\sqrt3` at the
20
+ surface to :math:`0.7104` deep inside. Eddington's (1926) approximation,
21
+ closing the moment equations with :math:`K = J/3`, gives the constant
22
+ :math:`q = 2/3`, and with it the limb darkening :math:`I(0, \\mu)/I(0, 1) =
23
+ (2 + 3\\mu)/5`.
24
+
25
+ :class:`GreyAtmosphere` solves the problem exactly in Chandrasekhar's
26
+ discrete-ordinates method (Astrophys. J. 100, 76 (1944); *Radiative
27
+ Transfer*, 1950, ch. III), which converges to the exact solution as the
28
+ number of streams grows and keeps :math:`q(0) = 1/\\sqrt3` exactly in every
29
+ order.
30
+ """
31
+
32
+ from __future__ import annotations
33
+
34
+ import numpy as np
35
+ from numpy.typing import ArrayLike, NDArray
36
+ from scipy.optimize import brentq
37
+
38
+ __all__ = ["GreyAtmosphere", "eddington_limb_darkening", "eddington_temperature", "emergent_intensity"]
39
+
40
+
41
+ def eddington_temperature(tau: ArrayLike, T_eff: float = 1.0) -> NDArray[np.float64]:
42
+ """Eddington's grey temperature law :math:`T^4 = \\tfrac34 T_{\\text{eff}}^4(\\tau + 2/3)`.
43
+
44
+ Parameters
45
+ ----------
46
+ tau : array_like
47
+ Optical depth.
48
+ T_eff : float, default 1.0
49
+
50
+ Returns
51
+ -------
52
+ ndarray
53
+
54
+ Examples
55
+ --------
56
+ >>> float(eddington_temperature(2 / 3, T_eff=5772.0)) # T = T_eff at tau = 2/3
57
+ 5772.0
58
+ """
59
+ tau = np.asarray(tau, dtype=float)
60
+ return T_eff * (0.75 * (tau + 2.0 / 3.0)) ** 0.25
61
+
62
+
63
+ def eddington_limb_darkening(mu: ArrayLike) -> NDArray[np.float64]:
64
+ """Eddington limb darkening :math:`I(0,\\mu)/I(0,1) = (2 + 3\\mu)/5`.
65
+
66
+ Parameters
67
+ ----------
68
+ mu : array_like
69
+ Cosine of the angle from the disc normal (1 at disc centre, 0 at the limb).
70
+
71
+ Returns
72
+ -------
73
+ ndarray
74
+ """
75
+ return (2.0 + 3.0 * np.asarray(mu, dtype=float)) / 5.0
76
+
77
+
78
+ def emergent_intensity(source, mu: ArrayLike, n: int = 64) -> NDArray[np.float64]:
79
+ """Formal solution :math:`I(0, \\mu) = \\int_0^\\infty S(\\tau)e^{-\\tau/\\mu}\\,d\\tau/\\mu`.
80
+
81
+ Evaluated by :math:`n`-point Gauss-Laguerre quadrature in :math:`t = \\tau/\\mu`.
82
+
83
+ Parameters
84
+ ----------
85
+ source : callable
86
+ Vectorized source function :math:`S(\\tau)`.
87
+ mu : array_like
88
+ Direction cosines in :math:`(0, 1]`.
89
+ n : int, default 64
90
+ Quadrature points.
91
+
92
+ Returns
93
+ -------
94
+ ndarray
95
+
96
+ Examples
97
+ --------
98
+ A linear source function :math:`S = a + b\\tau` emerges as :math:`a + b\\mu`
99
+ (the Eddington-Barbier relation):
100
+
101
+ >>> round(float(emergent_intensity(lambda t: 1 + 2 * t, 0.5)), 10)
102
+ 2.0
103
+ """
104
+ mu_arr = np.asarray(mu, dtype=float)
105
+ t, w = np.polynomial.laguerre.laggauss(n)
106
+ out = np.array([np.sum(w * source(m * t)) for m in mu_arr.ravel()])
107
+ return out.reshape(mu_arr.shape)
108
+
109
+
110
+ class GreyAtmosphere:
111
+ """Exact grey atmosphere in Chandrasekhar's :math:`n`-stream discrete-ordinates approximation.
112
+
113
+ With Gauss-Legendre nodes :math:`\\pm\\mu_i` and weights :math:`a_i`
114
+ (:math:`i = 1..n`), the intensities are
115
+
116
+ .. math::
117
+
118
+ I(\\tau, \\mu_i) = \\tfrac34 F\\left[\\tau + \\mu_i + Q + \\sum_{\\alpha=1}^{n-1}
119
+ \\frac{L_\\alpha e^{-k_\\alpha\\tau}}{1 + k_\\alpha\\mu_i}\\right],
120
+
121
+ where the :math:`k_\\alpha` are the positive roots of
122
+ :math:`\\sum_i a_i/(1 - k^2\\mu_i^2) = 1` and :math:`Q`, :math:`L_\\alpha`
123
+ follow from no incoming radiation at :math:`\\tau = 0`. The Hopf function
124
+ is :math:`q(\\tau) = Q + \\sum_\\alpha L_\\alpha e^{-k_\\alpha\\tau}`.
125
+
126
+ Parameters
127
+ ----------
128
+ n_streams : int, default 32
129
+ Number :math:`n` of directions per hemisphere.
130
+
131
+ Attributes
132
+ ----------
133
+ Q : float
134
+ :math:`q(\\infty)`, which tends to Hopf's 0.710446 as :math:`n` grows.
135
+ k, L : ndarray
136
+ Decay constants and amplitudes of the transient terms.
137
+
138
+ Examples
139
+ --------
140
+ >>> atm = GreyAtmosphere()
141
+ >>> round(float(atm.hopf(0.0)), 6) # 1/sqrt(3) in every approximation
142
+ 0.57735
143
+ >>> round(atm.Q, 4)
144
+ 0.7104
145
+ """
146
+
147
+ def __init__(self, n_streams: int = 32):
148
+ if n_streams < 1:
149
+ raise ValueError("n_streams must be at least 1")
150
+ nodes, weights = np.polynomial.legendre.leggauss(2 * n_streams)
151
+ pos = nodes > 0
152
+ self.mu = nodes[pos]
153
+ self.a = weights[pos] # full-range weights sum to 2, so these sum to 1
154
+ self.n = n_streams
155
+
156
+ def characteristic(k):
157
+ return np.sum(self.a / (1.0 - k**2 * self.mu**2)) - 1.0
158
+
159
+ # one root between consecutive poles 1/mu_i, ordered by decreasing mu
160
+ poles = np.sort(1.0 / self.mu)
161
+ roots = [brentq(characteristic, p1 * (1 + 1e-12), p2 * (1 - 1e-12)) for p1, p2 in zip(poles[:-1], poles[1:])]
162
+ self.k = np.array(roots)
163
+ # boundary condition I(0, -mu_i) = 0: Q + sum_a L_a / (1 - k_a mu_i) = mu_i
164
+ A = np.ones((self.n, self.n))
165
+ if self.n > 1:
166
+ A[:, 1:] = 1.0 / (1.0 - np.outer(self.mu, self.k))
167
+ sol = np.linalg.solve(A, self.mu)
168
+ self.Q = float(sol[0])
169
+ self.L = sol[1:]
170
+
171
+ def hopf(self, tau: ArrayLike) -> NDArray[np.float64]:
172
+ """Hopf function :math:`q(\\tau)`.
173
+
174
+ Parameters
175
+ ----------
176
+ tau : array_like
177
+
178
+ Returns
179
+ -------
180
+ ndarray
181
+ """
182
+ tau = np.asarray(tau, dtype=float)
183
+ return self.Q + np.sum(self.L * np.exp(-np.multiply.outer(tau, self.k)), axis=-1)
184
+
185
+ def temperature(self, tau: ArrayLike, T_eff: float = 1.0) -> NDArray[np.float64]:
186
+ """:math:`T(\\tau) = T_{\\text{eff}}\\,[\\tfrac34(\\tau + q(\\tau))]^{1/4}`."""
187
+ tau = np.asarray(tau, dtype=float)
188
+ return T_eff * (0.75 * (tau + self.hopf(tau))) ** 0.25
189
+
190
+ def emergent_intensity(self, mu: ArrayLike) -> NDArray[np.float64]:
191
+ """Emergent intensity in units of :math:`F/\\pi = \\sigma T_{\\text{eff}}^4/\\pi`.
192
+
193
+ The Laplace transform of :math:`S = \\tfrac34 F(\\tau + q)/\\pi` gives
194
+ :math:`I(0, \\mu) = \\tfrac34\\left[\\mu + Q + \\sum_\\alpha L_\\alpha/(1 + k_\\alpha\\mu)\\right]`.
195
+
196
+ Parameters
197
+ ----------
198
+ mu : array_like
199
+
200
+ Returns
201
+ -------
202
+ ndarray
203
+ """
204
+ mu = np.asarray(mu, dtype=float)
205
+ return 0.75 * (mu + self.Q + np.sum(self.L / (1.0 + np.multiply.outer(mu, self.k)), axis=-1))
206
+
207
+ def limb_darkening(self, mu: ArrayLike) -> NDArray[np.float64]:
208
+ """Normalized limb darkening :math:`I(0, \\mu)/I(0, 1)`."""
209
+ return self.emergent_intensity(mu) / self.emergent_intensity(1.0)
@@ -0,0 +1,277 @@
1
+ """Smoothed-particle hydrodynamics (SPH) in one dimension.
2
+
3
+ SPH represents a gas by particles of fixed mass :math:`m` that move with the
4
+ flow (Lucy, Astron. J. 82, 1013 (1977); Gingold and Monaghan, MNRAS 181, 375
5
+ (1977)). Every field is a kernel-weighted sum over neighbours; the density
6
+ is
7
+
8
+ .. math::
9
+
10
+ \\rho_i = \\sum_j m_j W(x_i - x_j, h_i),
11
+
12
+ and the Euler equations become ordinary differential equations for the
13
+ particles (Monaghan, Annu. Rev. Astron. Astrophys. 30, 543 (1992)),
14
+
15
+ .. math::
16
+
17
+ \\frac{dv_i}{dt} = -\\sum_j m_j\\left(\\frac{P_i}{\\rho_i^2} + \\frac{P_j}{\\rho_j^2}
18
+ + \\Pi_{ij}\\right)\\partial_i W_{ij},
19
+ \\qquad
20
+ \\frac{du_i}{dt} = \\frac12\\sum_j m_j\\left(\\frac{P_i}{\\rho_i^2} + \\frac{P_j}{\\rho_j^2}
21
+ + \\Pi_{ij}\\right) v_{ij}\\,\\partial_i W_{ij},
22
+
23
+ with :math:`P = (\\gamma - 1)\\rho u`, the cubic-spline kernel, and Monaghan's
24
+ artificial viscosity :math:`\\Pi_{ij}` to capture shocks. Because the
25
+ particles follow the mass, resolution concentrates where the gas is dense,
26
+ which is why SPH became the standard method for star formation, galaxy
27
+ mergers and cosmological gas. :class:`SPH1D` evolves these equations, and
28
+ :meth:`SPH1D.sod_shock_tube` sets up Sod's test problem.
29
+ """
30
+
31
+ from __future__ import annotations
32
+
33
+ import numpy as np
34
+ from numba import njit
35
+ from numpy.typing import NDArray
36
+
37
+ __all__ = ["SPH1D", "cubic_spline_kernel"]
38
+
39
+
40
+ @njit(cache=True)
41
+ def _w(r, h):
42
+ q = abs(r) / h
43
+ sigma = 2.0 / (3.0 * h)
44
+ if q < 1.0:
45
+ return sigma * (1.0 - 1.5 * q * q + 0.75 * q**3)
46
+ if q < 2.0:
47
+ return sigma * 0.25 * (2.0 - q) ** 3
48
+ return 0.0
49
+
50
+
51
+ @njit(cache=True)
52
+ def _dw(r, h):
53
+ q = abs(r) / h
54
+ sigma = 2.0 / (3.0 * h * h)
55
+ s = 1.0 if r >= 0 else -1.0
56
+ if q < 1.0:
57
+ return sigma * s * (-3.0 * q + 2.25 * q * q)
58
+ if q < 2.0:
59
+ return -sigma * s * 0.75 * (2.0 - q) ** 2
60
+ return 0.0
61
+
62
+
63
+ def cubic_spline_kernel(r: NDArray[np.float64], h: float) -> NDArray[np.float64]:
64
+ """The 1D cubic-spline (M4) kernel :math:`W(r, h)`, normalized to :math:`\\int W\\,dr = 1`.
65
+
66
+ .. math::
67
+
68
+ W = \\frac{2}{3h}\\begin{cases} 1 - \\tfrac32 q^2 + \\tfrac34 q^3, & 0 \\le q < 1, \\\\
69
+ \\tfrac14(2 - q)^3, & 1 \\le q < 2, \\\\ 0, & q \\ge 2, \\end{cases}
70
+ \\qquad q = |r|/h.
71
+
72
+ Parameters
73
+ ----------
74
+ r : ndarray of float
75
+ Separations.
76
+ h : float
77
+ Smoothing length.
78
+
79
+ Returns
80
+ -------
81
+ ndarray of float
82
+
83
+ Examples
84
+ --------
85
+ >>> r = np.linspace(-3, 3, 60001)
86
+ >>> round(float(np.trapezoid(cubic_spline_kernel(r, 1.0), r)), 6)
87
+ 1.0
88
+ """
89
+ r = np.asarray(r, dtype=np.float64)
90
+ return np.array([_w(ri, h) for ri in r.ravel()]).reshape(r.shape)
91
+
92
+
93
+ @njit(cache=True)
94
+ def _density(x, m, h, order):
95
+ n = x.size
96
+ rho = np.zeros(n)
97
+ xs = x[order]
98
+ for a in range(n):
99
+ i = order[a]
100
+ rho[i] += m[i] * _w(0.0, h[i])
101
+ b = a + 1
102
+ while b < n and xs[b] - x[i] < 2.0 * h[i]:
103
+ j = order[b]
104
+ rho[i] += m[j] * _w(x[i] - x[j], h[i])
105
+ b += 1
106
+ b = a - 1
107
+ while b >= 0 and x[i] - xs[b] < 2.0 * h[i]:
108
+ j = order[b]
109
+ rho[i] += m[j] * _w(x[i] - x[j], h[i])
110
+ b -= 1
111
+ return rho
112
+
113
+
114
+ @njit(cache=True)
115
+ def _forces(x, v, m, h, rho, u, gamma, alpha, beta, order):
116
+ n = x.size
117
+ acc = np.zeros(n)
118
+ dudt = np.zeros(n)
119
+ P = (gamma - 1.0) * rho * u
120
+ c = np.sqrt(gamma * P / rho)
121
+ xs = x[order]
122
+ hmax = h.max()
123
+ for a in range(n):
124
+ i = order[a]
125
+ b = a + 1
126
+ while b < n and xs[b] - x[i] < 2.0 * hmax:
127
+ j = order[b]
128
+ xij = x[i] - x[j]
129
+ hij = 0.5 * (h[i] + h[j])
130
+ if abs(xij) < 2.0 * hij:
131
+ vij = v[i] - v[j]
132
+ dW = _dw(xij, hij)
133
+ pi_ij = 0.0
134
+ if vij * xij < 0.0:
135
+ mu = hij * vij * xij / (xij * xij + 0.01 * hij * hij)
136
+ pi_ij = (-alpha * 0.5 * (c[i] + c[j]) * mu + beta * mu * mu) / (0.5 * (rho[i] + rho[j]))
137
+ term = P[i] / rho[i] ** 2 + P[j] / rho[j] ** 2 + pi_ij
138
+ acc[i] -= m[j] * term * dW
139
+ acc[j] += m[i] * term * dW
140
+ dudt[i] += 0.5 * m[j] * term * vij * dW
141
+ dudt[j] += 0.5 * m[i] * term * vij * dW
142
+ b += 1
143
+ return acc, dudt, c
144
+
145
+
146
+ class SPH1D:
147
+ """One-dimensional SPH gas with the cubic-spline kernel and Monaghan artificial viscosity.
148
+
149
+ Smoothing lengths follow the density, :math:`h_i = \\eta\\, m_i/\\rho_i`,
150
+ and the equations are advanced with a kick-drift-kick leapfrog at a
151
+ Courant-limited time step.
152
+
153
+ Parameters
154
+ ----------
155
+ x, v : ndarray of float, shape (n,)
156
+ Particle positions and velocities.
157
+ m : ndarray of float or float
158
+ Particle masses.
159
+ u : ndarray of float, shape (n,)
160
+ Specific internal energies.
161
+ gamma : float, default 1.4
162
+ Adiabatic index.
163
+ eta : float, default 1.2
164
+ Smoothing-length factor, in units of the local particle spacing.
165
+ alpha, beta : float, default 1.0, 2.0
166
+ Artificial-viscosity coefficients.
167
+ fixed : ndarray of bool, optional
168
+ Particles held at rest (boundaries).
169
+
170
+ Examples
171
+ --------
172
+ >>> gas = SPH1D.sod_shock_tube(n_left=200)
173
+ >>> gas.run(0.05)
174
+ >>> bool(abs(gas.total_energy() - gas.energy_history[0]) < 1e-3 * gas.energy_history[0])
175
+ True
176
+ """
177
+
178
+ def __init__(self, x, v, m, u, gamma=1.4, eta=1.2, alpha=1.0, beta=2.0, fixed=None):
179
+ self.x = np.asarray(x, dtype=np.float64).copy()
180
+ self.v = np.asarray(v, dtype=np.float64).copy()
181
+ self.m = np.broadcast_to(np.asarray(m, dtype=np.float64), self.x.shape).copy()
182
+ self.u = np.asarray(u, dtype=np.float64).copy()
183
+ self.gamma = float(gamma)
184
+ self.eta = float(eta)
185
+ self.alpha = float(alpha)
186
+ self.beta = float(beta)
187
+ self.fixed = np.zeros(self.x.size, dtype=bool) if fixed is None else np.asarray(fixed, dtype=bool)
188
+ self.t = 0.0
189
+ spacing = np.gradient(np.sort(self.x))[np.argsort(np.argsort(self.x))]
190
+ self.h = self.eta * np.abs(spacing)
191
+ self._update_density()
192
+ self.energy_history = [self.total_energy()]
193
+
194
+ @classmethod
195
+ def sod_shock_tube(cls, n_left=400, gamma=1.4, left=(1.0, 1.0), right=(0.125, 0.1), length=1.0, **kwargs):
196
+ """Equal-mass particles for Sod's shock tube, with the diaphragm at :math:`x = 0`.
197
+
198
+ The left half :math:`-L < x < 0` has density and pressure ``left``,
199
+ the right half ``right``; both are at rest. Particle spacing scales
200
+ inversely with density, and the outermost few particles on each
201
+ side are held fixed as walls.
202
+
203
+ Parameters
204
+ ----------
205
+ n_left : int, default 400
206
+ Particles in the left half.
207
+ gamma : float, default 1.4
208
+ left, right : tuple of float
209
+ ``(rho, P)`` of each side.
210
+ length : float, default 1.0
211
+ Half-length :math:`L` of the tube.
212
+ **kwargs
213
+ Passed to the constructor.
214
+
215
+ Returns
216
+ -------
217
+ SPH1D
218
+ """
219
+ (rL, pL), (rR, pR) = left, right
220
+ dxL = length / n_left
221
+ m = rL * dxL
222
+ dxR = m / rR
223
+ xL = -length + dxL * (np.arange(n_left) + 0.5)
224
+ xR = dxR * (np.arange(int(round(length / dxR))) + 0.5)
225
+ x = np.concatenate((xL, xR))
226
+ u = np.concatenate((np.full(xL.size, pL / ((gamma - 1) * rL)), np.full(xR.size, pR / ((gamma - 1) * rR))))
227
+ fixed = np.zeros(x.size, dtype=bool)
228
+ fixed[:4] = fixed[-4:] = True
229
+ return cls(x, np.zeros_like(x), m, u, gamma=gamma, fixed=fixed, **kwargs)
230
+
231
+ def _update_density(self):
232
+ order = np.argsort(self.x)
233
+ for _ in range(2):
234
+ self.rho = _density(self.x, self.m, self.h, order)
235
+ self.h = self.eta * self.m / self.rho
236
+ self.rho = _density(self.x, self.m, self.h, order)
237
+ return order
238
+
239
+ @property
240
+ def pressure(self) -> NDArray[np.float64]:
241
+ """Pressure :math:`P = (\\gamma - 1)\\rho u`."""
242
+ return (self.gamma - 1.0) * self.rho * self.u
243
+
244
+ def total_energy(self) -> float:
245
+ """Total kinetic plus internal energy :math:`\\sum_i m_i(v_i^2/2 + u_i)`."""
246
+ return float(np.sum(self.m * (0.5 * self.v**2 + self.u)))
247
+
248
+ def _derivatives(self):
249
+ order = self._update_density()
250
+ acc, dudt, c = _forces(self.x, self.v, self.m, self.h, self.rho, self.u, self.gamma, self.alpha, self.beta, order)
251
+ acc[self.fixed] = 0.0
252
+ dudt[self.fixed] = 0.0
253
+ return acc, dudt, c
254
+
255
+ def run(self, t_end: float, cfl: float = 0.3) -> None:
256
+ """Advance to ``self.t + t_end`` with kick-drift-kick leapfrog.
257
+
258
+ Parameters
259
+ ----------
260
+ t_end : float
261
+ Time to advance by.
262
+ cfl : float, default 0.3
263
+ Courant factor in :math:`\\Delta t = C\\min_i h_i/(c_i + |v_i|)`.
264
+ """
265
+ t_stop = self.t + t_end
266
+ acc, dudt, c = self._derivatives()
267
+ while self.t < t_stop - 1e-14:
268
+ dt = min(cfl * np.min(self.h / (c + np.abs(self.v) + 1e-12)), t_stop - self.t)
269
+ v_half = self.v + 0.5 * dt * acc
270
+ u_half = self.u + 0.5 * dt * dudt
271
+ self.x = self.x + dt * np.where(self.fixed, 0.0, v_half)
272
+ self.v, self.u = v_half, u_half
273
+ acc, dudt, c = self._derivatives()
274
+ self.v = self.v + 0.5 * dt * acc
275
+ self.u = self.u + 0.5 * dt * dudt
276
+ self.t += dt
277
+ self.energy_history.append(self.total_energy())
@@ -75,8 +75,8 @@ def lane_emden(n, xi_max=1000.0, n_points=2000):
75
75
  def surface_event(xi, y):
76
76
  return y[0]
77
77
 
78
- surface_event.terminal = True
79
- surface_event.direction = -1
78
+ surface_event.terminal = True # type: ignore[attr-defined] # solve_ivp event attribute
79
+ surface_event.direction = -1 # type: ignore[attr-defined]
80
80
 
81
81
  sol = solve_ivp(
82
82
  rhs,