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,94 @@
|
|
|
1
|
+
r"""physicskit.semiclassical: WKB/EBK quantization, Van Vleck/Herman-Kluk semiclassical propagators, the Gutzwiller trace formula, and quantum scarring.
|
|
2
|
+
|
|
3
|
+
- :mod:`physicskit.semiclassical.core.wkb` -- 1D WKB wavefunctions,
|
|
4
|
+
classical turning points, and Bohr-Sommerfeld (EBK) quantization.
|
|
5
|
+
- :mod:`physicskit.semiclassical.core.propagators` -- the Van
|
|
6
|
+
Vleck-Morette semiclassical propagator and the multi-trajectory
|
|
7
|
+
Herman-Kluk frozen-Gaussian propagator, both built on a Numba-jitted
|
|
8
|
+
classical trajectory + monodromy-matrix integrator.
|
|
9
|
+
- :mod:`physicskit.semiclassical.core.gutzwiller` -- the (exact, for
|
|
10
|
+
1D bound systems) Gutzwiller trace formula, reconstructing a spectrum
|
|
11
|
+
from the classical action and period of a single periodic orbit.
|
|
12
|
+
- :mod:`physicskit.semiclassical.systems.scarring` -- quantum scars on
|
|
13
|
+
the stadium billiard's bouncing-ball orbit family, and a non-periodic
|
|
14
|
+
Husimi phase-space projection.
|
|
15
|
+
- :mod:`physicskit.semiclassical.visualizers` -- classical
|
|
16
|
+
trajectories overlaid on Wigner functions, trace-formula spectra, and
|
|
17
|
+
scar maps.
|
|
18
|
+
"""
|
|
19
|
+
|
|
20
|
+
from __future__ import annotations
|
|
21
|
+
|
|
22
|
+
from physicskit.semiclassical.core.gutzwiller import (
|
|
23
|
+
classical_period,
|
|
24
|
+
gutzwiller_amplitude_from_monodromy,
|
|
25
|
+
gutzwiller_density_of_states,
|
|
26
|
+
)
|
|
27
|
+
from physicskit.semiclassical.core.propagators import (
|
|
28
|
+
coherent_state_overlap,
|
|
29
|
+
count_caustics,
|
|
30
|
+
frozen_gaussian_1d,
|
|
31
|
+
herman_kluk_prefactor,
|
|
32
|
+
herman_kluk_propagate_wavepacket,
|
|
33
|
+
propagate_trajectory_monodromy_action,
|
|
34
|
+
van_vleck_prefactor,
|
|
35
|
+
van_vleck_propagator_1d,
|
|
36
|
+
)
|
|
37
|
+
from physicskit.semiclassical.core.wkb import (
|
|
38
|
+
bohr_sommerfeld_energies,
|
|
39
|
+
classical_momentum,
|
|
40
|
+
turning_points,
|
|
41
|
+
wkb_action,
|
|
42
|
+
wkb_wavefunction,
|
|
43
|
+
)
|
|
44
|
+
from physicskit.semiclassical.systems.scarring import (
|
|
45
|
+
bouncing_ball_energies,
|
|
46
|
+
bouncing_ball_orbit_points,
|
|
47
|
+
husimi_projection_1d,
|
|
48
|
+
scar_enhancement,
|
|
49
|
+
)
|
|
50
|
+
from physicskit.semiclassical.visualizers import (
|
|
51
|
+
plot_classical_trajectory_on_wigner,
|
|
52
|
+
plot_density_of_states,
|
|
53
|
+
plot_husimi_1d,
|
|
54
|
+
plot_scar_map,
|
|
55
|
+
plot_scar_map_interactive,
|
|
56
|
+
plot_wkb_wavefunction,
|
|
57
|
+
)
|
|
58
|
+
|
|
59
|
+
__version__ = "0.1.0"
|
|
60
|
+
|
|
61
|
+
__all__ = [
|
|
62
|
+
"__version__",
|
|
63
|
+
# core.wkb
|
|
64
|
+
"classical_momentum",
|
|
65
|
+
"turning_points",
|
|
66
|
+
"wkb_action",
|
|
67
|
+
"bohr_sommerfeld_energies",
|
|
68
|
+
"wkb_wavefunction",
|
|
69
|
+
# core.propagators
|
|
70
|
+
"propagate_trajectory_monodromy_action",
|
|
71
|
+
"van_vleck_prefactor",
|
|
72
|
+
"count_caustics",
|
|
73
|
+
"van_vleck_propagator_1d",
|
|
74
|
+
"frozen_gaussian_1d",
|
|
75
|
+
"coherent_state_overlap",
|
|
76
|
+
"herman_kluk_prefactor",
|
|
77
|
+
"herman_kluk_propagate_wavepacket",
|
|
78
|
+
# core.gutzwiller
|
|
79
|
+
"classical_period",
|
|
80
|
+
"gutzwiller_density_of_states",
|
|
81
|
+
"gutzwiller_amplitude_from_monodromy",
|
|
82
|
+
# systems.scarring
|
|
83
|
+
"bouncing_ball_energies",
|
|
84
|
+
"bouncing_ball_orbit_points",
|
|
85
|
+
"scar_enhancement",
|
|
86
|
+
"husimi_projection_1d",
|
|
87
|
+
# visualizers
|
|
88
|
+
"plot_wkb_wavefunction",
|
|
89
|
+
"plot_classical_trajectory_on_wigner",
|
|
90
|
+
"plot_density_of_states",
|
|
91
|
+
"plot_scar_map",
|
|
92
|
+
"plot_husimi_1d",
|
|
93
|
+
"plot_scar_map_interactive",
|
|
94
|
+
]
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
from physicskit.semiclassical.core.gutzwiller import (
|
|
2
|
+
classical_period,
|
|
3
|
+
gutzwiller_amplitude_from_monodromy,
|
|
4
|
+
gutzwiller_density_of_states,
|
|
5
|
+
)
|
|
6
|
+
from physicskit.semiclassical.core.propagators import (
|
|
7
|
+
coherent_state_overlap,
|
|
8
|
+
count_caustics,
|
|
9
|
+
frozen_gaussian_1d,
|
|
10
|
+
herman_kluk_prefactor,
|
|
11
|
+
herman_kluk_propagate_wavepacket,
|
|
12
|
+
propagate_trajectory_monodromy_action,
|
|
13
|
+
van_vleck_prefactor,
|
|
14
|
+
van_vleck_propagator_1d,
|
|
15
|
+
)
|
|
16
|
+
from physicskit.semiclassical.core.wkb import (
|
|
17
|
+
bohr_sommerfeld_energies,
|
|
18
|
+
classical_momentum,
|
|
19
|
+
turning_points,
|
|
20
|
+
wkb_action,
|
|
21
|
+
wkb_wavefunction,
|
|
22
|
+
)
|
|
23
|
+
|
|
24
|
+
__all__ = [
|
|
25
|
+
"classical_momentum",
|
|
26
|
+
"turning_points",
|
|
27
|
+
"wkb_action",
|
|
28
|
+
"bohr_sommerfeld_energies",
|
|
29
|
+
"wkb_wavefunction",
|
|
30
|
+
"propagate_trajectory_monodromy_action",
|
|
31
|
+
"van_vleck_prefactor",
|
|
32
|
+
"count_caustics",
|
|
33
|
+
"van_vleck_propagator_1d",
|
|
34
|
+
"frozen_gaussian_1d",
|
|
35
|
+
"coherent_state_overlap",
|
|
36
|
+
"herman_kluk_prefactor",
|
|
37
|
+
"herman_kluk_propagate_wavepacket",
|
|
38
|
+
"classical_period",
|
|
39
|
+
"gutzwiller_density_of_states",
|
|
40
|
+
"gutzwiller_amplitude_from_monodromy",
|
|
41
|
+
]
|
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
r"""The Gutzwiller trace formula: reconstructing a spectrum from classical periodic orbits alone.
|
|
2
|
+
|
|
3
|
+
Gutzwiller's (1971) trace formula expresses the density of states
|
|
4
|
+
:math:`g(E)=\sum_n\delta(E-E_n)` as a sum over every classical periodic
|
|
5
|
+
orbit of the system, with no reference to quantum eigenstates at all --
|
|
6
|
+
each orbit contributes an oscillatory term whose frequency (in
|
|
7
|
+
:math:`E`) is set by its classical action and whose amplitude is set by
|
|
8
|
+
its linear stability. For a bound, one-dimensional system this is not
|
|
9
|
+
merely an approximation: the single family of periodic orbits (one per
|
|
10
|
+
energy, since :math:`f=1` degree of freedom always has exactly one
|
|
11
|
+
oscillation) has an *exact* trace formula, obtained by Poisson-summing
|
|
12
|
+
the discrete Einstein-Brillouin-Keller (EBK) spectrum of
|
|
13
|
+
:mod:`physicskit.semiclassical.core.wkb` --
|
|
14
|
+
:func:`gutzwiller_density_of_states` implements exactly that sum,
|
|
15
|
+
reconstructing delta-function peaks at the Bohr-Sommerfeld energies
|
|
16
|
+
purely from the classical action :math:`S(E)` and period
|
|
17
|
+
:math:`T(E)=dS/dE`.
|
|
18
|
+
|
|
19
|
+
The general Gutzwiller formula (for a system with genuinely *isolated*,
|
|
20
|
+
unstable periodic orbits, as in chaotic scattering or 2D/3D billiards)
|
|
21
|
+
instead weights each orbit by :math:`1/\sqrt{|2-\operatorname{tr}M|}`,
|
|
22
|
+
its monodromy matrix's instability -- :func:`gutzwiller_amplitude_from_monodromy`
|
|
23
|
+
implements that general ingredient, for use with orbits found in
|
|
24
|
+
higher-dimensional chaotic systems (the stadium billiard scars analyzed
|
|
25
|
+
in :mod:`physicskit.semiclassical.systems.scarring` live on exactly this
|
|
26
|
+
kind of isolated unstable orbit).
|
|
27
|
+
"""
|
|
28
|
+
|
|
29
|
+
from __future__ import annotations
|
|
30
|
+
|
|
31
|
+
import numpy as np
|
|
32
|
+
|
|
33
|
+
from .wkb import turning_points, wkb_action
|
|
34
|
+
|
|
35
|
+
__all__ = [
|
|
36
|
+
"classical_period",
|
|
37
|
+
"gutzwiller_density_of_states",
|
|
38
|
+
"gutzwiller_amplitude_from_monodromy",
|
|
39
|
+
]
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
def classical_period(E: float, V, m: float, x_min: float, x_max: float, hbar: float = 1.0, dE: float = 1e-4) -> float:
|
|
43
|
+
r"""Classical (round-trip) oscillation period :math:`T(E)=2\,dS/dE` of a 1D bound orbit.
|
|
44
|
+
|
|
45
|
+
The action :math:`S(E)` (:func:`~physicskit.semiclassical.core.wkb.wkb_action`)
|
|
46
|
+
is the one-way traversal action, so its energy derivative :math:`dS/dE`
|
|
47
|
+
is the time to cross the classically allowed region once; the full
|
|
48
|
+
period (there and back) is twice that -- differentiated numerically
|
|
49
|
+
here via a central difference.
|
|
50
|
+
|
|
51
|
+
Parameters
|
|
52
|
+
----------
|
|
53
|
+
E : float
|
|
54
|
+
Energy at which to evaluate the period.
|
|
55
|
+
V : callable
|
|
56
|
+
Potential energy function ``V(x)``.
|
|
57
|
+
m : float
|
|
58
|
+
Particle mass.
|
|
59
|
+
x_min, x_max : float
|
|
60
|
+
Search domain for :func:`~physicskit.semiclassical.core.wkb.turning_points`.
|
|
61
|
+
hbar : float, default=1.0
|
|
62
|
+
Value of :math:`\hbar` to use (unused by the classical period
|
|
63
|
+
itself; kept for a uniform signature with the rest of this module).
|
|
64
|
+
dE : float, default=1e-4
|
|
65
|
+
Step size for the central-difference derivative.
|
|
66
|
+
|
|
67
|
+
Returns
|
|
68
|
+
-------
|
|
69
|
+
float
|
|
70
|
+
The classical period :math:`T(E)`.
|
|
71
|
+
|
|
72
|
+
See Also
|
|
73
|
+
--------
|
|
74
|
+
gutzwiller_density_of_states : Uses this as the trace formula's smooth prefactor.
|
|
75
|
+
|
|
76
|
+
Examples
|
|
77
|
+
--------
|
|
78
|
+
The harmonic oscillator's period is famously independent of energy,
|
|
79
|
+
:math:`T=2\pi/\omega`:
|
|
80
|
+
|
|
81
|
+
>>> V = lambda x: 0.5 * x ** 2
|
|
82
|
+
>>> round(classical_period(E=3.0, V=V, m=1.0, x_min=-20, x_max=20), 4)
|
|
83
|
+
6.2832
|
|
84
|
+
"""
|
|
85
|
+
|
|
86
|
+
def S(E_):
|
|
87
|
+
tp = turning_points(E_, V, x_min, x_max)
|
|
88
|
+
return wkb_action(E_, V, m, tp[0], tp[-1], hbar)
|
|
89
|
+
|
|
90
|
+
return 2.0 * (S(E + dE) - S(E - dE)) / (2.0 * dE)
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
def gutzwiller_density_of_states(
|
|
94
|
+
E_grid: np.ndarray,
|
|
95
|
+
V,
|
|
96
|
+
m: float,
|
|
97
|
+
x_min: float,
|
|
98
|
+
x_max: float,
|
|
99
|
+
hbar: float = 1.0,
|
|
100
|
+
r_max: int = 40,
|
|
101
|
+
broadening: float = 0.05,
|
|
102
|
+
) -> np.ndarray:
|
|
103
|
+
r"""Exact 1D trace-formula density of states, summed over repetitions of the single periodic orbit.
|
|
104
|
+
|
|
105
|
+
For a bound one-dimensional system, EBK quantization places levels
|
|
106
|
+
exactly where :math:`S(E_n)/\hbar=(n+\tfrac12)\pi`. Poisson-summing
|
|
107
|
+
the resulting delta comb :math:`g(E)=\sum_n\delta(E-E_n)` over the
|
|
108
|
+
integer :math:`n` converts it into a sum over an integer :math:`r`
|
|
109
|
+
-- physically, the :math:`r`-fold repetition of the single primitive
|
|
110
|
+
periodic orbit at each energy -- giving the *exact* identity
|
|
111
|
+
|
|
112
|
+
.. math::
|
|
113
|
+
|
|
114
|
+
g(E) = \frac{T(E)/2}{\pi\hbar}\left[1 + 2\sum_{r=1}^{\infty}
|
|
115
|
+
\cos\!\left(\frac{2rS(E)}{\hbar} - r\pi\right)\right],
|
|
116
|
+
|
|
117
|
+
the one-dimensional Gutzwiller trace formula: the :math:`r=0` term is
|
|
118
|
+
the smooth Weyl density of states, and each :math:`r\ge1` term is one
|
|
119
|
+
repetition of the orbit, carrying the Maslov phase :math:`-r\pi`
|
|
120
|
+
(:math:`\sigma=2` soft turning points per traversal, repeated
|
|
121
|
+
:math:`r` times). Truncating the sum at finite ``r_max`` with a
|
|
122
|
+
convergence factor ``exp(-r*broadening)`` turns each delta function
|
|
123
|
+
into a finite (Lorentzian-like) peak, suitable for numerical peak-finding.
|
|
124
|
+
|
|
125
|
+
Parameters
|
|
126
|
+
----------
|
|
127
|
+
E_grid : ndarray
|
|
128
|
+
Energies at which to evaluate the density of states.
|
|
129
|
+
V : callable
|
|
130
|
+
Potential energy function ``V(x)``.
|
|
131
|
+
m : float
|
|
132
|
+
Particle mass.
|
|
133
|
+
x_min, x_max : float
|
|
134
|
+
Search domain for :func:`~physicskit.semiclassical.core.wkb.turning_points`.
|
|
135
|
+
hbar : float, default=1.0
|
|
136
|
+
Value of :math:`\hbar` to use.
|
|
137
|
+
r_max : int, default=40
|
|
138
|
+
Number of orbit repetitions to sum.
|
|
139
|
+
broadening : float, default=0.05
|
|
140
|
+
Per-repetition convergence factor; larger values broaden (and
|
|
141
|
+
damp) each reconstructed peak.
|
|
142
|
+
|
|
143
|
+
Returns
|
|
144
|
+
-------
|
|
145
|
+
ndarray
|
|
146
|
+
:math:`g(E)`, same shape as ``E_grid``.
|
|
147
|
+
|
|
148
|
+
See Also
|
|
149
|
+
--------
|
|
150
|
+
classical_period : Supplies :math:`T(E)`.
|
|
151
|
+
physicskit.semiclassical.core.wkb.bohr_sommerfeld_energies :
|
|
152
|
+
The exact peak locations this reconstructs.
|
|
153
|
+
|
|
154
|
+
Examples
|
|
155
|
+
--------
|
|
156
|
+
The reconstructed peaks land exactly on the harmonic oscillator's
|
|
157
|
+
Bohr-Sommerfeld spectrum:
|
|
158
|
+
|
|
159
|
+
>>> import numpy as np
|
|
160
|
+
>>> from scipy.signal import find_peaks
|
|
161
|
+
>>> V = lambda x: 0.5 * x ** 2
|
|
162
|
+
>>> E_grid = np.linspace(0.2, 4.5, 600)
|
|
163
|
+
>>> dos = gutzwiller_density_of_states(E_grid, V, m=1.0, x_min=-20, x_max=20)
|
|
164
|
+
>>> peak_idx, _ = find_peaks(dos, height=0.3 * dos.max())
|
|
165
|
+
>>> np.round(E_grid[peak_idx], 1)
|
|
166
|
+
array([0.5, 1.5, 2.5, 3.5])
|
|
167
|
+
"""
|
|
168
|
+
E_grid = np.asarray(E_grid, dtype=float)
|
|
169
|
+
dos = np.empty_like(E_grid)
|
|
170
|
+
r = np.arange(1, r_max + 1)
|
|
171
|
+
envelope = np.exp(-r * broadening)
|
|
172
|
+
for i, E in enumerate(E_grid):
|
|
173
|
+
tp = turning_points(E, V, x_min, x_max)
|
|
174
|
+
x1, x2 = tp[0], tp[-1]
|
|
175
|
+
S = wkb_action(E, V, m, x1, x2, hbar)
|
|
176
|
+
T_one_way = classical_period(E, V, m, x_min, x_max, hbar) / 2.0
|
|
177
|
+
oscillating = np.sum(envelope * np.cos(2.0 * r * S / hbar - r * np.pi))
|
|
178
|
+
dos[i] = (T_one_way / (np.pi * hbar)) * (1.0 + 2.0 * oscillating)
|
|
179
|
+
return dos
|
|
180
|
+
|
|
181
|
+
|
|
182
|
+
def gutzwiller_amplitude_from_monodromy(M: np.ndarray) -> float:
|
|
183
|
+
r"""Gutzwiller stability amplitude :math:`1/\sqrt{|2-\operatorname{tr}M|}` for an isolated periodic orbit.
|
|
184
|
+
|
|
185
|
+
In the full (multi-dimensional, generically chaotic) Gutzwiller trace
|
|
186
|
+
formula, each isolated periodic orbit contributes with an amplitude
|
|
187
|
+
set by how strongly nearby trajectories diverge from it over one
|
|
188
|
+
period: an unstable (hyperbolic) orbit with monodromy eigenvalues
|
|
189
|
+
:math:`\lambda,1/\lambda` (:math:`|\lambda|>1`) has
|
|
190
|
+
:math:`\operatorname{tr}M=\lambda+1/\lambda`, so
|
|
191
|
+
:math:`|2-\operatorname{tr}M|` grows with the instability and the
|
|
192
|
+
orbit's contribution to the trace formula shrinks -- highly unstable
|
|
193
|
+
orbits matter less for the exact spectrum, but (as in
|
|
194
|
+
:mod:`physicskit.semiclassical.systems.scarring`) can still leave a
|
|
195
|
+
visible imprint on individual eigenstates.
|
|
196
|
+
|
|
197
|
+
Parameters
|
|
198
|
+
----------
|
|
199
|
+
M : ndarray, shape (2, 2)
|
|
200
|
+
Monodromy matrix of one period of the orbit, e.g. from
|
|
201
|
+
:func:`physicskit.semiclassical.core.propagators.propagate_trajectory_monodromy_action`.
|
|
202
|
+
|
|
203
|
+
Returns
|
|
204
|
+
-------
|
|
205
|
+
float
|
|
206
|
+
The stability amplitude.
|
|
207
|
+
|
|
208
|
+
Examples
|
|
209
|
+
--------
|
|
210
|
+
>>> import numpy as np
|
|
211
|
+
>>> M = np.array([[2.0, 0.0], [0.0, 0.5]])
|
|
212
|
+
>>> round(gutzwiller_amplitude_from_monodromy(M), 6)
|
|
213
|
+
1.414214
|
|
214
|
+
"""
|
|
215
|
+
return float(1.0 / np.sqrt(abs(2.0 - np.trace(M))))
|