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.
- physicskit-0.4.0/MANIFEST.in +7 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/PKG-INFO +5 -5
- {physicskit-0.3.0 → physicskit-0.4.0}/README.md +4 -4
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/__init__.py +1 -1
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/astro/__init__.py +20 -0
- physicskit-0.4.0/physicskit/astro/radiative_transfer.py +209 -0
- physicskit-0.4.0/physicskit/astro/sph.py +277 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/astro/stellar_structure.py +2 -2
- physicskit-0.4.0/physicskit/astro/tests/test_sph_and_radiative_transfer.py +79 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/astro/visualizers.py +2 -2
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/chaos/__init__.py +6 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/chaos/systems/__init__.py +6 -0
- physicskit-0.4.0/physicskit/chaos/systems/bifurcations.py +272 -0
- physicskit-0.4.0/physicskit/chaos/systems/synchronization.py +263 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/chaos/tests/test_streamlit_app.py +5 -1
- physicskit-0.4.0/physicskit/chaos/tests/test_synchronization_and_hopf.py +90 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/chaos/visualizers/divergence.py +2 -1
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/chaos/visualizers/section.py +2 -1
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/chaos/visualizers/viewer3d.py +2 -2
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/classical/core/base_system.py +11 -11
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/classical/systems/chains.py +2 -2
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/classical/systems/hamiltonian.py +2 -2
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/classical/systems/lagrangian.py +6 -6
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/classical/systems/newtonian.py +3 -3
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/classical/systems/rotations.py +8 -8
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/classical/utils/stepsize.py +1 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/classical/utils/symbolic.py +1 -1
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/classical/visualizers/animations.py +3 -4
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/classical/visualizers/interactive.py +2 -2
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/condensed/models.py +1 -1
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/condensed/spin_chains.py +1 -1
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/condensed/tight_binding.py +9 -9
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/condensed/weyl.py +1 -1
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/fields/electrostatics.py +2 -2
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/fluids/__init__.py +38 -1
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/fluids/systems/__init__.py +28 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/fluids/systems/acoustics.py +1 -1
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/fluids/systems/compressible_flow.py +106 -2
- physicskit-0.4.0/physicskit/fluids/systems/convection.py +506 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/fluids/systems/heat_equation.py +1 -1
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/fluids/systems/potential_flow.py +1 -1
- physicskit-0.4.0/physicskit/fluids/systems/shallow_water.py +311 -0
- physicskit-0.4.0/physicskit/fluids/systems/turbulence.py +400 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/fluids/systems/vortex_dynamics.py +1 -1
- physicskit-0.4.0/physicskit/fluids/tests/test_turbulence_convection_shallow_water.py +193 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/optics/__init__.py +38 -0
- physicskit-0.4.0/physicskit/optics/_compat.py +5 -0
- physicskit-0.4.0/physicskit/optics/nonlinear.py +217 -0
- physicskit-0.4.0/physicskit/optics/tests/test_thin_films_and_nonlinear.py +111 -0
- physicskit-0.4.0/physicskit/optics/thin_films.py +324 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/particle/kinematics.py +4 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/particle/lattice_gauge.py +2 -1
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/particle/visualizers/animations.py +2 -2
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/plasma/kinetic.py +9 -7
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/plasma/tests/test_plasma.py +21 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/quantum/__init__.py +31 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/quantum/_compat.py +1 -1
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/quantum/chapters/entanglement.py +1 -1
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/quantum/chapters/hartree_fock.py +4 -4
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/quantum/chapters/perturbation.py +1 -1
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/quantum/chapters/potentials.py +5 -5
- physicskit-0.4.0/physicskit/quantum/chapters/quantum_circuits.py +435 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/quantum/chapters/relativistic.py +1 -1
- physicskit-0.4.0/physicskit/quantum/chapters/tensor_networks.py +308 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/quantum/core/solvers.py +2 -2
- physicskit-0.4.0/physicskit/quantum/tests/test_quantum_circuits.py +93 -0
- physicskit-0.4.0/physicskit/quantum/tests/test_tensor_networks.py +80 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/quantum/visualizers/wavefunctions.py +1 -1
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/relativity/__init__.py +6 -2
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/relativity/chapters/__init__.py +5 -0
- physicskit-0.4.0/physicskit/relativity/chapters/kerr_newman.py +426 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/relativity/chapters/lensing.py +10 -1
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/relativity/chapters/neutron_star.py +2 -2
- physicskit-0.4.0/physicskit/relativity/tests/test_kerr_newman.py +84 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/relativity/tests/test_lensing.py +8 -4
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/relativity/visualizers/shadow_render.py +4 -4
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/ensembles/embedded.py +1 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/validation/sine_kernel.py +10 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/semiclassical/__init__.py +29 -6
- physicskit-0.4.0/physicskit/semiclassical/_compat.py +5 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/semiclassical/core/__init__.py +16 -0
- physicskit-0.4.0/physicskit/semiclassical/core/bogomolny.py +172 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/semiclassical/core/gutzwiller.py +138 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/semiclassical/core/propagators.py +186 -1
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/semiclassical/core/wkb.py +128 -0
- physicskit-0.4.0/physicskit/semiclassical/tests/test_bogomolny.py +57 -0
- physicskit-0.4.0/physicskit/semiclassical/tests/test_gutzwiller.py +80 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/semiclassical/tests/test_propagators.py +44 -0
- physicskit-0.4.0/physicskit/semiclassical/tests/test_wkb.py +60 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/semiclassical/visualizers/path_integral.py +1 -1
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/statphys/__init__.py +18 -1
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/statphys/chapters/__init__.py +8 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/statphys/chapters/ising_lattice.py +16 -9
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/statphys/chapters/langevin.py +11 -11
- physicskit-0.4.0/physicskit/statphys/chapters/path_integral.py +213 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/statphys/chapters/percolation.py +1 -1
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/statphys/chapters/random_walk.py +4 -6
- physicskit-0.4.0/physicskit/statphys/chapters/wang_landau.py +198 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/statphys/core/monte_carlo.py +117 -1
- physicskit-0.4.0/physicskit/statphys/tests/test_cluster_and_flat_histogram.py +67 -0
- physicskit-0.4.0/physicskit/statphys/tests/test_path_integral.py +46 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit.egg-info/PKG-INFO +5 -5
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit.egg-info/SOURCES.txt +26 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/pyproject.toml +23 -50
- physicskit-0.3.0/physicskit/optics/_compat.py +0 -5
- physicskit-0.3.0/physicskit/semiclassical/_compat.py +0 -5
- physicskit-0.3.0/physicskit/semiclassical/tests/test_gutzwiller.py +0 -35
- physicskit-0.3.0/physicskit/semiclassical/tests/test_wkb.py +0 -30
- {physicskit-0.3.0 → physicskit-0.4.0}/LICENSE +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/astro/cosmic_web.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/astro/galactic_dynamics.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/astro/nbody.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/astro/orbital_mechanics.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/astro/stellar_dynamo.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/astro/tests/__init__.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/astro/tests/conftest.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/astro/tests/test_cosmic_web.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/astro/tests/test_galactic_dynamics.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/astro/tests/test_nbody.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/astro/tests/test_orbital_mechanics.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/astro/tests/test_stellar_dynamo.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/astro/tests/test_stellar_structure.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/astro/tests/test_visualizers.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/chaos/core/__init__.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/chaos/core/base_system.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/chaos/core/integrators.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/chaos/exceptions.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/chaos/quantum/__init__.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/chaos/quantum/billiards.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/chaos/quantum/husimi.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/chaos/quantum/maps.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/chaos/systems/billiards.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/chaos/systems/continuous.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/chaos/systems/maps.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/chaos/tests/__init__.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/chaos/tests/conftest.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/chaos/tests/test_basins.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/chaos/tests/test_bifurcation.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/chaos/tests/test_billiards.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/chaos/tests/test_continuous.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/chaos/tests/test_dimension.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/chaos/tests/test_divergence.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/chaos/tests/test_dynamic_plots.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/chaos/tests/test_integrators.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/chaos/tests/test_io.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/chaos/tests/test_maps.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/chaos/tests/test_metrics.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/chaos/tests/test_phase_space.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/chaos/tests/test_properties.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/chaos/tests/test_quantum_billiards.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/chaos/tests/test_quantum_maps.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/chaos/tests/test_recurrence.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/chaos/tests/test_repr_and_api_consistency.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/chaos/tests/test_section.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/chaos/tests/test_spectral.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/chaos/tests/test_timeseries.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/chaos/tests/test_viewer3d.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/chaos/utils/__init__.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/chaos/utils/dimension.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/chaos/utils/io.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/chaos/utils/metrics.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/chaos/utils/recurrence.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/chaos/utils/spectral.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/chaos/utils/timeseries.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/chaos/visualizers/__init__.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/chaos/visualizers/basins.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/chaos/visualizers/bifurcation.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/chaos/visualizers/dynamic_plots.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/chaos/visualizers/phase_space.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/chaos/visualizers/quantum.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/chaos/visualizers/recurrence.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/chaos/visualizers/theme.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/classical/__init__.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/classical/core/__init__.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/classical/core/integrators.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/classical/systems/__init__.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/classical/tests/__init__.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/classical/tests/conftest.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/classical/tests/test_base_system.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/classical/tests/test_chains.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/classical/tests/test_conservation.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/classical/tests/test_conservation_utils.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/classical/tests/test_hamiltonian.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/classical/tests/test_integrators.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/classical/tests/test_lagrangian.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/classical/tests/test_newtonian.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/classical/tests/test_rotations.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/classical/tests/test_stepsize.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/classical/tests/test_symbolic.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/classical/tests/test_visualizers.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/classical/utils/__init__.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/classical/utils/conservation.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/classical/visualizers/__init__.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/classical/visualizers/modal_analysis.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/classical/visualizers/phase_space.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/condensed/__init__.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/condensed/anderson_localization.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/condensed/correlated.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/condensed/ginzburg_landau.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/condensed/landau_levels.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/condensed/laughlin.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/condensed/phonons.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/condensed/tests/__init__.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/condensed/tests/test_condensed.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/condensed/tests/test_phonons.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/condensed/tests/test_spin_chains.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/condensed/tests/test_transport.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/condensed/tests/test_visualizers.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/condensed/topological_insulator_3d.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/condensed/topology.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/condensed/transport.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/condensed/visualizers.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/constants.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/fields/__init__.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/fields/electrodynamics.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/fields/magnetostatics.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/fields/quantum_fields.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/fields/solitons.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/fields/tests/__init__.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/fields/tests/conftest.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/fields/tests/test_electrostatics.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/fields/tests/test_field_animations.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/fields/tests/test_fields.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/fields/tests/test_magnetostatics.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/fields/tests/test_visualizers.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/fields/visualizers.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/fluids/core/__init__.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/fluids/core/grid.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/fluids/core/timestepping.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/fluids/exceptions.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/fluids/systems/elasticity.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/fluids/systems/instabilities.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/fluids/systems/lattice_boltzmann.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/fluids/systems/navier_stokes.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/fluids/systems/viscous_flow.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/fluids/tests/__init__.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/fluids/tests/conftest.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/fluids/tests/test_acoustics.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/fluids/tests/test_compressible_flow.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/fluids/tests/test_elasticity.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/fluids/tests/test_heat_equation.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/fluids/tests/test_instabilities.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/fluids/tests/test_lattice_boltzmann.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/fluids/tests/test_navier_stokes.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/fluids/tests/test_potential_flow.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/fluids/tests/test_static_visualizers.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/fluids/tests/test_utils.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/fluids/tests/test_viscous_flow.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/fluids/tests/test_visualizers.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/fluids/tests/test_vortex_dynamics.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/fluids/utils/__init__.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/fluids/utils/dimensionless.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/fluids/utils/spectral_analysis.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/fluids/visualizers/__init__.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/fluids/visualizers/compressible.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/fluids/visualizers/flow_fields.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/fluids/visualizers/potential_flow.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/fluids/visualizers/spectra.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/fluids/visualizers/theme.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/integrators/__init__.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/integrators/adaptive.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/integrators/fixed_step.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/integrators/stochastic.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/integrators/tests/__init__.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/integrators/tests/test_integrators.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/integrators/tests/test_stochastic.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/io.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/optics/gaussian.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/optics/lasers.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/optics/quantum_optics.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/optics/ray.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/optics/tests/__init__.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/optics/tests/test_diffraction_animation.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/optics/tests/test_gaussian.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/optics/tests/test_lasers.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/optics/tests/test_quantum_optics.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/optics/tests/test_ray.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/optics/tests/test_visualizers.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/optics/tests/test_wave.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/optics/visualizers.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/optics/wave.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/particle/__init__.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/particle/collider.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/particle/confinement.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/particle/decays.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/particle/electroweak.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/particle/neutrinos.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/particle/nuclear.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/particle/scattering.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/particle/tests/__init__.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/particle/tests/conftest.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/particle/tests/test_collider.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/particle/tests/test_confinement.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/particle/tests/test_decays.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/particle/tests/test_electroweak.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/particle/tests/test_kinematics.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/particle/tests/test_lattice_gauge.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/particle/tests/test_neutrinos.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/particle/tests/test_nuclear.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/particle/tests/test_scattering.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/particle/tests/test_visualizers.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/particle/visualizers/__init__.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/particle/visualizers/static.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/plasma/__init__.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/plasma/acceleration.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/plasma/instabilities.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/plasma/mhd.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/plasma/single_particle.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/plasma/tests/__init__.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/plasma/tests/conftest.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/plasma/tests/test_new_time_domain_features.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/plasma/tests/test_visualizers.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/plasma/turbulence.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/plasma/visualizers.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/plasma/waves.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/py.typed +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/quantum/chapters/__init__.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/quantum/chapters/harmonic_spin.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/quantum/chapters/hydrogen_am.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/quantum/chapters/open_systems.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/quantum/chapters/scattering.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/quantum/chapters/spin.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/quantum/chapters/wave_packets.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/quantum/core/__init__.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/quantum/core/eigensolvers.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/quantum/core/operators.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/quantum/tests/__init__.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/quantum/tests/conftest.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/quantum/tests/test_animations.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/quantum/tests/test_compat.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/quantum/tests/test_eigensolvers.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/quantum/tests/test_entanglement.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/quantum/tests/test_harmonic_spin.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/quantum/tests/test_hartree_fock.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/quantum/tests/test_hydrogen_am.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/quantum/tests/test_measure.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/quantum/tests/test_open_systems.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/quantum/tests/test_operators.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/quantum/tests/test_perturbation.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/quantum/tests/test_physics_checks.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/quantum/tests/test_potentials.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/quantum/tests/test_relativistic.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/quantum/tests/test_scattering.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/quantum/tests/test_solvers.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/quantum/tests/test_spin.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/quantum/tests/test_unitarity.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/quantum/tests/test_wave_packets.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/quantum/utils/__init__.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/quantum/utils/measure.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/quantum/visualizers/__init__.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/quantum/visualizers/bloch_sphere.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/quantum/visualizers/entanglement.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/quantum/visualizers/orbitals.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/quantum/visualizers/phase_space.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/relativity/chapters/cosmology.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/relativity/chapters/gw_merger.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/relativity/chapters/kerr.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/relativity/chapters/schwarzschild.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/relativity/chapters/timekeeping.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/relativity/core/__init__.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/relativity/core/geodesics.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/relativity/core/kerr_raytracer.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/relativity/core/raytracer.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/relativity/core/tensors.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/relativity/tests/__init__.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/relativity/tests/conftest.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/relativity/tests/test_conservations.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/relativity/tests/test_constants.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/relativity/tests/test_cosmology.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/relativity/tests/test_gw_merger.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/relativity/tests/test_kerr.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/relativity/tests/test_kerr_raytracer.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/relativity/tests/test_neutron_star.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/relativity/tests/test_raytracer.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/relativity/tests/test_schwarzschild.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/relativity/tests/test_shadow_render.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/relativity/tests/test_tensors.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/relativity/tests/test_timekeeping.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/relativity/tests/test_visualizers_misc.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/relativity/utils/__init__.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/relativity/utils/constants.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/relativity/visualizers/__init__.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/relativity/visualizers/interactive.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/relativity/visualizers/spacetime_3d.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/relativity/visualizers/spacetime_diagrams.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/relativity/visualizers/wave_plots.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/results.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/__init__.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/ensembles/__init__.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/ensembles/banded.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/ensembles/base.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/ensembles/bdg.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/ensembles/chiral.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/ensembles/circular.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/ensembles/crossover.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/ensembles/density_matrix.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/ensembles/effective_hamiltonian.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/ensembles/gaussian.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/ensembles/ginibre.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/ensembles/girko.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/ensembles/graph_laplacian.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/ensembles/haar.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/ensembles/jacobi.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/ensembles/poisson.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/ensembles/polynomial.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/ensembles/pt_symmetric.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/ensembles/single_ring.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/ensembles/sparse.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/ensembles/syk.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/ensembles/truncated_unitary.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/ensembles/universality.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/ensembles/wishart.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/py.typed +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/spectrum.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/stats/__init__.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/stats/characteristic_polynomial.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/stats/circular_law.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/stats/correlations.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/stats/density.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/stats/entanglement.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/stats/free_probability.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/stats/localization.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/stats/marchenko_pastur.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/stats/pt_symmetric.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/stats/ratios.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/stats/real_ginibre.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/stats/rigidity.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/stats/single_ring.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/stats/spacing.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/stats/tracy_widom.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/stats/truncated_unitary.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/stats/unfolding.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/stats/wachter.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/tests/__init__.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/tests/cache_utils.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/tests/conftest.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/tests/test_banded.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/tests/test_base.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/tests/test_bdg.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/tests/test_characteristic_polynomial.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/tests/test_chiral.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/tests/test_circular.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/tests/test_crossover.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/tests/test_density.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/tests/test_density_matrix.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/tests/test_effective_hamiltonian.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/tests/test_embedded.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/tests/test_free_probability.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/tests/test_gaussian_ensembles.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/tests/test_gaussian_semicircle.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/tests/test_ginibre_circular_law.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/tests/test_girko.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/tests/test_graph_laplacian.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/tests/test_haar.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/tests/test_jacobi_wachter.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/tests/test_localization.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/tests/test_poisson.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/tests/test_polynomial.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/tests/test_pt_symmetric.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/tests/test_random_state.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/tests/test_real_ginibre.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/tests/test_rigidity_universality.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/tests/test_single_ring.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/tests/test_spacing_and_ratios.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/tests/test_sparse.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/tests/test_spectrum.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/tests/test_syk.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/tests/test_tracy_widom.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/tests/test_tridiagonal.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/tests/test_truncated_unitary.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/tests/test_validation_base.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/tests/test_validation_misc.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/tests/test_wishart_marchenko_pastur.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/utils/__init__.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/utils/haar.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/utils/random_state.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/utils/tridiagonal.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/validation/__init__.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/validation/base.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/validation/circular_law.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/validation/marchenko_pastur.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/validation/ratio_distribution.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/validation/real_ginibre.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/validation/single_ring.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/validation/tracy_widom.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/validation/universality.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/validation/wachter.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/validation/wigner_semicircle.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/rmt/validation/wigner_surmise.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/semiclassical/core/path_integral.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/semiclassical/systems/__init__.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/semiclassical/systems/scarring.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/semiclassical/tests/__init__.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/semiclassical/tests/test_path_integral.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/semiclassical/tests/test_scarring.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/semiclassical/tests/test_visualizers.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/semiclassical/visualizers/__init__.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/semiclassical/visualizers/gutzwiller.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/semiclassical/visualizers/propagators.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/semiclassical/visualizers/scarring.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/semiclassical/visualizers/wkb.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/statphys/chapters/ehrenfest_urn.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/statphys/chapters/kpz_growth.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/statphys/chapters/molecular_dynamics.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/statphys/chapters/nonequilibrium_work.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/statphys/chapters/renormalization.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/statphys/chapters/sandpile.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/statphys/chapters/spin_glass.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/statphys/core/__init__.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/statphys/core/kpz_engine.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/statphys/core/md_engine.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/statphys/core/random_walk_engine.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/statphys/core/sandpile_engine.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/statphys/tests/__init__.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/statphys/tests/test_dynamics.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/statphys/tests/test_ehrenfest_urn.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/statphys/tests/test_finite_size_scaling.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/statphys/tests/test_fokker_planck.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/statphys/tests/test_interactive.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/statphys/tests/test_ising.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/statphys/tests/test_kpz.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/statphys/tests/test_landau_theory.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/statphys/tests/test_langevin.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/statphys/tests/test_md_engine.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/statphys/tests/test_molecular_dynamics.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/statphys/tests/test_nonequilibrium_work.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/statphys/tests/test_partition_function.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/statphys/tests/test_percolation.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/statphys/tests/test_potts_model.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/statphys/tests/test_random_walk.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/statphys/tests/test_renormalization.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/statphys/tests/test_sandpile.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/statphys/tests/test_spin_glass.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/statphys/tests/test_thermodynamics.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/statphys/tests/test_xy_model.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/statphys/utils/__init__.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/statphys/utils/dynamics.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/statphys/utils/finite_size_scaling.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/statphys/utils/fokker_planck.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/statphys/utils/landau_theory.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/statphys/utils/partition_function.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/statphys/utils/thermodynamics.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/statphys/visualizers/__init__.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/statphys/visualizers/interactive.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/statphys/visualizers/jarzynski_render.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/statphys/visualizers/kpz_render.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/statphys/visualizers/lattice_render.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/statphys/visualizers/particle_render.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/statphys/visualizers/random_walk_render.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/statphys/visualizers/rg_render.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/statphys/visualizers/sandpile_render.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/statphys/visualizers/spin_glass_render.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/statphys/visualizers/urn_render.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/statphys/visualizers/vortex_render.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/tests/__init__.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/tests/test_constants.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/tests/test_io.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/tests/test_package.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/tests/test_results.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/tests/test_units.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit/units.py +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit.egg-info/dependency_links.txt +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit.egg-info/requires.txt +0 -0
- {physicskit-0.3.0 → physicskit-0.4.0}/physicskit.egg-info/top_level.txt +0 -0
- {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
|
+
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 | [](https://pypi.org/project/physicskit/) [](https://pypi.org/project/physicskit/) |
|
|
64
|
+
| Package | [](https://pypi.org/project/physicskit/) [](https://pypi.org/project/physicskit/) [](https://zenodo.org/badge/latestdoi/1369609308) |
|
|
65
65
|
| Quality | [](https://github.com/cpoli/physicskit/blob/main/LICENSE) [](https://github.com/cpoli/physicskit/actions/workflows/ci.yml) [](https://codecov.io/gh/cpoli/physicskit) [](#coverage) |
|
|
66
66
|
| Documentation | [](https://cpoli.github.io/physicskit/) |
|
|
67
67
|
| Code style | [](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
|
|
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
|
|
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 | [](https://pypi.org/project/physicskit/) [](https://pypi.org/project/physicskit/) |
|
|
5
|
+
| Package | [](https://pypi.org/project/physicskit/) [](https://pypi.org/project/physicskit/) [](https://zenodo.org/badge/latestdoi/1369609308) |
|
|
6
6
|
| Quality | [](https://github.com/cpoli/physicskit/blob/main/LICENSE) [](https://github.com/cpoli/physicskit/actions/workflows/ci.yml) [](https://codecov.io/gh/cpoli/physicskit) [](#coverage) |
|
|
7
7
|
| Documentation | [](https://cpoli.github.io/physicskit/) |
|
|
8
8
|
| Code style | [](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
|
|
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
|
|
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]"
|
|
@@ -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,
|