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,366 @@
|
|
|
1
|
+
"""Quantized versions of physicskit.chaos's classical maps: the kicked rotor and the baker's map.
|
|
2
|
+
|
|
3
|
+
Both are built the standard way in the quantum-chaos literature: as a
|
|
4
|
+
finite-dimensional (``dim``-by-``dim``) unitary "Floquet" operator advancing a
|
|
5
|
+
state vector by one map iteration, constructed from the discrete Fourier
|
|
6
|
+
transform (DFT) rather than by discretizing a differential equation. This
|
|
7
|
+
makes them cheap to build and exactly unitary to machine precision, at the
|
|
8
|
+
cost of only being able to represent states in a single Hilbert space
|
|
9
|
+
dimension at a time (there is no continuum limit to refine towards, unlike
|
|
10
|
+
:class:`~physicskit.chaos.quantum.billiards.QuantumBilliard`); the classical limit is
|
|
11
|
+
instead approached by taking ``dim -> infinity`` (equivalently ``hbar -> 0``).
|
|
12
|
+
|
|
13
|
+
Random-matrix-theory analyses of these maps' spectra (e.g. nearest-neighbor
|
|
14
|
+
spacing distributions, spectral rigidity) are intentionally *not* provided
|
|
15
|
+
here -- that is the job of the separate ``physicskit.rmt`` package, which can consume
|
|
16
|
+
the eigenphases returned by :meth:`QuantumKickedRotor.eigenphases` or
|
|
17
|
+
:meth:`QuantumBakersMap.eigenphases` directly.
|
|
18
|
+
"""
|
|
19
|
+
|
|
20
|
+
from __future__ import annotations
|
|
21
|
+
|
|
22
|
+
import numpy as np
|
|
23
|
+
from numpy.typing import ArrayLike, NDArray
|
|
24
|
+
|
|
25
|
+
from physicskit.chaos.core.base_system import get_init_params
|
|
26
|
+
from physicskit.chaos.exceptions import InvalidParameterError
|
|
27
|
+
from physicskit.chaos.quantum.husimi import husimi_function
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
def _dft_matrix(n: int) -> NDArray[np.complex128]:
|
|
31
|
+
"""The ``n``-by-``n`` unitary discrete Fourier transform matrix."""
|
|
32
|
+
j = np.arange(n)
|
|
33
|
+
matrix = np.exp(-2j * np.pi * np.outer(j, j) / n) / np.sqrt(n)
|
|
34
|
+
return np.asarray(matrix, dtype=np.complex128)
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
def _init_repr(obj: object) -> str:
|
|
38
|
+
"""Build an ``eval``-able-looking repr from an object's ``__init__`` signature.
|
|
39
|
+
|
|
40
|
+
Local copy of :func:`physicskit.chaos.core.base_system._init_repr` (kept private
|
|
41
|
+
there); see :func:`~physicskit.chaos.core.base_system.get_init_params`.
|
|
42
|
+
"""
|
|
43
|
+
parts = [f"{name}={value!r}" for name, value in get_init_params(obj).items()]
|
|
44
|
+
return f"{type(obj).__name__}({', '.join(parts)})"
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
class QuantumKickedRotor:
|
|
48
|
+
"""The quantum kicked rotor: the standard map's quantization.
|
|
49
|
+
|
|
50
|
+
Built as the one-period Floquet operator of a rotor periodically kicked
|
|
51
|
+
by a potential ``k * cos(theta)``, in exact correspondence with
|
|
52
|
+
physicskit.chaos's classical :class:`~physicskit.chaos.systems.maps.StandardMap`
|
|
53
|
+
(``p_new = p + k*sin(theta)``, ``theta_new = theta + p_new``): the
|
|
54
|
+
Hilbert space is the `dim`-point position (angle) representation on
|
|
55
|
+
``[0, 2*pi)``, and the Floquet operator alternates a kick phase (diagonal
|
|
56
|
+
in the angle basis) with a free-rotation phase (diagonal in the momentum
|
|
57
|
+
basis), transforming between the two via the discrete Fourier transform.
|
|
58
|
+
|
|
59
|
+
As `dim` grows (equivalently, as `hbar` shrinks towards its default
|
|
60
|
+
``2*pi/dim``), the quantum dynamics of a narrow wavepacket increasingly
|
|
61
|
+
tracks the corresponding classical
|
|
62
|
+
:class:`~physicskit.chaos.systems.maps.StandardMap` orbit, until the packet
|
|
63
|
+
spreads across a chaotic region -- the quantum-classical correspondence
|
|
64
|
+
breaking down being one of the central phenomena of quantum chaos.
|
|
65
|
+
|
|
66
|
+
Parameters
|
|
67
|
+
----------
|
|
68
|
+
k : float, default 1.0
|
|
69
|
+
Kick strength; matches the classical
|
|
70
|
+
:class:`~physicskit.chaos.systems.maps.StandardMap`'s `k` exactly.
|
|
71
|
+
dim : int, default 64
|
|
72
|
+
Hilbert space dimension (number of angle basis states).
|
|
73
|
+
hbar : float, optional
|
|
74
|
+
Effective Planck constant; defaults to ``2*pi/dim``, the standard
|
|
75
|
+
choice that keeps the quantized torus's phase-space cell count equal
|
|
76
|
+
to `dim`.
|
|
77
|
+
|
|
78
|
+
Attributes
|
|
79
|
+
----------
|
|
80
|
+
k : float
|
|
81
|
+
Kick strength.
|
|
82
|
+
dim : int
|
|
83
|
+
Hilbert space dimension.
|
|
84
|
+
hbar : float
|
|
85
|
+
Effective Planck constant.
|
|
86
|
+
|
|
87
|
+
Raises
|
|
88
|
+
------
|
|
89
|
+
InvalidParameterError
|
|
90
|
+
If `dim` is smaller than 2.
|
|
91
|
+
"""
|
|
92
|
+
|
|
93
|
+
def __init__(self, k: float = 1.0, dim: int = 64, hbar: float | None = None):
|
|
94
|
+
if dim < 2:
|
|
95
|
+
raise InvalidParameterError("dim must be at least 2")
|
|
96
|
+
self.k = float(k)
|
|
97
|
+
self.dim = int(dim)
|
|
98
|
+
self.hbar = float(hbar) if hbar is not None else 2.0 * np.pi / self.dim
|
|
99
|
+
|
|
100
|
+
def floquet_operator(self) -> NDArray[np.complex128]:
|
|
101
|
+
"""Build the one-period Floquet (evolution) operator.
|
|
102
|
+
|
|
103
|
+
Returns
|
|
104
|
+
-------
|
|
105
|
+
ndarray of complex, shape (dim, dim)
|
|
106
|
+
Unitary matrix advancing a state, in the angle representation,
|
|
107
|
+
by one kick-and-rotation period.
|
|
108
|
+
"""
|
|
109
|
+
n = self.dim
|
|
110
|
+
theta = 2.0 * np.pi * np.arange(n) / n
|
|
111
|
+
momentum = np.arange(n)
|
|
112
|
+
kick_phase = np.exp(-1j * (self.k / self.hbar) * np.cos(theta))
|
|
113
|
+
kinetic_phase = np.exp(-1j * self.hbar * momentum**2 / 2.0)
|
|
114
|
+
dft = _dft_matrix(n)
|
|
115
|
+
result = dft.conj().T @ (kinetic_phase[:, None] * dft) @ np.diag(kick_phase)
|
|
116
|
+
return np.asarray(result, dtype=np.complex128)
|
|
117
|
+
|
|
118
|
+
def evolve(self, psi: ArrayLike, n_steps: int = 1) -> NDArray[np.complex128]:
|
|
119
|
+
"""Propagate a state through ``n_steps`` kicks.
|
|
120
|
+
|
|
121
|
+
Parameters
|
|
122
|
+
----------
|
|
123
|
+
psi : array_like of complex, shape (dim,)
|
|
124
|
+
Initial state in the angle representation; normalized
|
|
125
|
+
internally.
|
|
126
|
+
n_steps : int, default 1
|
|
127
|
+
Number of Floquet periods to advance.
|
|
128
|
+
|
|
129
|
+
Returns
|
|
130
|
+
-------
|
|
131
|
+
ndarray of complex, shape (n_steps + 1, dim)
|
|
132
|
+
The state after each kick, including the (normalized) initial
|
|
133
|
+
state as row 0.
|
|
134
|
+
"""
|
|
135
|
+
u = self.floquet_operator()
|
|
136
|
+
state = np.asarray(psi, dtype=np.complex128)
|
|
137
|
+
state = state / np.linalg.norm(state)
|
|
138
|
+
states = np.empty((n_steps + 1, self.dim), dtype=np.complex128)
|
|
139
|
+
states[0] = state
|
|
140
|
+
for i in range(n_steps):
|
|
141
|
+
state = u @ state
|
|
142
|
+
states[i + 1] = state
|
|
143
|
+
return states
|
|
144
|
+
|
|
145
|
+
def eigenphases(self) -> NDArray[np.float64]:
|
|
146
|
+
"""Quasi-energies (eigenphases) of the Floquet operator.
|
|
147
|
+
|
|
148
|
+
Hand these to ``physicskit.rmt`` to study their spacing statistics.
|
|
149
|
+
|
|
150
|
+
Returns
|
|
151
|
+
-------
|
|
152
|
+
ndarray of float, shape (dim,)
|
|
153
|
+
Eigenphases (angles of the Floquet operator's unit-modulus
|
|
154
|
+
eigenvalues), sorted ascending, in radians in ``(-pi, pi]``.
|
|
155
|
+
"""
|
|
156
|
+
eigvals = np.linalg.eigvals(self.floquet_operator())
|
|
157
|
+
return np.sort(np.angle(eigvals))
|
|
158
|
+
|
|
159
|
+
def coherent_state(self, theta0: float, p0: float) -> NDArray[np.complex128]:
|
|
160
|
+
"""A minimum-uncertainty wavepacket centered at ``(theta0, p0)``.
|
|
161
|
+
|
|
162
|
+
Useful as a semiclassical initial state for :meth:`evolve`, to watch
|
|
163
|
+
the quantum dynamics track (and eventually depart from) the
|
|
164
|
+
corresponding classical orbit.
|
|
165
|
+
|
|
166
|
+
Parameters
|
|
167
|
+
----------
|
|
168
|
+
theta0, p0 : float
|
|
169
|
+
Phase-space center of the wavepacket.
|
|
170
|
+
|
|
171
|
+
Returns
|
|
172
|
+
-------
|
|
173
|
+
ndarray of complex, shape (dim,)
|
|
174
|
+
Normalized coherent state in the angle representation.
|
|
175
|
+
"""
|
|
176
|
+
n = self.dim
|
|
177
|
+
theta = 2.0 * np.pi * np.arange(n) / n
|
|
178
|
+
sigma2 = self.hbar
|
|
179
|
+
psi = np.zeros(n, dtype=np.complex128)
|
|
180
|
+
for m in range(-3, 4):
|
|
181
|
+
dtheta = theta - theta0 - 2.0 * np.pi * m
|
|
182
|
+
psi += np.exp(-(dtheta**2) / (2.0 * sigma2)) * np.exp(1j * p0 * dtheta / self.hbar)
|
|
183
|
+
return psi / np.linalg.norm(psi)
|
|
184
|
+
|
|
185
|
+
def husimi(self, psi: ArrayLike, resolution: int = 80, n_wraps: int = 3) -> tuple[NDArray[np.float64], NDArray[np.float64], NDArray[np.float64]]:
|
|
186
|
+
"""Husimi phase-space distribution of a state; see :func:`~physicskit.chaos.quantum.husimi.husimi_function`.
|
|
187
|
+
|
|
188
|
+
Parameters
|
|
189
|
+
----------
|
|
190
|
+
psi : array_like of complex, shape (dim,)
|
|
191
|
+
State in the angle representation.
|
|
192
|
+
resolution : int, default 80
|
|
193
|
+
Number of grid points along each of the ``theta`` and ``p`` axes.
|
|
194
|
+
n_wraps : int, default 3
|
|
195
|
+
Number of periodic images summed to periodize the coherent
|
|
196
|
+
states used.
|
|
197
|
+
|
|
198
|
+
Returns
|
|
199
|
+
-------
|
|
200
|
+
Theta, P, husimi : ndarray of float, shape (resolution, resolution)
|
|
201
|
+
Phase-space grid and the (peak-normalized) Husimi distribution.
|
|
202
|
+
"""
|
|
203
|
+
state = np.asarray(psi, dtype=np.complex128)
|
|
204
|
+
return husimi_function(state, self.hbar, 2.0 * np.pi, resolution=resolution, n_wraps=n_wraps)
|
|
205
|
+
|
|
206
|
+
def __repr__(self) -> str:
|
|
207
|
+
return _init_repr(self)
|
|
208
|
+
|
|
209
|
+
|
|
210
|
+
class QuantumBakersMap:
|
|
211
|
+
"""The quantum baker's map: the (generalized) baker's map's quantization.
|
|
212
|
+
|
|
213
|
+
Built via the Balazs-Voros/Saraceno construction, generalized to an
|
|
214
|
+
arbitrary cut `alpha` in exact correspondence with physicskit.chaos's classical
|
|
215
|
+
:class:`~physicskit.chaos.systems.maps.BakersMap`: the Floquet operator applies
|
|
216
|
+
the discrete Fourier transform separately to the ``q < alpha`` and
|
|
217
|
+
``q >= alpha`` position-basis blocks (mirroring the classical map
|
|
218
|
+
stretching each piece independently), then transforms the result back to
|
|
219
|
+
the full position representation.
|
|
220
|
+
|
|
221
|
+
Parameters
|
|
222
|
+
----------
|
|
223
|
+
dim : int
|
|
224
|
+
Hilbert space dimension (number of position basis states).
|
|
225
|
+
alpha : float, default 0.5
|
|
226
|
+
Cut position, in ``(0, 1)``; matches the classical
|
|
227
|
+
:class:`~physicskit.chaos.systems.maps.BakersMap`'s `alpha`. The classic
|
|
228
|
+
Balazs-Voros construction is the ``alpha=0.5`` case with `dim` even.
|
|
229
|
+
|
|
230
|
+
Attributes
|
|
231
|
+
----------
|
|
232
|
+
dim : int
|
|
233
|
+
Hilbert space dimension.
|
|
234
|
+
alpha : float
|
|
235
|
+
Cut position.
|
|
236
|
+
hbar : float
|
|
237
|
+
Effective Planck constant, ``1 / dim``.
|
|
238
|
+
|
|
239
|
+
Raises
|
|
240
|
+
------
|
|
241
|
+
InvalidParameterError
|
|
242
|
+
If `alpha` does not satisfy ``0 < alpha < 1``, or if rounding
|
|
243
|
+
``alpha * dim`` to the nearest integer would leave either of the two
|
|
244
|
+
blocks with fewer than 1 basis state.
|
|
245
|
+
|
|
246
|
+
Notes
|
|
247
|
+
-----
|
|
248
|
+
Exact correspondence with the classical cut requires ``alpha * dim`` to
|
|
249
|
+
be an integer; for other values, the nearest integer split is used, and
|
|
250
|
+
:attr:`alpha` is left at the value the caller requested rather than
|
|
251
|
+
silently adjusted to the value actually realized -- pass a `dim` that
|
|
252
|
+
makes ``alpha * dim`` (near-)integral for the closest match.
|
|
253
|
+
"""
|
|
254
|
+
|
|
255
|
+
def __init__(self, dim: int, alpha: float = 0.5):
|
|
256
|
+
if not 0.0 < alpha < 1.0:
|
|
257
|
+
raise InvalidParameterError("alpha must satisfy 0 < alpha < 1")
|
|
258
|
+
n1 = round(alpha * dim)
|
|
259
|
+
if n1 < 1 or n1 > dim - 1:
|
|
260
|
+
raise InvalidParameterError("alpha * dim must round to an integer strictly between 0 and dim")
|
|
261
|
+
self.dim = int(dim)
|
|
262
|
+
self.alpha = float(alpha)
|
|
263
|
+
self.hbar = 1.0 / self.dim
|
|
264
|
+
self._n1 = n1
|
|
265
|
+
self._n2 = dim - n1
|
|
266
|
+
|
|
267
|
+
def floquet_operator(self) -> NDArray[np.complex128]:
|
|
268
|
+
"""Build the one-iteration Floquet (evolution) operator.
|
|
269
|
+
|
|
270
|
+
Returns
|
|
271
|
+
-------
|
|
272
|
+
ndarray of complex, shape (dim, dim)
|
|
273
|
+
Unitary matrix advancing a state, in the position
|
|
274
|
+
representation, by one map iteration.
|
|
275
|
+
"""
|
|
276
|
+
n = self.dim
|
|
277
|
+
block = np.zeros((n, n), dtype=np.complex128)
|
|
278
|
+
block[: self._n1, : self._n1] = _dft_matrix(self._n1)
|
|
279
|
+
block[self._n1 :, self._n1 :] = _dft_matrix(self._n2)
|
|
280
|
+
return _dft_matrix(n).conj().T @ block
|
|
281
|
+
|
|
282
|
+
def evolve(self, psi: ArrayLike, n_steps: int = 1) -> NDArray[np.complex128]:
|
|
283
|
+
"""Propagate a state through ``n_steps`` map iterations.
|
|
284
|
+
|
|
285
|
+
Parameters
|
|
286
|
+
----------
|
|
287
|
+
psi : array_like of complex, shape (dim,)
|
|
288
|
+
Initial state in the position representation; normalized
|
|
289
|
+
internally.
|
|
290
|
+
n_steps : int, default 1
|
|
291
|
+
Number of map iterations to advance.
|
|
292
|
+
|
|
293
|
+
Returns
|
|
294
|
+
-------
|
|
295
|
+
ndarray of complex, shape (n_steps + 1, dim)
|
|
296
|
+
The state after each iteration, including the (normalized)
|
|
297
|
+
initial state as row 0.
|
|
298
|
+
"""
|
|
299
|
+
u = self.floquet_operator()
|
|
300
|
+
state = np.asarray(psi, dtype=np.complex128)
|
|
301
|
+
state = state / np.linalg.norm(state)
|
|
302
|
+
states = np.empty((n_steps + 1, self.dim), dtype=np.complex128)
|
|
303
|
+
states[0] = state
|
|
304
|
+
for i in range(n_steps):
|
|
305
|
+
state = u @ state
|
|
306
|
+
states[i + 1] = state
|
|
307
|
+
return states
|
|
308
|
+
|
|
309
|
+
def eigenphases(self) -> NDArray[np.float64]:
|
|
310
|
+
"""Quasi-energies (eigenphases) of the Floquet operator.
|
|
311
|
+
|
|
312
|
+
Hand these to ``physicskit.rmt`` to study their spacing statistics.
|
|
313
|
+
|
|
314
|
+
Returns
|
|
315
|
+
-------
|
|
316
|
+
ndarray of float, shape (dim,)
|
|
317
|
+
Eigenphases, sorted ascending, in radians in ``(-pi, pi]``.
|
|
318
|
+
"""
|
|
319
|
+
eigvals = np.linalg.eigvals(self.floquet_operator())
|
|
320
|
+
return np.sort(np.angle(eigvals))
|
|
321
|
+
|
|
322
|
+
def coherent_state(self, q0: float, p0: float) -> NDArray[np.complex128]:
|
|
323
|
+
"""A minimum-uncertainty wavepacket centered at ``(q0, p0)``.
|
|
324
|
+
|
|
325
|
+
Parameters
|
|
326
|
+
----------
|
|
327
|
+
q0, p0 : float
|
|
328
|
+
Phase-space center of the wavepacket, each in ``[0, 1)``.
|
|
329
|
+
|
|
330
|
+
Returns
|
|
331
|
+
-------
|
|
332
|
+
ndarray of complex, shape (dim,)
|
|
333
|
+
Normalized coherent state in the position representation.
|
|
334
|
+
"""
|
|
335
|
+
n = self.dim
|
|
336
|
+
q = np.arange(n) / n
|
|
337
|
+
sigma2 = self.hbar
|
|
338
|
+
psi = np.zeros(n, dtype=np.complex128)
|
|
339
|
+
for m in range(-3, 4):
|
|
340
|
+
dq = q - q0 - m
|
|
341
|
+
psi += np.exp(-(dq**2) / (2.0 * sigma2)) * np.exp(1j * p0 * dq / self.hbar)
|
|
342
|
+
return psi / np.linalg.norm(psi)
|
|
343
|
+
|
|
344
|
+
def husimi(self, psi: ArrayLike, resolution: int = 80, n_wraps: int = 3) -> tuple[NDArray[np.float64], NDArray[np.float64], NDArray[np.float64]]:
|
|
345
|
+
"""Husimi phase-space distribution of a state; see :func:`~physicskit.chaos.quantum.husimi.husimi_function`.
|
|
346
|
+
|
|
347
|
+
Parameters
|
|
348
|
+
----------
|
|
349
|
+
psi : array_like of complex, shape (dim,)
|
|
350
|
+
State in the position representation.
|
|
351
|
+
resolution : int, default 80
|
|
352
|
+
Number of grid points along each of the ``q`` and ``p`` axes.
|
|
353
|
+
n_wraps : int, default 3
|
|
354
|
+
Number of periodic images summed to periodize the coherent
|
|
355
|
+
states used.
|
|
356
|
+
|
|
357
|
+
Returns
|
|
358
|
+
-------
|
|
359
|
+
Q, P, husimi : ndarray of float, shape (resolution, resolution)
|
|
360
|
+
Phase-space grid and the (peak-normalized) Husimi distribution.
|
|
361
|
+
"""
|
|
362
|
+
state = np.asarray(psi, dtype=np.complex128)
|
|
363
|
+
return husimi_function(state, self.hbar, 1.0, resolution=resolution, n_wraps=n_wraps)
|
|
364
|
+
|
|
365
|
+
def __repr__(self) -> str:
|
|
366
|
+
return _init_repr(self)
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
from physicskit.chaos.systems.billiards import (
|
|
2
|
+
BunimovichStadium,
|
|
3
|
+
CircleBilliard,
|
|
4
|
+
EllipseBilliard,
|
|
5
|
+
RectangleBilliard,
|
|
6
|
+
SinaiBilliard,
|
|
7
|
+
TruncatedCircleBilliard,
|
|
8
|
+
)
|
|
9
|
+
from physicskit.chaos.systems.continuous import (
|
|
10
|
+
Chua,
|
|
11
|
+
DoublePendulum,
|
|
12
|
+
Duffing,
|
|
13
|
+
Lorenz,
|
|
14
|
+
MagneticPendulum,
|
|
15
|
+
RestrictedThreeBody,
|
|
16
|
+
Rossler,
|
|
17
|
+
)
|
|
18
|
+
from physicskit.chaos.systems.maps import BakersMap, HenonMap, LogisticMap, StandardMap
|
|
19
|
+
|
|
20
|
+
__all__ = [
|
|
21
|
+
"BakersMap",
|
|
22
|
+
"BunimovichStadium",
|
|
23
|
+
"Chua",
|
|
24
|
+
"CircleBilliard",
|
|
25
|
+
"DoublePendulum",
|
|
26
|
+
"Duffing",
|
|
27
|
+
"EllipseBilliard",
|
|
28
|
+
"HenonMap",
|
|
29
|
+
"LogisticMap",
|
|
30
|
+
"Lorenz",
|
|
31
|
+
"MagneticPendulum",
|
|
32
|
+
"RectangleBilliard",
|
|
33
|
+
"RestrictedThreeBody",
|
|
34
|
+
"Rossler",
|
|
35
|
+
"SinaiBilliard",
|
|
36
|
+
"StandardMap",
|
|
37
|
+
"TruncatedCircleBilliard",
|
|
38
|
+
]
|