physicskit 0.1.0__py3-none-any.whl
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/__init__.py +51 -0
- physicskit/astro/__init__.py +66 -0
- physicskit/astro/cosmic_web.py +395 -0
- physicskit/astro/galactic_dynamics.py +137 -0
- physicskit/astro/nbody.py +208 -0
- physicskit/astro/orbital_mechanics.py +220 -0
- physicskit/astro/stellar_dynamo.py +628 -0
- physicskit/astro/stellar_structure.py +198 -0
- physicskit/astro/tests/__init__.py +0 -0
- physicskit/astro/tests/conftest.py +7 -0
- physicskit/astro/tests/test_cosmic_web.py +159 -0
- physicskit/astro/tests/test_galactic_dynamics.py +46 -0
- physicskit/astro/tests/test_nbody.py +81 -0
- physicskit/astro/tests/test_orbital_mechanics.py +73 -0
- physicskit/astro/tests/test_stellar_dynamo.py +198 -0
- physicskit/astro/tests/test_stellar_structure.py +52 -0
- physicskit/astro/tests/test_visualizers.py +159 -0
- physicskit/astro/visualizers.py +628 -0
- physicskit/chaos/__init__.py +55 -0
- physicskit/chaos/core/__init__.py +3 -0
- physicskit/chaos/core/base_system.py +342 -0
- physicskit/chaos/core/integrators.py +40 -0
- physicskit/chaos/exceptions.py +24 -0
- physicskit/chaos/quantum/__init__.py +38 -0
- physicskit/chaos/quantum/billiards.py +274 -0
- physicskit/chaos/quantum/husimi.py +85 -0
- physicskit/chaos/quantum/maps.py +366 -0
- physicskit/chaos/systems/__init__.py +38 -0
- physicskit/chaos/systems/billiards.py +1131 -0
- physicskit/chaos/systems/continuous.py +1276 -0
- physicskit/chaos/systems/maps.py +557 -0
- physicskit/chaos/tests/__init__.py +0 -0
- physicskit/chaos/tests/test_basins.py +76 -0
- physicskit/chaos/tests/test_bifurcation.py +132 -0
- physicskit/chaos/tests/test_billiards.py +115 -0
- physicskit/chaos/tests/test_continuous.py +224 -0
- physicskit/chaos/tests/test_dimension.py +69 -0
- physicskit/chaos/tests/test_divergence.py +90 -0
- physicskit/chaos/tests/test_dynamic_plots.py +269 -0
- physicskit/chaos/tests/test_integrators.py +96 -0
- physicskit/chaos/tests/test_io.py +41 -0
- physicskit/chaos/tests/test_maps.py +110 -0
- physicskit/chaos/tests/test_metrics.py +115 -0
- physicskit/chaos/tests/test_phase_space.py +73 -0
- physicskit/chaos/tests/test_properties.py +116 -0
- physicskit/chaos/tests/test_quantum_billiards.py +94 -0
- physicskit/chaos/tests/test_quantum_maps.py +144 -0
- physicskit/chaos/tests/test_recurrence.py +51 -0
- physicskit/chaos/tests/test_repr_and_api_consistency.py +134 -0
- physicskit/chaos/tests/test_section.py +49 -0
- physicskit/chaos/tests/test_spectral.py +48 -0
- physicskit/chaos/tests/test_streamlit_app.py +45 -0
- physicskit/chaos/tests/test_timeseries.py +131 -0
- physicskit/chaos/tests/test_viewer3d.py +41 -0
- physicskit/chaos/utils/__init__.py +46 -0
- physicskit/chaos/utils/dimension.py +139 -0
- physicskit/chaos/utils/io.py +95 -0
- physicskit/chaos/utils/metrics.py +304 -0
- physicskit/chaos/utils/recurrence.py +122 -0
- physicskit/chaos/utils/spectral.py +69 -0
- physicskit/chaos/utils/timeseries.py +303 -0
- physicskit/chaos/visualizers/__init__.py +85 -0
- physicskit/chaos/visualizers/basins.py +185 -0
- physicskit/chaos/visualizers/bifurcation.py +273 -0
- physicskit/chaos/visualizers/divergence.py +374 -0
- physicskit/chaos/visualizers/dynamic_plots.py +1372 -0
- physicskit/chaos/visualizers/phase_space.py +133 -0
- physicskit/chaos/visualizers/quantum.py +299 -0
- physicskit/chaos/visualizers/recurrence.py +91 -0
- physicskit/chaos/visualizers/section.py +161 -0
- physicskit/chaos/visualizers/theme.py +31 -0
- physicskit/chaos/visualizers/viewer3d.py +82 -0
- physicskit/classical/__init__.py +55 -0
- physicskit/classical/core/__init__.py +17 -0
- physicskit/classical/core/base_system.py +510 -0
- physicskit/classical/core/integrators.py +397 -0
- physicskit/classical/systems/__init__.py +32 -0
- physicskit/classical/systems/chains.py +334 -0
- physicskit/classical/systems/hamiltonian.py +215 -0
- physicskit/classical/systems/lagrangian.py +308 -0
- physicskit/classical/systems/newtonian.py +536 -0
- physicskit/classical/systems/rotations.py +614 -0
- physicskit/classical/tests/__init__.py +0 -0
- physicskit/classical/tests/conftest.py +7 -0
- physicskit/classical/tests/test_base_system.py +113 -0
- physicskit/classical/tests/test_chains.py +84 -0
- physicskit/classical/tests/test_conservation.py +244 -0
- physicskit/classical/tests/test_conservation_utils.py +47 -0
- physicskit/classical/tests/test_hamiltonian.py +44 -0
- physicskit/classical/tests/test_integrators.py +123 -0
- physicskit/classical/tests/test_lagrangian.py +69 -0
- physicskit/classical/tests/test_newtonian.py +45 -0
- physicskit/classical/tests/test_rotations.py +160 -0
- physicskit/classical/tests/test_stepsize.py +149 -0
- physicskit/classical/tests/test_symbolic.py +125 -0
- physicskit/classical/tests/test_visualizers.py +172 -0
- physicskit/classical/utils/__init__.py +20 -0
- physicskit/classical/utils/conservation.py +126 -0
- physicskit/classical/utils/stepsize.py +187 -0
- physicskit/classical/utils/symbolic.py +235 -0
- physicskit/classical/visualizers/__init__.py +25 -0
- physicskit/classical/visualizers/animations.py +508 -0
- physicskit/classical/visualizers/interactive.py +113 -0
- physicskit/classical/visualizers/modal_analysis.py +97 -0
- physicskit/classical/visualizers/phase_space.py +214 -0
- physicskit/condensed/__init__.py +122 -0
- physicskit/condensed/anderson_localization.py +155 -0
- physicskit/condensed/correlated.py +284 -0
- physicskit/condensed/ginzburg_landau.py +220 -0
- physicskit/condensed/landau_levels.py +246 -0
- physicskit/condensed/laughlin.py +229 -0
- physicskit/condensed/models.py +627 -0
- physicskit/condensed/tests/__init__.py +0 -0
- physicskit/condensed/tests/test_condensed.py +518 -0
- physicskit/condensed/tests/test_visualizers.py +87 -0
- physicskit/condensed/tight_binding.py +445 -0
- physicskit/condensed/topological_insulator_3d.py +178 -0
- physicskit/condensed/topology.py +217 -0
- physicskit/condensed/visualizers.py +296 -0
- physicskit/condensed/weyl.py +180 -0
- physicskit/constants.py +184 -0
- physicskit/fields/__init__.py +111 -0
- physicskit/fields/electrodynamics.py +671 -0
- physicskit/fields/quantum_fields.py +510 -0
- physicskit/fields/solitons.py +527 -0
- physicskit/fields/tests/__init__.py +0 -0
- physicskit/fields/tests/conftest.py +7 -0
- physicskit/fields/tests/test_field_animations.py +154 -0
- physicskit/fields/tests/test_fields.py +439 -0
- physicskit/fields/tests/test_visualizers.py +101 -0
- physicskit/fields/visualizers.py +503 -0
- physicskit/fluids/__init__.py +134 -0
- physicskit/fluids/core/__init__.py +23 -0
- physicskit/fluids/core/grid.py +165 -0
- physicskit/fluids/core/timestepping.py +231 -0
- physicskit/fluids/exceptions.py +26 -0
- physicskit/fluids/systems/__init__.py +70 -0
- physicskit/fluids/systems/compressible_flow.py +281 -0
- physicskit/fluids/systems/instabilities.py +343 -0
- physicskit/fluids/systems/navier_stokes.py +221 -0
- physicskit/fluids/systems/potential_flow.py +440 -0
- physicskit/fluids/systems/viscous_flow.py +425 -0
- physicskit/fluids/systems/vortex_dynamics.py +304 -0
- physicskit/fluids/tests/__init__.py +0 -0
- physicskit/fluids/tests/conftest.py +7 -0
- physicskit/fluids/tests/test_compressible_flow.py +66 -0
- physicskit/fluids/tests/test_instabilities.py +115 -0
- physicskit/fluids/tests/test_navier_stokes.py +67 -0
- physicskit/fluids/tests/test_potential_flow.py +92 -0
- physicskit/fluids/tests/test_static_visualizers.py +91 -0
- physicskit/fluids/tests/test_utils.py +100 -0
- physicskit/fluids/tests/test_viscous_flow.py +110 -0
- physicskit/fluids/tests/test_visualizers.py +34 -0
- physicskit/fluids/tests/test_vortex_dynamics.py +88 -0
- physicskit/fluids/utils/__init__.py +18 -0
- physicskit/fluids/utils/dimensionless.py +239 -0
- physicskit/fluids/utils/spectral_analysis.py +142 -0
- physicskit/fluids/visualizers/__init__.py +14 -0
- physicskit/fluids/visualizers/compressible.py +39 -0
- physicskit/fluids/visualizers/flow_fields.py +252 -0
- physicskit/fluids/visualizers/potential_flow.py +51 -0
- physicskit/fluids/visualizers/spectra.py +62 -0
- physicskit/fluids/visualizers/theme.py +38 -0
- physicskit/integrators/__init__.py +52 -0
- physicskit/integrators/adaptive.py +199 -0
- physicskit/integrators/fixed_step.py +360 -0
- physicskit/integrators/tests/__init__.py +0 -0
- physicskit/integrators/tests/test_integrators.py +101 -0
- physicskit/optics/__init__.py +124 -0
- physicskit/optics/_compat.py +5 -0
- physicskit/optics/gaussian.py +382 -0
- physicskit/optics/quantum_optics.py +428 -0
- physicskit/optics/ray.py +469 -0
- physicskit/optics/tests/__init__.py +0 -0
- physicskit/optics/tests/test_diffraction_animation.py +38 -0
- physicskit/optics/tests/test_gaussian.py +170 -0
- physicskit/optics/tests/test_quantum_optics.py +147 -0
- physicskit/optics/tests/test_ray.py +177 -0
- physicskit/optics/tests/test_visualizers.py +58 -0
- physicskit/optics/tests/test_wave.py +146 -0
- physicskit/optics/visualizers.py +264 -0
- physicskit/optics/wave.py +365 -0
- physicskit/particle/__init__.py +152 -0
- physicskit/particle/collider.py +382 -0
- physicskit/particle/confinement.py +125 -0
- physicskit/particle/decays.py +357 -0
- physicskit/particle/electroweak.py +300 -0
- physicskit/particle/kinematics.py +271 -0
- physicskit/particle/neutrinos.py +84 -0
- physicskit/particle/nuclear.py +100 -0
- physicskit/particle/scattering.py +159 -0
- physicskit/particle/tests/__init__.py +0 -0
- physicskit/particle/tests/conftest.py +7 -0
- physicskit/particle/tests/test_collider.py +119 -0
- physicskit/particle/tests/test_confinement.py +42 -0
- physicskit/particle/tests/test_decays.py +112 -0
- physicskit/particle/tests/test_electroweak.py +97 -0
- physicskit/particle/tests/test_kinematics.py +138 -0
- physicskit/particle/tests/test_neutrinos.py +36 -0
- physicskit/particle/tests/test_nuclear.py +45 -0
- physicskit/particle/tests/test_scattering.py +64 -0
- physicskit/particle/tests/test_visualizers.py +214 -0
- physicskit/particle/visualizers/__init__.py +38 -0
- physicskit/particle/visualizers/animations.py +705 -0
- physicskit/particle/visualizers/static.py +101 -0
- physicskit/plasma/__init__.py +176 -0
- physicskit/plasma/acceleration.py +152 -0
- physicskit/plasma/instabilities.py +417 -0
- physicskit/plasma/kinetic.py +588 -0
- physicskit/plasma/mhd.py +463 -0
- physicskit/plasma/single_particle.py +562 -0
- physicskit/plasma/tests/__init__.py +0 -0
- physicskit/plasma/tests/conftest.py +7 -0
- physicskit/plasma/tests/test_new_time_domain_features.py +222 -0
- physicskit/plasma/tests/test_plasma.py +232 -0
- physicskit/plasma/tests/test_visualizers.py +79 -0
- physicskit/plasma/turbulence.py +219 -0
- physicskit/plasma/visualizers.py +868 -0
- physicskit/plasma/waves.py +549 -0
- physicskit/quantum/__init__.py +180 -0
- physicskit/quantum/_compat.py +20 -0
- physicskit/quantum/chapters/__init__.py +0 -0
- physicskit/quantum/chapters/entanglement.py +489 -0
- physicskit/quantum/chapters/harmonic_spin.py +517 -0
- physicskit/quantum/chapters/hydrogen_am.py +292 -0
- physicskit/quantum/chapters/perturbation.py +350 -0
- physicskit/quantum/chapters/potentials.py +997 -0
- physicskit/quantum/chapters/spin.py +306 -0
- physicskit/quantum/chapters/wave_packets.py +541 -0
- physicskit/quantum/core/__init__.py +0 -0
- physicskit/quantum/core/eigensolvers.py +311 -0
- physicskit/quantum/core/operators.py +296 -0
- physicskit/quantum/core/solvers.py +271 -0
- physicskit/quantum/tests/__init__.py +0 -0
- physicskit/quantum/tests/conftest.py +7 -0
- physicskit/quantum/tests/test_animations.py +225 -0
- physicskit/quantum/tests/test_compat.py +43 -0
- physicskit/quantum/tests/test_eigensolvers.py +24 -0
- physicskit/quantum/tests/test_entanglement.py +127 -0
- physicskit/quantum/tests/test_harmonic_spin.py +140 -0
- physicskit/quantum/tests/test_hydrogen_am.py +48 -0
- physicskit/quantum/tests/test_measure.py +110 -0
- physicskit/quantum/tests/test_operators.py +105 -0
- physicskit/quantum/tests/test_perturbation.py +112 -0
- physicskit/quantum/tests/test_physics_checks.py +131 -0
- physicskit/quantum/tests/test_potentials.py +191 -0
- physicskit/quantum/tests/test_solvers.py +70 -0
- physicskit/quantum/tests/test_spin.py +22 -0
- physicskit/quantum/tests/test_unitarity.py +84 -0
- physicskit/quantum/tests/test_wave_packets.py +53 -0
- physicskit/quantum/utils/__init__.py +0 -0
- physicskit/quantum/utils/measure.py +253 -0
- physicskit/quantum/visualizers/__init__.py +0 -0
- physicskit/quantum/visualizers/bloch_sphere.py +205 -0
- physicskit/quantum/visualizers/entanglement.py +58 -0
- physicskit/quantum/visualizers/orbitals.py +187 -0
- physicskit/quantum/visualizers/phase_space.py +179 -0
- physicskit/quantum/visualizers/wavefunctions.py +230 -0
- physicskit/relativity/__init__.py +61 -0
- physicskit/relativity/chapters/__init__.py +33 -0
- physicskit/relativity/chapters/cosmology.py +190 -0
- physicskit/relativity/chapters/gw_merger.py +399 -0
- physicskit/relativity/chapters/kerr.py +371 -0
- physicskit/relativity/chapters/lensing.py +196 -0
- physicskit/relativity/chapters/neutron_star.py +149 -0
- physicskit/relativity/chapters/schwarzschild.py +412 -0
- physicskit/relativity/chapters/timekeeping.py +133 -0
- physicskit/relativity/core/__init__.py +12 -0
- physicskit/relativity/core/geodesics.py +216 -0
- physicskit/relativity/core/kerr_raytracer.py +259 -0
- physicskit/relativity/core/raytracer.py +241 -0
- physicskit/relativity/core/tensors.py +468 -0
- physicskit/relativity/tests/__init__.py +0 -0
- physicskit/relativity/tests/test_conservations.py +54 -0
- physicskit/relativity/tests/test_constants.py +34 -0
- physicskit/relativity/tests/test_cosmology.py +61 -0
- physicskit/relativity/tests/test_gw_merger.py +117 -0
- physicskit/relativity/tests/test_kerr.py +116 -0
- physicskit/relativity/tests/test_kerr_raytracer.py +103 -0
- physicskit/relativity/tests/test_lensing.py +75 -0
- physicskit/relativity/tests/test_neutron_star.py +48 -0
- physicskit/relativity/tests/test_raytracer.py +67 -0
- physicskit/relativity/tests/test_schwarzschild.py +126 -0
- physicskit/relativity/tests/test_shadow_render.py +81 -0
- physicskit/relativity/tests/test_tensors.py +86 -0
- physicskit/relativity/tests/test_timekeeping.py +51 -0
- physicskit/relativity/tests/test_visualizers_misc.py +115 -0
- physicskit/relativity/utils/__init__.py +1 -0
- physicskit/relativity/utils/constants.py +232 -0
- physicskit/relativity/visualizers/__init__.py +46 -0
- physicskit/relativity/visualizers/interactive.py +127 -0
- physicskit/relativity/visualizers/shadow_render.py +367 -0
- physicskit/relativity/visualizers/spacetime_3d.py +92 -0
- physicskit/relativity/visualizers/spacetime_diagrams.py +198 -0
- physicskit/relativity/visualizers/wave_plots.py +185 -0
- physicskit/rmt/__init__.py +8 -0
- physicskit/rmt/ensembles/__init__.py +108 -0
- physicskit/rmt/ensembles/banded.py +114 -0
- physicskit/rmt/ensembles/base.py +135 -0
- physicskit/rmt/ensembles/bdg.py +218 -0
- physicskit/rmt/ensembles/chiral.py +308 -0
- physicskit/rmt/ensembles/circular.py +104 -0
- physicskit/rmt/ensembles/crossover.py +82 -0
- physicskit/rmt/ensembles/density_matrix.py +148 -0
- physicskit/rmt/ensembles/effective_hamiltonian.py +230 -0
- physicskit/rmt/ensembles/embedded.py +207 -0
- physicskit/rmt/ensembles/gaussian.py +153 -0
- physicskit/rmt/ensembles/ginibre.py +110 -0
- physicskit/rmt/ensembles/girko.py +190 -0
- physicskit/rmt/ensembles/graph_laplacian.py +92 -0
- physicskit/rmt/ensembles/haar.py +57 -0
- physicskit/rmt/ensembles/jacobi.py +182 -0
- physicskit/rmt/ensembles/poisson.py +77 -0
- physicskit/rmt/ensembles/polynomial.py +139 -0
- physicskit/rmt/ensembles/pt_symmetric.py +120 -0
- physicskit/rmt/ensembles/single_ring.py +170 -0
- physicskit/rmt/ensembles/sparse.py +95 -0
- physicskit/rmt/ensembles/syk.py +170 -0
- physicskit/rmt/ensembles/truncated_unitary.py +80 -0
- physicskit/rmt/ensembles/universality.py +92 -0
- physicskit/rmt/ensembles/wishart.py +88 -0
- physicskit/rmt/py.typed +0 -0
- physicskit/rmt/spectrum.py +82 -0
- physicskit/rmt/stats/__init__.py +160 -0
- physicskit/rmt/stats/characteristic_polynomial.py +77 -0
- physicskit/rmt/stats/circular_law.py +54 -0
- physicskit/rmt/stats/correlations.py +162 -0
- physicskit/rmt/stats/density.py +70 -0
- physicskit/rmt/stats/entanglement.py +36 -0
- physicskit/rmt/stats/free_probability.py +202 -0
- physicskit/rmt/stats/localization.py +338 -0
- physicskit/rmt/stats/marchenko_pastur.py +55 -0
- physicskit/rmt/stats/pt_symmetric.py +265 -0
- physicskit/rmt/stats/ratios.py +110 -0
- physicskit/rmt/stats/real_ginibre.py +134 -0
- physicskit/rmt/stats/rigidity.py +272 -0
- physicskit/rmt/stats/single_ring.py +95 -0
- physicskit/rmt/stats/spacing.py +150 -0
- physicskit/rmt/stats/tracy_widom.py +175 -0
- physicskit/rmt/stats/truncated_unitary.py +40 -0
- physicskit/rmt/stats/unfolding.py +37 -0
- physicskit/rmt/stats/wachter.py +67 -0
- physicskit/rmt/tests/__init__.py +0 -0
- physicskit/rmt/tests/cache_utils.py +107 -0
- physicskit/rmt/tests/conftest.py +8 -0
- physicskit/rmt/tests/test_banded.py +86 -0
- physicskit/rmt/tests/test_base.py +29 -0
- physicskit/rmt/tests/test_bdg.py +133 -0
- physicskit/rmt/tests/test_characteristic_polynomial.py +50 -0
- physicskit/rmt/tests/test_chiral.py +273 -0
- physicskit/rmt/tests/test_circular.py +225 -0
- physicskit/rmt/tests/test_crossover.py +72 -0
- physicskit/rmt/tests/test_density.py +23 -0
- physicskit/rmt/tests/test_density_matrix.py +181 -0
- physicskit/rmt/tests/test_effective_hamiltonian.py +140 -0
- physicskit/rmt/tests/test_embedded.py +169 -0
- physicskit/rmt/tests/test_free_probability.py +81 -0
- physicskit/rmt/tests/test_gaussian_ensembles.py +22 -0
- physicskit/rmt/tests/test_gaussian_semicircle.py +127 -0
- physicskit/rmt/tests/test_ginibre_circular_law.py +131 -0
- physicskit/rmt/tests/test_girko.py +178 -0
- physicskit/rmt/tests/test_graph_laplacian.py +102 -0
- physicskit/rmt/tests/test_haar.py +118 -0
- physicskit/rmt/tests/test_jacobi_wachter.py +136 -0
- physicskit/rmt/tests/test_localization.py +240 -0
- physicskit/rmt/tests/test_poisson.py +149 -0
- physicskit/rmt/tests/test_polynomial.py +107 -0
- physicskit/rmt/tests/test_pt_symmetric.py +178 -0
- physicskit/rmt/tests/test_random_state.py +19 -0
- physicskit/rmt/tests/test_real_ginibre.py +112 -0
- physicskit/rmt/tests/test_rigidity_universality.py +167 -0
- physicskit/rmt/tests/test_single_ring.py +132 -0
- physicskit/rmt/tests/test_spacing_and_ratios.py +122 -0
- physicskit/rmt/tests/test_sparse.py +71 -0
- physicskit/rmt/tests/test_spectrum.py +27 -0
- physicskit/rmt/tests/test_syk.py +136 -0
- physicskit/rmt/tests/test_tracy_widom.py +113 -0
- physicskit/rmt/tests/test_tridiagonal.py +41 -0
- physicskit/rmt/tests/test_truncated_unitary.py +80 -0
- physicskit/rmt/tests/test_validation_base.py +25 -0
- physicskit/rmt/tests/test_validation_misc.py +67 -0
- physicskit/rmt/tests/test_wishart_marchenko_pastur.py +120 -0
- physicskit/rmt/utils/__init__.py +0 -0
- physicskit/rmt/utils/haar.py +128 -0
- physicskit/rmt/utils/random_state.py +24 -0
- physicskit/rmt/utils/tridiagonal.py +167 -0
- physicskit/rmt/validation/__init__.py +36 -0
- physicskit/rmt/validation/base.py +126 -0
- physicskit/rmt/validation/circular_law.py +80 -0
- physicskit/rmt/validation/marchenko_pastur.py +53 -0
- physicskit/rmt/validation/ratio_distribution.py +53 -0
- physicskit/rmt/validation/real_ginibre.py +60 -0
- physicskit/rmt/validation/sine_kernel.py +57 -0
- physicskit/rmt/validation/single_ring.py +68 -0
- physicskit/rmt/validation/tracy_widom.py +89 -0
- physicskit/rmt/validation/universality.py +100 -0
- physicskit/rmt/validation/wachter.py +52 -0
- physicskit/rmt/validation/wigner_semicircle.py +40 -0
- physicskit/rmt/validation/wigner_surmise.py +58 -0
- physicskit/semiclassical/__init__.py +94 -0
- physicskit/semiclassical/_compat.py +5 -0
- physicskit/semiclassical/core/__init__.py +41 -0
- physicskit/semiclassical/core/gutzwiller.py +215 -0
- physicskit/semiclassical/core/path_integral.py +594 -0
- physicskit/semiclassical/core/propagators.py +579 -0
- physicskit/semiclassical/core/wkb.py +308 -0
- physicskit/semiclassical/systems/__init__.py +13 -0
- physicskit/semiclassical/systems/scarring.py +278 -0
- physicskit/semiclassical/tests/__init__.py +0 -0
- physicskit/semiclassical/tests/test_gutzwiller.py +35 -0
- physicskit/semiclassical/tests/test_path_integral.py +194 -0
- physicskit/semiclassical/tests/test_propagators.py +82 -0
- physicskit/semiclassical/tests/test_scarring.py +43 -0
- physicskit/semiclassical/tests/test_visualizers.py +89 -0
- physicskit/semiclassical/tests/test_wkb.py +30 -0
- physicskit/semiclassical/visualizers/__init__.py +17 -0
- physicskit/semiclassical/visualizers/gutzwiller.py +55 -0
- physicskit/semiclassical/visualizers/path_integral.py +195 -0
- physicskit/semiclassical/visualizers/propagators.py +89 -0
- physicskit/semiclassical/visualizers/scarring.py +146 -0
- physicskit/semiclassical/visualizers/wkb.py +55 -0
- physicskit/statphys/__init__.py +80 -0
- physicskit/statphys/chapters/__init__.py +43 -0
- physicskit/statphys/chapters/ehrenfest_urn.py +112 -0
- physicskit/statphys/chapters/ising_lattice.py +431 -0
- physicskit/statphys/chapters/kpz_growth.py +129 -0
- physicskit/statphys/chapters/molecular_dynamics.py +258 -0
- physicskit/statphys/chapters/nonequilibrium_work.py +146 -0
- physicskit/statphys/chapters/percolation.py +305 -0
- physicskit/statphys/chapters/random_walk.py +142 -0
- physicskit/statphys/chapters/renormalization.py +148 -0
- physicskit/statphys/chapters/sandpile.py +109 -0
- physicskit/statphys/chapters/spin_glass.py +275 -0
- physicskit/statphys/core/__init__.py +10 -0
- physicskit/statphys/core/kpz_engine.py +53 -0
- physicskit/statphys/core/md_engine.py +157 -0
- physicskit/statphys/core/monte_carlo.py +462 -0
- physicskit/statphys/core/random_walk_engine.py +68 -0
- physicskit/statphys/core/sandpile_engine.py +52 -0
- physicskit/statphys/tests/__init__.py +0 -0
- physicskit/statphys/tests/test_dynamics.py +66 -0
- physicskit/statphys/tests/test_ehrenfest_urn.py +44 -0
- physicskit/statphys/tests/test_finite_size_scaling.py +62 -0
- physicskit/statphys/tests/test_interactive.py +33 -0
- physicskit/statphys/tests/test_ising.py +68 -0
- physicskit/statphys/tests/test_kpz.py +55 -0
- physicskit/statphys/tests/test_landau_theory.py +49 -0
- physicskit/statphys/tests/test_md_engine.py +31 -0
- physicskit/statphys/tests/test_molecular_dynamics.py +72 -0
- physicskit/statphys/tests/test_nonequilibrium_work.py +33 -0
- physicskit/statphys/tests/test_partition_function.py +26 -0
- physicskit/statphys/tests/test_percolation.py +116 -0
- physicskit/statphys/tests/test_potts_model.py +46 -0
- physicskit/statphys/tests/test_random_walk.py +50 -0
- physicskit/statphys/tests/test_renormalization.py +44 -0
- physicskit/statphys/tests/test_sandpile.py +44 -0
- physicskit/statphys/tests/test_spin_glass.py +73 -0
- physicskit/statphys/tests/test_thermodynamics.py +121 -0
- physicskit/statphys/tests/test_xy_model.py +45 -0
- physicskit/statphys/utils/__init__.py +1 -0
- physicskit/statphys/utils/dynamics.py +100 -0
- physicskit/statphys/utils/finite_size_scaling.py +171 -0
- physicskit/statphys/utils/landau_theory.py +151 -0
- physicskit/statphys/utils/partition_function.py +109 -0
- physicskit/statphys/utils/thermodynamics.py +356 -0
- physicskit/statphys/visualizers/__init__.py +87 -0
- physicskit/statphys/visualizers/interactive.py +161 -0
- physicskit/statphys/visualizers/jarzynski_render.py +44 -0
- physicskit/statphys/visualizers/kpz_render.py +65 -0
- physicskit/statphys/visualizers/lattice_render.py +212 -0
- physicskit/statphys/visualizers/particle_render.py +121 -0
- physicskit/statphys/visualizers/random_walk_render.py +106 -0
- physicskit/statphys/visualizers/rg_render.py +45 -0
- physicskit/statphys/visualizers/sandpile_render.py +65 -0
- physicskit/statphys/visualizers/spin_glass_render.py +40 -0
- physicskit/statphys/visualizers/urn_render.py +38 -0
- physicskit/statphys/visualizers/vortex_render.py +84 -0
- physicskit/tests/__init__.py +0 -0
- physicskit/tests/test_constants.py +38 -0
- physicskit-0.1.0.dist-info/METADATA +196 -0
- physicskit-0.1.0.dist-info/RECORD +484 -0
- physicskit-0.1.0.dist-info/WHEEL +5 -0
- physicskit-0.1.0.dist-info/licenses/LICENSE +21 -0
- physicskit-0.1.0.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
"""Smoke tests for physicskit.particle.visualizers: every animation
|
|
2
|
+
builds and saves a nonempty GIF (see physicskit.classical.tests.test_visualizers
|
|
3
|
+
for the pattern this follows)."""
|
|
4
|
+
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
|
|
7
|
+
import matplotlib.pyplot as plt
|
|
8
|
+
import numpy as np
|
|
9
|
+
import pytest
|
|
10
|
+
from matplotlib.animation import PillowWriter
|
|
11
|
+
|
|
12
|
+
from physicskit.particle.collider import charged_track_points, parton_shower, shower_leaves, simple_shower
|
|
13
|
+
from physicskit.particle.confinement import string_break_chain
|
|
14
|
+
from physicskit.particle.decays import bateman_decay_chain, sample_michel_electron_energies
|
|
15
|
+
from physicskit.particle.electroweak import higgs_field_rollover
|
|
16
|
+
from physicskit.particle.kinematics import FourVector
|
|
17
|
+
from physicskit.particle.visualizers import (
|
|
18
|
+
animate_cp_asymmetry,
|
|
19
|
+
animate_decay_chain_bars,
|
|
20
|
+
animate_detector_event,
|
|
21
|
+
animate_higgs_rollover,
|
|
22
|
+
animate_michel_histogram,
|
|
23
|
+
animate_neutrino_oscillation,
|
|
24
|
+
animate_particle_cascade,
|
|
25
|
+
animate_parton_shower,
|
|
26
|
+
animate_qed_angular_distribution,
|
|
27
|
+
animate_string_breaking,
|
|
28
|
+
plot_decay_chain,
|
|
29
|
+
plot_differential_cross_section,
|
|
30
|
+
)
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
def _save(anim, tmp_path, name):
|
|
34
|
+
out = tmp_path / name
|
|
35
|
+
anim.save(out, writer=PillowWriter(fps=10))
|
|
36
|
+
assert out.exists() and out.stat().st_size > 0
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
def test_static_plots_still_work():
|
|
40
|
+
from physicskit.particle.scattering import rutherford_dsigma_domega
|
|
41
|
+
|
|
42
|
+
t = np.linspace(0, 10, 20)
|
|
43
|
+
N = bateman_decay_chain(1000.0, [0.5, 0.2], t)
|
|
44
|
+
fig, ax = plot_decay_chain(t, N)
|
|
45
|
+
assert fig is not None and ax is not None
|
|
46
|
+
|
|
47
|
+
theta = np.linspace(0.1, np.pi - 0.1, 20)
|
|
48
|
+
vals = rutherford_dsigma_domega(theta, Z1=2, Z2=79, E_kin=5.0)
|
|
49
|
+
fig2, ax2 = plot_differential_cross_section(theta, vals)
|
|
50
|
+
assert fig2 is not None and ax2 is not None
|
|
51
|
+
|
|
52
|
+
_, ax_given = plot_decay_chain(t, N, ax=ax)
|
|
53
|
+
assert ax_given is ax
|
|
54
|
+
_, ax2_given = plot_differential_cross_section(theta, vals, ax=ax2)
|
|
55
|
+
assert ax2_given is ax2
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
@pytest.mark.slow
|
|
59
|
+
def test_animate_particle_cascade_saves_gif(tmp_path):
|
|
60
|
+
root = simple_shower(50.0, E_threshold=6.0, rng=np.random.default_rng(0))
|
|
61
|
+
anim = animate_particle_cascade(root)
|
|
62
|
+
_save(anim, tmp_path, "cascade.gif")
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
def test_animate_particle_cascade_given_ax():
|
|
66
|
+
root = simple_shower(50.0, E_threshold=6.0, rng=np.random.default_rng(0))
|
|
67
|
+
fig, ax = plt.subplots()
|
|
68
|
+
anim = animate_particle_cascade(root, ax=ax)
|
|
69
|
+
assert anim._fig is fig
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
@pytest.mark.slow
|
|
73
|
+
def test_animate_parton_shower_saves_gif(tmp_path):
|
|
74
|
+
root = parton_shower(60.0, E_threshold=6.0, rng=np.random.default_rng(1))
|
|
75
|
+
anim = animate_parton_shower(root, n_jets=2)
|
|
76
|
+
_save(anim, tmp_path, "parton_shower.gif")
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
def test_animate_parton_shower_skips_empty_jet_clusters(monkeypatch):
|
|
80
|
+
"""cluster_into_jets's k-means initialization can (rarely, for
|
|
81
|
+
unlucky seeds/geometries) leave a jet with no assigned particles;
|
|
82
|
+
the jet-axis overlay must skip it rather than error on an empty mean."""
|
|
83
|
+
import physicskit.particle.visualizers.animations as animations_mod
|
|
84
|
+
|
|
85
|
+
root = parton_shower(60.0, E_threshold=6.0, rng=np.random.default_rng(1))
|
|
86
|
+
real_leaves = shower_leaves(root)
|
|
87
|
+
monkeypatch.setattr(animations_mod, "cluster_into_jets", lambda leaves, n_jets: [[], real_leaves])
|
|
88
|
+
anim = animate_parton_shower(root, n_jets=2)
|
|
89
|
+
assert anim.__class__.__name__ == "FuncAnimation"
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
@pytest.mark.slow
|
|
93
|
+
def test_animate_string_breaking_saves_gif(tmp_path):
|
|
94
|
+
sim = string_break_chain(np.linspace(0, 20, 60), v=0.3, kappa=1.0, m_q=1.0, n_breaks=3)
|
|
95
|
+
anim = animate_string_breaking(sim)
|
|
96
|
+
_save(anim, tmp_path, "string_breaking.gif")
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
def test_animate_string_breaking_given_ax():
|
|
100
|
+
sim = string_break_chain(np.linspace(0, 10, 20), v=0.3, kappa=1.0, m_q=1.0, n_breaks=2)
|
|
101
|
+
fig, ax = plt.subplots()
|
|
102
|
+
anim = animate_string_breaking(sim, ax=ax)
|
|
103
|
+
assert anim._fig is fig
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
@pytest.mark.slow
|
|
107
|
+
def test_animate_higgs_rollover_saves_gif(tmp_path):
|
|
108
|
+
# short: animate_higgs_rollover has no stride and renders one frame per
|
|
109
|
+
# sample, so this only needs enough samples for a valid animation
|
|
110
|
+
t = np.linspace(0, 40, 50)
|
|
111
|
+
phi, _ = higgs_field_rollover(1e-3, 0.0, a=1.0, b=1.0, t_eval=t, damping=0.06)
|
|
112
|
+
anim = animate_higgs_rollover(phi, a=1.0, b=1.0)
|
|
113
|
+
_save(anim, tmp_path, "higgs_rollover.gif")
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
def test_animate_higgs_rollover_given_ax():
|
|
117
|
+
t = np.linspace(0, 40, 10)
|
|
118
|
+
phi, _ = higgs_field_rollover(1e-3, 0.0, a=1.0, b=1.0, t_eval=t, damping=0.06)
|
|
119
|
+
fig, ax = plt.subplots()
|
|
120
|
+
anim = animate_higgs_rollover(phi, a=1.0, b=1.0, ax=ax)
|
|
121
|
+
assert anim._fig is fig
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
@pytest.mark.slow
|
|
125
|
+
def test_animate_decay_chain_bars_saves_gif(tmp_path):
|
|
126
|
+
t = np.linspace(0, 10, 40)
|
|
127
|
+
N = bateman_decay_chain(1000.0, [0.5, 0.2], t)
|
|
128
|
+
anim = animate_decay_chain_bars(t, N, labels=["Parent", "Daughter"])
|
|
129
|
+
_save(anim, tmp_path, "decay_chain_bars.gif")
|
|
130
|
+
|
|
131
|
+
|
|
132
|
+
def test_animate_decay_chain_bars_given_ax():
|
|
133
|
+
t = np.linspace(0, 10, 10)
|
|
134
|
+
N = bateman_decay_chain(1000.0, [0.5, 0.2], t)
|
|
135
|
+
fig, ax = plt.subplots()
|
|
136
|
+
anim = animate_decay_chain_bars(t, N, ax=ax)
|
|
137
|
+
assert anim._fig is fig
|
|
138
|
+
|
|
139
|
+
|
|
140
|
+
@pytest.mark.slow
|
|
141
|
+
def test_animate_neutrino_oscillation_saves_gif(tmp_path):
|
|
142
|
+
L = np.linspace(0, 1000, 60)
|
|
143
|
+
anim = animate_neutrino_oscillation(L, E=1.0, theta=0.6, delta_m2=2.5e-3)
|
|
144
|
+
_save(anim, tmp_path, "neutrino_oscillation.gif")
|
|
145
|
+
|
|
146
|
+
|
|
147
|
+
def test_animate_neutrino_oscillation_given_ax():
|
|
148
|
+
L = np.linspace(0, 1000, 10)
|
|
149
|
+
fig, ax = plt.subplots()
|
|
150
|
+
anim = animate_neutrino_oscillation(L, E=1.0, theta=0.6, delta_m2=2.5e-3, ax=ax)
|
|
151
|
+
assert anim._fig is fig
|
|
152
|
+
|
|
153
|
+
|
|
154
|
+
@pytest.mark.slow
|
|
155
|
+
def test_animate_qed_angular_distribution_saves_gif(tmp_path):
|
|
156
|
+
sqrt_s = np.linspace(5.0, 20.0, 15)
|
|
157
|
+
anim = animate_qed_angular_distribution(sqrt_s)
|
|
158
|
+
_save(anim, tmp_path, "qed_angular.gif")
|
|
159
|
+
|
|
160
|
+
|
|
161
|
+
def test_animate_qed_angular_distribution_given_ax():
|
|
162
|
+
sqrt_s = np.linspace(5.0, 20.0, 5)
|
|
163
|
+
fig, ax = plt.subplots(subplot_kw={"projection": "polar"})
|
|
164
|
+
anim = animate_qed_angular_distribution(sqrt_s, ax=ax)
|
|
165
|
+
assert anim._fig is fig
|
|
166
|
+
|
|
167
|
+
|
|
168
|
+
@pytest.mark.slow
|
|
169
|
+
def test_animate_michel_histogram_saves_gif(tmp_path):
|
|
170
|
+
xs = sample_michel_electron_energies(600, rng=np.random.default_rng(0))
|
|
171
|
+
anim = animate_michel_histogram(xs, batch_size=100)
|
|
172
|
+
_save(anim, tmp_path, "michel_histogram.gif")
|
|
173
|
+
|
|
174
|
+
|
|
175
|
+
def test_animate_michel_histogram_given_ax():
|
|
176
|
+
xs = sample_michel_electron_energies(100, rng=np.random.default_rng(0))
|
|
177
|
+
fig, ax = plt.subplots()
|
|
178
|
+
anim = animate_michel_histogram(xs, batch_size=50, ax=ax)
|
|
179
|
+
assert anim._fig is fig
|
|
180
|
+
|
|
181
|
+
|
|
182
|
+
@pytest.mark.slow
|
|
183
|
+
def test_animate_cp_asymmetry_saves_gif(tmp_path):
|
|
184
|
+
t = np.linspace(0, 20, 80)
|
|
185
|
+
anim = animate_cp_asymmetry(t, delta_m=0.5, gamma_s=1.0, gamma_l=0.1, epsilon=0.003 + 0.001j)
|
|
186
|
+
_save(anim, tmp_path, "cp_asymmetry.gif")
|
|
187
|
+
|
|
188
|
+
|
|
189
|
+
def test_animate_cp_asymmetry_given_ax():
|
|
190
|
+
t = np.linspace(0, 20, 10)
|
|
191
|
+
fig, ax = plt.subplots()
|
|
192
|
+
anim = animate_cp_asymmetry(t, delta_m=0.5, gamma_s=1.0, gamma_l=0.1, epsilon=0.003 + 0.001j, ax=ax)
|
|
193
|
+
assert anim._fig is fig
|
|
194
|
+
|
|
195
|
+
|
|
196
|
+
@pytest.mark.slow
|
|
197
|
+
def test_animate_detector_event_saves_gif(tmp_path):
|
|
198
|
+
ps = [FourVector(6.0, 3.0, 0.0, 4.0), FourVector(5.0, 0.0, 3.0, 3.0), FourVector(4.0, -2.0, -1.0, 3.0)]
|
|
199
|
+
charges = [1.0, -1.0, 0.0]
|
|
200
|
+
anim = animate_detector_event(ps, charges, B=0.5, n_frames=30)
|
|
201
|
+
_save(anim, tmp_path, "detector_event.gif")
|
|
202
|
+
|
|
203
|
+
|
|
204
|
+
def test_animate_detector_event_given_ax():
|
|
205
|
+
ps = [FourVector(5.0, 3.0, 0.0, 3.0), FourVector(4.0, 0.0, 3.0, 2.0)]
|
|
206
|
+
fig, ax = plt.subplots()
|
|
207
|
+
anim = animate_detector_event(ps, charges=[1.0, -1.0], B=1.0, n_frames=5, ax=ax)
|
|
208
|
+
assert anim._fig is fig
|
|
209
|
+
|
|
210
|
+
|
|
211
|
+
def test_charged_track_points_used_by_event_display_is_consistent():
|
|
212
|
+
p = FourVector(5.0, 3.0, 0.0, 3.0)
|
|
213
|
+
pts = charged_track_points(p, charge=1.0, B=0.5, path_length=2.0)
|
|
214
|
+
assert pts.shape[1] == 2
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"""Plotting and animation helpers for physicskit.particle.
|
|
2
|
+
|
|
3
|
+
- :mod:`physicskit.particle.visualizers.static` -- decay-chain and
|
|
4
|
+
differential-cross-section line plots.
|
|
5
|
+
- :mod:`physicskit.particle.visualizers.animations` -- animations of the
|
|
6
|
+
toy shower/confinement/electroweak/neutrino/decay demonstrations
|
|
7
|
+
built on :mod:`physicskit.particle`'s collider, confinement,
|
|
8
|
+
electroweak, and neutrinos modules.
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
from physicskit.particle.visualizers.animations import (
|
|
12
|
+
animate_cp_asymmetry,
|
|
13
|
+
animate_decay_chain_bars,
|
|
14
|
+
animate_detector_event,
|
|
15
|
+
animate_higgs_rollover,
|
|
16
|
+
animate_michel_histogram,
|
|
17
|
+
animate_neutrino_oscillation,
|
|
18
|
+
animate_particle_cascade,
|
|
19
|
+
animate_parton_shower,
|
|
20
|
+
animate_qed_angular_distribution,
|
|
21
|
+
animate_string_breaking,
|
|
22
|
+
)
|
|
23
|
+
from physicskit.particle.visualizers.static import plot_decay_chain, plot_differential_cross_section
|
|
24
|
+
|
|
25
|
+
__all__ = [
|
|
26
|
+
"plot_decay_chain",
|
|
27
|
+
"plot_differential_cross_section",
|
|
28
|
+
"animate_particle_cascade",
|
|
29
|
+
"animate_parton_shower",
|
|
30
|
+
"animate_detector_event",
|
|
31
|
+
"animate_string_breaking",
|
|
32
|
+
"animate_higgs_rollover",
|
|
33
|
+
"animate_decay_chain_bars",
|
|
34
|
+
"animate_neutrino_oscillation",
|
|
35
|
+
"animate_qed_angular_distribution",
|
|
36
|
+
"animate_michel_histogram",
|
|
37
|
+
"animate_cp_asymmetry",
|
|
38
|
+
]
|