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,306 @@
|
|
|
1
|
+
r"""Spin dynamics: the Stern-Gerlach experiment and driven two-level (Rabi) systems."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from dataclasses import dataclass
|
|
6
|
+
|
|
7
|
+
import numpy as np
|
|
8
|
+
|
|
9
|
+
from ..core.operators import identity2, sigma_x, sigma_z
|
|
10
|
+
from .wave_packets import GaussianDispersion
|
|
11
|
+
|
|
12
|
+
__all__ = ["SternGerlach", "RabiProblem"]
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
# --- Stern-Gerlach: semiclassical spin-splitting ----------------------------
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
@dataclass
|
|
19
|
+
class SternGerlach:
|
|
20
|
+
r"""Semiclassical Stern-Gerlach beam splitting.
|
|
21
|
+
|
|
22
|
+
A spin-1/2 particle beam enters an inhomogeneous field
|
|
23
|
+
:math:`B_z(y) \approx B_0 + y\,\partial_y B_z`; the spin-dependent force
|
|
24
|
+
:math:`F_y = \pm\mu\,\partial_y B_z` (the sign set by the :math:`z`-spin
|
|
25
|
+
eigenvalue) pushes the two spin branches apart transversely while they
|
|
26
|
+
drift along :math:`x`.
|
|
27
|
+
|
|
28
|
+
This implements the standard textbook *simplified* treatment: the two
|
|
29
|
+
spin branches are modeled as two decoupled Gaussian wavepackets (rather
|
|
30
|
+
than solving the fully entangled spin-position Hamiltonian), each in a
|
|
31
|
+
uniform transverse force -- exactly solvable, since a wavepacket under a
|
|
32
|
+
constant force keeps the free-particle spreading law
|
|
33
|
+
(:class:`~physicskit.quantum.chapters.wave_packets.GaussianDispersion`)
|
|
34
|
+
while its center follows the classical trajectory
|
|
35
|
+
:math:`y(t) = y_0 + v_{y0}t + \tfrac12 a t^2` (Kennard's theorem /
|
|
36
|
+
the Ehrenfest theorem being exact for a linear potential), picking up an
|
|
37
|
+
extra "accelerated frame" phase
|
|
38
|
+
:math:`\varphi(y,t) = m a t\, y/\hbar - m a^2 t^3/(6\hbar)`.
|
|
39
|
+
|
|
40
|
+
Parameters
|
|
41
|
+
----------
|
|
42
|
+
mu : float, default=1.0
|
|
43
|
+
Magnetic-moment scale coupling the spin to the field gradient.
|
|
44
|
+
grad_B : float, default=1.0
|
|
45
|
+
Field gradient :math:`\partial_y B_z`.
|
|
46
|
+
sigma0 : float, default=1.0
|
|
47
|
+
Initial transverse (:math:`y`) width of the beam.
|
|
48
|
+
sigma_x : float, default=2.0
|
|
49
|
+
Initial longitudinal (:math:`x`, beam-propagation) width.
|
|
50
|
+
k0 : float, default=5.0
|
|
51
|
+
Central longitudinal wavenumber (beam velocity :math:`\hbar k_0/m`).
|
|
52
|
+
hbar : float, default=1.0
|
|
53
|
+
Value of :math:`\hbar` to use.
|
|
54
|
+
m : float, default=1.0
|
|
55
|
+
Particle mass.
|
|
56
|
+
spin_weights : tuple of float, default=(0.5, 0.5)
|
|
57
|
+
Probabilities :math:`(P_{+z}, P_{-z})` of the incoming spin state in
|
|
58
|
+
the measurement (:math:`z`) basis -- ``(0.5, 0.5)`` is the standard
|
|
59
|
+
demo of an unpolarized or :math:`x`-polarized incoming beam, split
|
|
60
|
+
50/50 by the apparatus.
|
|
61
|
+
"""
|
|
62
|
+
|
|
63
|
+
mu: float = 1.0
|
|
64
|
+
grad_B: float = 1.0
|
|
65
|
+
sigma0: float = 1.0
|
|
66
|
+
sigma_x: float = 2.0
|
|
67
|
+
k0: float = 5.0
|
|
68
|
+
hbar: float = 1.0
|
|
69
|
+
m: float = 1.0
|
|
70
|
+
spin_weights: tuple = (0.5, 0.5)
|
|
71
|
+
|
|
72
|
+
def acceleration(self, spin_sign: float) -> float:
|
|
73
|
+
r"""Transverse acceleration :math:`a = \text{spin\_sign}\cdot\mu\,\partial_y B_z/m`.
|
|
74
|
+
|
|
75
|
+
Parameters
|
|
76
|
+
----------
|
|
77
|
+
spin_sign : float
|
|
78
|
+
:math:`+1` for spin-up, :math:`-1` for spin-down.
|
|
79
|
+
|
|
80
|
+
Returns
|
|
81
|
+
-------
|
|
82
|
+
float
|
|
83
|
+
"""
|
|
84
|
+
return spin_sign * self.mu * self.grad_B / self.m
|
|
85
|
+
|
|
86
|
+
def transverse_wavefunction(self, y: np.ndarray, t: float, spin_sign: float) -> np.ndarray:
|
|
87
|
+
r"""The transverse packet :math:`\psi_{\pm}(y,t)` for one spin branch.
|
|
88
|
+
|
|
89
|
+
Parameters
|
|
90
|
+
----------
|
|
91
|
+
y : numpy.ndarray
|
|
92
|
+
Transverse positions.
|
|
93
|
+
t : float
|
|
94
|
+
Time.
|
|
95
|
+
spin_sign : float
|
|
96
|
+
:math:`+1` for spin-up, :math:`-1` for spin-down.
|
|
97
|
+
|
|
98
|
+
Returns
|
|
99
|
+
-------
|
|
100
|
+
numpy.ndarray
|
|
101
|
+
Complex-valued.
|
|
102
|
+
"""
|
|
103
|
+
a = self.acceleration(spin_sign)
|
|
104
|
+
shift = 0.5 * a * t**2
|
|
105
|
+
free = GaussianDispersion(x0=0.0, sigma0=self.sigma0, k0=0.0, hbar=self.hbar, m=self.m)
|
|
106
|
+
psi_free = free.psi(y - shift, t)
|
|
107
|
+
accel_phase = np.exp(1j * (self.m * a * t / self.hbar) * y - 1j * (self.m * a**2 * t**3) / (6 * self.hbar))
|
|
108
|
+
return psi_free * accel_phase
|
|
109
|
+
|
|
110
|
+
def longitudinal_wavefunction(self, x: np.ndarray, t: float) -> np.ndarray:
|
|
111
|
+
r"""The (force-free) longitudinal packet :math:`\psi(x,t)`.
|
|
112
|
+
|
|
113
|
+
Parameters
|
|
114
|
+
----------
|
|
115
|
+
x : numpy.ndarray
|
|
116
|
+
Positions along the beam-propagation axis.
|
|
117
|
+
t : float
|
|
118
|
+
Time.
|
|
119
|
+
|
|
120
|
+
Returns
|
|
121
|
+
-------
|
|
122
|
+
numpy.ndarray
|
|
123
|
+
Complex-valued.
|
|
124
|
+
"""
|
|
125
|
+
free = GaussianDispersion(x0=0.0, sigma0=self.sigma_x, k0=self.k0, hbar=self.hbar, m=self.m)
|
|
126
|
+
return free.psi(x, t)
|
|
127
|
+
|
|
128
|
+
def joint_density(self, x: np.ndarray, y: np.ndarray, t: float) -> np.ndarray:
|
|
129
|
+
r"""The joint spatial density on the :math:`(x,y)` plane at time :math:`t`.
|
|
130
|
+
|
|
131
|
+
.. math::
|
|
132
|
+
|
|
133
|
+
P(x,y,t) = P_{+z}\,\lvert\psi(x,t)\rvert^2 \lvert\psi_+(y,t)\rvert^2
|
|
134
|
+
+ P_{-z}\,\lvert\psi(x,t)\rvert^2 \lvert\psi_-(y,t)\rvert^2,
|
|
135
|
+
|
|
136
|
+
the incoherent (classically correlated, not entangled) mixture of
|
|
137
|
+
the two spin branches -- splitting into two lobes as :math:`t` grows.
|
|
138
|
+
|
|
139
|
+
Parameters
|
|
140
|
+
----------
|
|
141
|
+
x, y : numpy.ndarray
|
|
142
|
+
1D position grids; combined into a meshgrid internally.
|
|
143
|
+
t : float
|
|
144
|
+
Time.
|
|
145
|
+
|
|
146
|
+
Returns
|
|
147
|
+
-------
|
|
148
|
+
numpy.ndarray
|
|
149
|
+
Real-valued, shape ``(len(x), len(y))``.
|
|
150
|
+
"""
|
|
151
|
+
X, Y = np.meshgrid(x, y, indexing="ij")
|
|
152
|
+
density_x = np.abs(self.longitudinal_wavefunction(X, t)) ** 2
|
|
153
|
+
density_up = np.abs(self.transverse_wavefunction(Y, t, +1.0)) ** 2
|
|
154
|
+
density_down = np.abs(self.transverse_wavefunction(Y, t, -1.0)) ** 2
|
|
155
|
+
p_up, p_down = self.spin_weights
|
|
156
|
+
return density_x * (p_up * density_up + p_down * density_down)
|
|
157
|
+
|
|
158
|
+
def joint_density_stack(self, x: np.ndarray, y: np.ndarray, t_values: np.ndarray) -> np.ndarray:
|
|
159
|
+
"""Stack of :meth:`joint_density` snapshots over a time grid.
|
|
160
|
+
|
|
161
|
+
Shaped for :func:`~physicskit.quantum.visualizers.wavefunctions.animate_density_2d`.
|
|
162
|
+
|
|
163
|
+
Parameters
|
|
164
|
+
----------
|
|
165
|
+
x, y : numpy.ndarray
|
|
166
|
+
1D position grids.
|
|
167
|
+
t_values : numpy.ndarray
|
|
168
|
+
Times to evaluate at.
|
|
169
|
+
|
|
170
|
+
Returns
|
|
171
|
+
-------
|
|
172
|
+
numpy.ndarray
|
|
173
|
+
Real-valued, shape ``(len(t_values), len(x), len(y))``.
|
|
174
|
+
"""
|
|
175
|
+
return np.array([self.joint_density(x, y, t) for t in t_values])
|
|
176
|
+
|
|
177
|
+
|
|
178
|
+
# --- Driven two-level system: Rabi oscillations -----------------------------
|
|
179
|
+
|
|
180
|
+
|
|
181
|
+
@dataclass
|
|
182
|
+
class RabiProblem:
|
|
183
|
+
r"""A driven two-level system in the rotating-wave approximation (RWA).
|
|
184
|
+
|
|
185
|
+
In the frame rotating at the drive frequency :math:`\omega_d`, the RWA
|
|
186
|
+
Hamiltonian is time-independent,
|
|
187
|
+
|
|
188
|
+
.. math::
|
|
189
|
+
|
|
190
|
+
\hat H_\text{RWA} = \frac{\hbar}{2}\left(\Delta\,\sigma_z + \Omega\,\sigma_x\right),
|
|
191
|
+
\qquad \Delta = \omega_d - \omega_0,
|
|
192
|
+
|
|
193
|
+
giving the exact closed-form propagator (the Rabi formula)
|
|
194
|
+
|
|
195
|
+
.. math::
|
|
196
|
+
|
|
197
|
+
U(t) = \cos\!\left(\frac{\Omega_R t}{2}\right) I
|
|
198
|
+
- i\sin\!\left(\frac{\Omega_R t}{2}\right)
|
|
199
|
+
\frac{\Delta\,\sigma_z + \Omega\,\sigma_x}{\Omega_R},
|
|
200
|
+
\qquad \Omega_R = \sqrt{\Delta^2+\Omega^2},
|
|
201
|
+
|
|
202
|
+
with :math:`\Omega_R` the generalized Rabi frequency. On resonance
|
|
203
|
+
(:math:`\Delta=0`) the population fully cycles between the two levels;
|
|
204
|
+
detuning caps the cycling amplitude at :math:`\Omega^2/\Omega_R^2`.
|
|
205
|
+
|
|
206
|
+
Parameters
|
|
207
|
+
----------
|
|
208
|
+
omega0 : float, default=1.0
|
|
209
|
+
Bare qubit splitting :math:`\omega_0`.
|
|
210
|
+
omega_d : float, default=1.0
|
|
211
|
+
Drive frequency :math:`\omega_d`.
|
|
212
|
+
Omega : float, default=0.2
|
|
213
|
+
Drive (Rabi) coupling strength :math:`\Omega`.
|
|
214
|
+
hbar : float, default=1.0
|
|
215
|
+
Value of :math:`\hbar` to use.
|
|
216
|
+
"""
|
|
217
|
+
|
|
218
|
+
omega0: float = 1.0
|
|
219
|
+
omega_d: float = 1.0
|
|
220
|
+
Omega: float = 0.2
|
|
221
|
+
hbar: float = 1.0
|
|
222
|
+
|
|
223
|
+
@property
|
|
224
|
+
def detuning(self) -> float:
|
|
225
|
+
r"""float: The detuning :math:`\Delta = \omega_d - \omega_0`."""
|
|
226
|
+
return self.omega_d - self.omega0
|
|
227
|
+
|
|
228
|
+
@property
|
|
229
|
+
def generalized_rabi_frequency(self) -> float:
|
|
230
|
+
r"""float: :math:`\Omega_R = \sqrt{\Delta^2+\Omega^2}`."""
|
|
231
|
+
return float(np.sqrt(self.detuning**2 + self.Omega**2))
|
|
232
|
+
|
|
233
|
+
def propagator(self, t: float) -> np.ndarray:
|
|
234
|
+
"""The RWA time-evolution operator :math:`U(t)`.
|
|
235
|
+
|
|
236
|
+
Parameters
|
|
237
|
+
----------
|
|
238
|
+
t : float
|
|
239
|
+
Time.
|
|
240
|
+
|
|
241
|
+
Returns
|
|
242
|
+
-------
|
|
243
|
+
numpy.ndarray
|
|
244
|
+
The :math:`2\\times2` unitary propagator.
|
|
245
|
+
"""
|
|
246
|
+
Delta, Omega, Omega_R = self.detuning, self.Omega, self.generalized_rabi_frequency
|
|
247
|
+
if Omega_R == 0.0:
|
|
248
|
+
return identity2.copy()
|
|
249
|
+
n_dot_sigma = Delta * sigma_z + Omega * sigma_x
|
|
250
|
+
return np.cos(Omega_R * t / 2) * identity2 - 1j * np.sin(Omega_R * t / 2) * (n_dot_sigma / Omega_R)
|
|
251
|
+
|
|
252
|
+
def state(self, t: float, psi0: np.ndarray | None = None) -> np.ndarray:
|
|
253
|
+
r"""The evolved qubit state :math:`\psi(t) = U(t)\,\psi_0`.
|
|
254
|
+
|
|
255
|
+
Parameters
|
|
256
|
+
----------
|
|
257
|
+
t : float
|
|
258
|
+
Time.
|
|
259
|
+
psi0 : numpy.ndarray or None, optional
|
|
260
|
+
Initial state; defaults to the ground state :math:`\lvert0\rangle`.
|
|
261
|
+
|
|
262
|
+
Returns
|
|
263
|
+
-------
|
|
264
|
+
numpy.ndarray
|
|
265
|
+
The 2-component qubit state.
|
|
266
|
+
"""
|
|
267
|
+
if psi0 is None:
|
|
268
|
+
psi0 = np.array([1.0, 0.0], dtype=complex)
|
|
269
|
+
return self.propagator(t) @ np.asarray(psi0, dtype=complex)
|
|
270
|
+
|
|
271
|
+
def state_trajectory(self, t_values: np.ndarray, psi0: np.ndarray | None = None) -> np.ndarray:
|
|
272
|
+
"""Stack of :meth:`state` snapshots over a time grid.
|
|
273
|
+
|
|
274
|
+
Shaped for
|
|
275
|
+
:func:`~physicskit.quantum.visualizers.bloch_sphere.state_to_bloch_trajectory`.
|
|
276
|
+
|
|
277
|
+
Parameters
|
|
278
|
+
----------
|
|
279
|
+
t_values : numpy.ndarray
|
|
280
|
+
Times to evaluate at.
|
|
281
|
+
psi0 : numpy.ndarray or None, optional
|
|
282
|
+
Initial state; defaults to the ground state.
|
|
283
|
+
|
|
284
|
+
Returns
|
|
285
|
+
-------
|
|
286
|
+
numpy.ndarray
|
|
287
|
+
Complex-valued, shape ``(len(t_values), 2)``.
|
|
288
|
+
"""
|
|
289
|
+
return np.array([self.state(t, psi0) for t in t_values])
|
|
290
|
+
|
|
291
|
+
def excited_state_population(self, t: np.ndarray) -> np.ndarray:
|
|
292
|
+
r"""The Rabi formula :math:`P_e(t) = (\Omega^2/\Omega_R^2)\sin^2(\Omega_R t/2)`.
|
|
293
|
+
|
|
294
|
+
Parameters
|
|
295
|
+
----------
|
|
296
|
+
t : numpy.ndarray
|
|
297
|
+
Times to evaluate at.
|
|
298
|
+
|
|
299
|
+
Returns
|
|
300
|
+
-------
|
|
301
|
+
numpy.ndarray
|
|
302
|
+
"""
|
|
303
|
+
Omega_R = self.generalized_rabi_frequency
|
|
304
|
+
if Omega_R == 0.0:
|
|
305
|
+
return np.zeros_like(np.asarray(t, dtype=float))
|
|
306
|
+
return (self.Omega**2 / Omega_R**2) * np.sin(Omega_R * np.asarray(t) / 2) ** 2
|