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.
Files changed (484) hide show
  1. physicskit/__init__.py +51 -0
  2. physicskit/astro/__init__.py +66 -0
  3. physicskit/astro/cosmic_web.py +395 -0
  4. physicskit/astro/galactic_dynamics.py +137 -0
  5. physicskit/astro/nbody.py +208 -0
  6. physicskit/astro/orbital_mechanics.py +220 -0
  7. physicskit/astro/stellar_dynamo.py +628 -0
  8. physicskit/astro/stellar_structure.py +198 -0
  9. physicskit/astro/tests/__init__.py +0 -0
  10. physicskit/astro/tests/conftest.py +7 -0
  11. physicskit/astro/tests/test_cosmic_web.py +159 -0
  12. physicskit/astro/tests/test_galactic_dynamics.py +46 -0
  13. physicskit/astro/tests/test_nbody.py +81 -0
  14. physicskit/astro/tests/test_orbital_mechanics.py +73 -0
  15. physicskit/astro/tests/test_stellar_dynamo.py +198 -0
  16. physicskit/astro/tests/test_stellar_structure.py +52 -0
  17. physicskit/astro/tests/test_visualizers.py +159 -0
  18. physicskit/astro/visualizers.py +628 -0
  19. physicskit/chaos/__init__.py +55 -0
  20. physicskit/chaos/core/__init__.py +3 -0
  21. physicskit/chaos/core/base_system.py +342 -0
  22. physicskit/chaos/core/integrators.py +40 -0
  23. physicskit/chaos/exceptions.py +24 -0
  24. physicskit/chaos/quantum/__init__.py +38 -0
  25. physicskit/chaos/quantum/billiards.py +274 -0
  26. physicskit/chaos/quantum/husimi.py +85 -0
  27. physicskit/chaos/quantum/maps.py +366 -0
  28. physicskit/chaos/systems/__init__.py +38 -0
  29. physicskit/chaos/systems/billiards.py +1131 -0
  30. physicskit/chaos/systems/continuous.py +1276 -0
  31. physicskit/chaos/systems/maps.py +557 -0
  32. physicskit/chaos/tests/__init__.py +0 -0
  33. physicskit/chaos/tests/test_basins.py +76 -0
  34. physicskit/chaos/tests/test_bifurcation.py +132 -0
  35. physicskit/chaos/tests/test_billiards.py +115 -0
  36. physicskit/chaos/tests/test_continuous.py +224 -0
  37. physicskit/chaos/tests/test_dimension.py +69 -0
  38. physicskit/chaos/tests/test_divergence.py +90 -0
  39. physicskit/chaos/tests/test_dynamic_plots.py +269 -0
  40. physicskit/chaos/tests/test_integrators.py +96 -0
  41. physicskit/chaos/tests/test_io.py +41 -0
  42. physicskit/chaos/tests/test_maps.py +110 -0
  43. physicskit/chaos/tests/test_metrics.py +115 -0
  44. physicskit/chaos/tests/test_phase_space.py +73 -0
  45. physicskit/chaos/tests/test_properties.py +116 -0
  46. physicskit/chaos/tests/test_quantum_billiards.py +94 -0
  47. physicskit/chaos/tests/test_quantum_maps.py +144 -0
  48. physicskit/chaos/tests/test_recurrence.py +51 -0
  49. physicskit/chaos/tests/test_repr_and_api_consistency.py +134 -0
  50. physicskit/chaos/tests/test_section.py +49 -0
  51. physicskit/chaos/tests/test_spectral.py +48 -0
  52. physicskit/chaos/tests/test_streamlit_app.py +45 -0
  53. physicskit/chaos/tests/test_timeseries.py +131 -0
  54. physicskit/chaos/tests/test_viewer3d.py +41 -0
  55. physicskit/chaos/utils/__init__.py +46 -0
  56. physicskit/chaos/utils/dimension.py +139 -0
  57. physicskit/chaos/utils/io.py +95 -0
  58. physicskit/chaos/utils/metrics.py +304 -0
  59. physicskit/chaos/utils/recurrence.py +122 -0
  60. physicskit/chaos/utils/spectral.py +69 -0
  61. physicskit/chaos/utils/timeseries.py +303 -0
  62. physicskit/chaos/visualizers/__init__.py +85 -0
  63. physicskit/chaos/visualizers/basins.py +185 -0
  64. physicskit/chaos/visualizers/bifurcation.py +273 -0
  65. physicskit/chaos/visualizers/divergence.py +374 -0
  66. physicskit/chaos/visualizers/dynamic_plots.py +1372 -0
  67. physicskit/chaos/visualizers/phase_space.py +133 -0
  68. physicskit/chaos/visualizers/quantum.py +299 -0
  69. physicskit/chaos/visualizers/recurrence.py +91 -0
  70. physicskit/chaos/visualizers/section.py +161 -0
  71. physicskit/chaos/visualizers/theme.py +31 -0
  72. physicskit/chaos/visualizers/viewer3d.py +82 -0
  73. physicskit/classical/__init__.py +55 -0
  74. physicskit/classical/core/__init__.py +17 -0
  75. physicskit/classical/core/base_system.py +510 -0
  76. physicskit/classical/core/integrators.py +397 -0
  77. physicskit/classical/systems/__init__.py +32 -0
  78. physicskit/classical/systems/chains.py +334 -0
  79. physicskit/classical/systems/hamiltonian.py +215 -0
  80. physicskit/classical/systems/lagrangian.py +308 -0
  81. physicskit/classical/systems/newtonian.py +536 -0
  82. physicskit/classical/systems/rotations.py +614 -0
  83. physicskit/classical/tests/__init__.py +0 -0
  84. physicskit/classical/tests/conftest.py +7 -0
  85. physicskit/classical/tests/test_base_system.py +113 -0
  86. physicskit/classical/tests/test_chains.py +84 -0
  87. physicskit/classical/tests/test_conservation.py +244 -0
  88. physicskit/classical/tests/test_conservation_utils.py +47 -0
  89. physicskit/classical/tests/test_hamiltonian.py +44 -0
  90. physicskit/classical/tests/test_integrators.py +123 -0
  91. physicskit/classical/tests/test_lagrangian.py +69 -0
  92. physicskit/classical/tests/test_newtonian.py +45 -0
  93. physicskit/classical/tests/test_rotations.py +160 -0
  94. physicskit/classical/tests/test_stepsize.py +149 -0
  95. physicskit/classical/tests/test_symbolic.py +125 -0
  96. physicskit/classical/tests/test_visualizers.py +172 -0
  97. physicskit/classical/utils/__init__.py +20 -0
  98. physicskit/classical/utils/conservation.py +126 -0
  99. physicskit/classical/utils/stepsize.py +187 -0
  100. physicskit/classical/utils/symbolic.py +235 -0
  101. physicskit/classical/visualizers/__init__.py +25 -0
  102. physicskit/classical/visualizers/animations.py +508 -0
  103. physicskit/classical/visualizers/interactive.py +113 -0
  104. physicskit/classical/visualizers/modal_analysis.py +97 -0
  105. physicskit/classical/visualizers/phase_space.py +214 -0
  106. physicskit/condensed/__init__.py +122 -0
  107. physicskit/condensed/anderson_localization.py +155 -0
  108. physicskit/condensed/correlated.py +284 -0
  109. physicskit/condensed/ginzburg_landau.py +220 -0
  110. physicskit/condensed/landau_levels.py +246 -0
  111. physicskit/condensed/laughlin.py +229 -0
  112. physicskit/condensed/models.py +627 -0
  113. physicskit/condensed/tests/__init__.py +0 -0
  114. physicskit/condensed/tests/test_condensed.py +518 -0
  115. physicskit/condensed/tests/test_visualizers.py +87 -0
  116. physicskit/condensed/tight_binding.py +445 -0
  117. physicskit/condensed/topological_insulator_3d.py +178 -0
  118. physicskit/condensed/topology.py +217 -0
  119. physicskit/condensed/visualizers.py +296 -0
  120. physicskit/condensed/weyl.py +180 -0
  121. physicskit/constants.py +184 -0
  122. physicskit/fields/__init__.py +111 -0
  123. physicskit/fields/electrodynamics.py +671 -0
  124. physicskit/fields/quantum_fields.py +510 -0
  125. physicskit/fields/solitons.py +527 -0
  126. physicskit/fields/tests/__init__.py +0 -0
  127. physicskit/fields/tests/conftest.py +7 -0
  128. physicskit/fields/tests/test_field_animations.py +154 -0
  129. physicskit/fields/tests/test_fields.py +439 -0
  130. physicskit/fields/tests/test_visualizers.py +101 -0
  131. physicskit/fields/visualizers.py +503 -0
  132. physicskit/fluids/__init__.py +134 -0
  133. physicskit/fluids/core/__init__.py +23 -0
  134. physicskit/fluids/core/grid.py +165 -0
  135. physicskit/fluids/core/timestepping.py +231 -0
  136. physicskit/fluids/exceptions.py +26 -0
  137. physicskit/fluids/systems/__init__.py +70 -0
  138. physicskit/fluids/systems/compressible_flow.py +281 -0
  139. physicskit/fluids/systems/instabilities.py +343 -0
  140. physicskit/fluids/systems/navier_stokes.py +221 -0
  141. physicskit/fluids/systems/potential_flow.py +440 -0
  142. physicskit/fluids/systems/viscous_flow.py +425 -0
  143. physicskit/fluids/systems/vortex_dynamics.py +304 -0
  144. physicskit/fluids/tests/__init__.py +0 -0
  145. physicskit/fluids/tests/conftest.py +7 -0
  146. physicskit/fluids/tests/test_compressible_flow.py +66 -0
  147. physicskit/fluids/tests/test_instabilities.py +115 -0
  148. physicskit/fluids/tests/test_navier_stokes.py +67 -0
  149. physicskit/fluids/tests/test_potential_flow.py +92 -0
  150. physicskit/fluids/tests/test_static_visualizers.py +91 -0
  151. physicskit/fluids/tests/test_utils.py +100 -0
  152. physicskit/fluids/tests/test_viscous_flow.py +110 -0
  153. physicskit/fluids/tests/test_visualizers.py +34 -0
  154. physicskit/fluids/tests/test_vortex_dynamics.py +88 -0
  155. physicskit/fluids/utils/__init__.py +18 -0
  156. physicskit/fluids/utils/dimensionless.py +239 -0
  157. physicskit/fluids/utils/spectral_analysis.py +142 -0
  158. physicskit/fluids/visualizers/__init__.py +14 -0
  159. physicskit/fluids/visualizers/compressible.py +39 -0
  160. physicskit/fluids/visualizers/flow_fields.py +252 -0
  161. physicskit/fluids/visualizers/potential_flow.py +51 -0
  162. physicskit/fluids/visualizers/spectra.py +62 -0
  163. physicskit/fluids/visualizers/theme.py +38 -0
  164. physicskit/integrators/__init__.py +52 -0
  165. physicskit/integrators/adaptive.py +199 -0
  166. physicskit/integrators/fixed_step.py +360 -0
  167. physicskit/integrators/tests/__init__.py +0 -0
  168. physicskit/integrators/tests/test_integrators.py +101 -0
  169. physicskit/optics/__init__.py +124 -0
  170. physicskit/optics/_compat.py +5 -0
  171. physicskit/optics/gaussian.py +382 -0
  172. physicskit/optics/quantum_optics.py +428 -0
  173. physicskit/optics/ray.py +469 -0
  174. physicskit/optics/tests/__init__.py +0 -0
  175. physicskit/optics/tests/test_diffraction_animation.py +38 -0
  176. physicskit/optics/tests/test_gaussian.py +170 -0
  177. physicskit/optics/tests/test_quantum_optics.py +147 -0
  178. physicskit/optics/tests/test_ray.py +177 -0
  179. physicskit/optics/tests/test_visualizers.py +58 -0
  180. physicskit/optics/tests/test_wave.py +146 -0
  181. physicskit/optics/visualizers.py +264 -0
  182. physicskit/optics/wave.py +365 -0
  183. physicskit/particle/__init__.py +152 -0
  184. physicskit/particle/collider.py +382 -0
  185. physicskit/particle/confinement.py +125 -0
  186. physicskit/particle/decays.py +357 -0
  187. physicskit/particle/electroweak.py +300 -0
  188. physicskit/particle/kinematics.py +271 -0
  189. physicskit/particle/neutrinos.py +84 -0
  190. physicskit/particle/nuclear.py +100 -0
  191. physicskit/particle/scattering.py +159 -0
  192. physicskit/particle/tests/__init__.py +0 -0
  193. physicskit/particle/tests/conftest.py +7 -0
  194. physicskit/particle/tests/test_collider.py +119 -0
  195. physicskit/particle/tests/test_confinement.py +42 -0
  196. physicskit/particle/tests/test_decays.py +112 -0
  197. physicskit/particle/tests/test_electroweak.py +97 -0
  198. physicskit/particle/tests/test_kinematics.py +138 -0
  199. physicskit/particle/tests/test_neutrinos.py +36 -0
  200. physicskit/particle/tests/test_nuclear.py +45 -0
  201. physicskit/particle/tests/test_scattering.py +64 -0
  202. physicskit/particle/tests/test_visualizers.py +214 -0
  203. physicskit/particle/visualizers/__init__.py +38 -0
  204. physicskit/particle/visualizers/animations.py +705 -0
  205. physicskit/particle/visualizers/static.py +101 -0
  206. physicskit/plasma/__init__.py +176 -0
  207. physicskit/plasma/acceleration.py +152 -0
  208. physicskit/plasma/instabilities.py +417 -0
  209. physicskit/plasma/kinetic.py +588 -0
  210. physicskit/plasma/mhd.py +463 -0
  211. physicskit/plasma/single_particle.py +562 -0
  212. physicskit/plasma/tests/__init__.py +0 -0
  213. physicskit/plasma/tests/conftest.py +7 -0
  214. physicskit/plasma/tests/test_new_time_domain_features.py +222 -0
  215. physicskit/plasma/tests/test_plasma.py +232 -0
  216. physicskit/plasma/tests/test_visualizers.py +79 -0
  217. physicskit/plasma/turbulence.py +219 -0
  218. physicskit/plasma/visualizers.py +868 -0
  219. physicskit/plasma/waves.py +549 -0
  220. physicskit/quantum/__init__.py +180 -0
  221. physicskit/quantum/_compat.py +20 -0
  222. physicskit/quantum/chapters/__init__.py +0 -0
  223. physicskit/quantum/chapters/entanglement.py +489 -0
  224. physicskit/quantum/chapters/harmonic_spin.py +517 -0
  225. physicskit/quantum/chapters/hydrogen_am.py +292 -0
  226. physicskit/quantum/chapters/perturbation.py +350 -0
  227. physicskit/quantum/chapters/potentials.py +997 -0
  228. physicskit/quantum/chapters/spin.py +306 -0
  229. physicskit/quantum/chapters/wave_packets.py +541 -0
  230. physicskit/quantum/core/__init__.py +0 -0
  231. physicskit/quantum/core/eigensolvers.py +311 -0
  232. physicskit/quantum/core/operators.py +296 -0
  233. physicskit/quantum/core/solvers.py +271 -0
  234. physicskit/quantum/tests/__init__.py +0 -0
  235. physicskit/quantum/tests/conftest.py +7 -0
  236. physicskit/quantum/tests/test_animations.py +225 -0
  237. physicskit/quantum/tests/test_compat.py +43 -0
  238. physicskit/quantum/tests/test_eigensolvers.py +24 -0
  239. physicskit/quantum/tests/test_entanglement.py +127 -0
  240. physicskit/quantum/tests/test_harmonic_spin.py +140 -0
  241. physicskit/quantum/tests/test_hydrogen_am.py +48 -0
  242. physicskit/quantum/tests/test_measure.py +110 -0
  243. physicskit/quantum/tests/test_operators.py +105 -0
  244. physicskit/quantum/tests/test_perturbation.py +112 -0
  245. physicskit/quantum/tests/test_physics_checks.py +131 -0
  246. physicskit/quantum/tests/test_potentials.py +191 -0
  247. physicskit/quantum/tests/test_solvers.py +70 -0
  248. physicskit/quantum/tests/test_spin.py +22 -0
  249. physicskit/quantum/tests/test_unitarity.py +84 -0
  250. physicskit/quantum/tests/test_wave_packets.py +53 -0
  251. physicskit/quantum/utils/__init__.py +0 -0
  252. physicskit/quantum/utils/measure.py +253 -0
  253. physicskit/quantum/visualizers/__init__.py +0 -0
  254. physicskit/quantum/visualizers/bloch_sphere.py +205 -0
  255. physicskit/quantum/visualizers/entanglement.py +58 -0
  256. physicskit/quantum/visualizers/orbitals.py +187 -0
  257. physicskit/quantum/visualizers/phase_space.py +179 -0
  258. physicskit/quantum/visualizers/wavefunctions.py +230 -0
  259. physicskit/relativity/__init__.py +61 -0
  260. physicskit/relativity/chapters/__init__.py +33 -0
  261. physicskit/relativity/chapters/cosmology.py +190 -0
  262. physicskit/relativity/chapters/gw_merger.py +399 -0
  263. physicskit/relativity/chapters/kerr.py +371 -0
  264. physicskit/relativity/chapters/lensing.py +196 -0
  265. physicskit/relativity/chapters/neutron_star.py +149 -0
  266. physicskit/relativity/chapters/schwarzschild.py +412 -0
  267. physicskit/relativity/chapters/timekeeping.py +133 -0
  268. physicskit/relativity/core/__init__.py +12 -0
  269. physicskit/relativity/core/geodesics.py +216 -0
  270. physicskit/relativity/core/kerr_raytracer.py +259 -0
  271. physicskit/relativity/core/raytracer.py +241 -0
  272. physicskit/relativity/core/tensors.py +468 -0
  273. physicskit/relativity/tests/__init__.py +0 -0
  274. physicskit/relativity/tests/test_conservations.py +54 -0
  275. physicskit/relativity/tests/test_constants.py +34 -0
  276. physicskit/relativity/tests/test_cosmology.py +61 -0
  277. physicskit/relativity/tests/test_gw_merger.py +117 -0
  278. physicskit/relativity/tests/test_kerr.py +116 -0
  279. physicskit/relativity/tests/test_kerr_raytracer.py +103 -0
  280. physicskit/relativity/tests/test_lensing.py +75 -0
  281. physicskit/relativity/tests/test_neutron_star.py +48 -0
  282. physicskit/relativity/tests/test_raytracer.py +67 -0
  283. physicskit/relativity/tests/test_schwarzschild.py +126 -0
  284. physicskit/relativity/tests/test_shadow_render.py +81 -0
  285. physicskit/relativity/tests/test_tensors.py +86 -0
  286. physicskit/relativity/tests/test_timekeeping.py +51 -0
  287. physicskit/relativity/tests/test_visualizers_misc.py +115 -0
  288. physicskit/relativity/utils/__init__.py +1 -0
  289. physicskit/relativity/utils/constants.py +232 -0
  290. physicskit/relativity/visualizers/__init__.py +46 -0
  291. physicskit/relativity/visualizers/interactive.py +127 -0
  292. physicskit/relativity/visualizers/shadow_render.py +367 -0
  293. physicskit/relativity/visualizers/spacetime_3d.py +92 -0
  294. physicskit/relativity/visualizers/spacetime_diagrams.py +198 -0
  295. physicskit/relativity/visualizers/wave_plots.py +185 -0
  296. physicskit/rmt/__init__.py +8 -0
  297. physicskit/rmt/ensembles/__init__.py +108 -0
  298. physicskit/rmt/ensembles/banded.py +114 -0
  299. physicskit/rmt/ensembles/base.py +135 -0
  300. physicskit/rmt/ensembles/bdg.py +218 -0
  301. physicskit/rmt/ensembles/chiral.py +308 -0
  302. physicskit/rmt/ensembles/circular.py +104 -0
  303. physicskit/rmt/ensembles/crossover.py +82 -0
  304. physicskit/rmt/ensembles/density_matrix.py +148 -0
  305. physicskit/rmt/ensembles/effective_hamiltonian.py +230 -0
  306. physicskit/rmt/ensembles/embedded.py +207 -0
  307. physicskit/rmt/ensembles/gaussian.py +153 -0
  308. physicskit/rmt/ensembles/ginibre.py +110 -0
  309. physicskit/rmt/ensembles/girko.py +190 -0
  310. physicskit/rmt/ensembles/graph_laplacian.py +92 -0
  311. physicskit/rmt/ensembles/haar.py +57 -0
  312. physicskit/rmt/ensembles/jacobi.py +182 -0
  313. physicskit/rmt/ensembles/poisson.py +77 -0
  314. physicskit/rmt/ensembles/polynomial.py +139 -0
  315. physicskit/rmt/ensembles/pt_symmetric.py +120 -0
  316. physicskit/rmt/ensembles/single_ring.py +170 -0
  317. physicskit/rmt/ensembles/sparse.py +95 -0
  318. physicskit/rmt/ensembles/syk.py +170 -0
  319. physicskit/rmt/ensembles/truncated_unitary.py +80 -0
  320. physicskit/rmt/ensembles/universality.py +92 -0
  321. physicskit/rmt/ensembles/wishart.py +88 -0
  322. physicskit/rmt/py.typed +0 -0
  323. physicskit/rmt/spectrum.py +82 -0
  324. physicskit/rmt/stats/__init__.py +160 -0
  325. physicskit/rmt/stats/characteristic_polynomial.py +77 -0
  326. physicskit/rmt/stats/circular_law.py +54 -0
  327. physicskit/rmt/stats/correlations.py +162 -0
  328. physicskit/rmt/stats/density.py +70 -0
  329. physicskit/rmt/stats/entanglement.py +36 -0
  330. physicskit/rmt/stats/free_probability.py +202 -0
  331. physicskit/rmt/stats/localization.py +338 -0
  332. physicskit/rmt/stats/marchenko_pastur.py +55 -0
  333. physicskit/rmt/stats/pt_symmetric.py +265 -0
  334. physicskit/rmt/stats/ratios.py +110 -0
  335. physicskit/rmt/stats/real_ginibre.py +134 -0
  336. physicskit/rmt/stats/rigidity.py +272 -0
  337. physicskit/rmt/stats/single_ring.py +95 -0
  338. physicskit/rmt/stats/spacing.py +150 -0
  339. physicskit/rmt/stats/tracy_widom.py +175 -0
  340. physicskit/rmt/stats/truncated_unitary.py +40 -0
  341. physicskit/rmt/stats/unfolding.py +37 -0
  342. physicskit/rmt/stats/wachter.py +67 -0
  343. physicskit/rmt/tests/__init__.py +0 -0
  344. physicskit/rmt/tests/cache_utils.py +107 -0
  345. physicskit/rmt/tests/conftest.py +8 -0
  346. physicskit/rmt/tests/test_banded.py +86 -0
  347. physicskit/rmt/tests/test_base.py +29 -0
  348. physicskit/rmt/tests/test_bdg.py +133 -0
  349. physicskit/rmt/tests/test_characteristic_polynomial.py +50 -0
  350. physicskit/rmt/tests/test_chiral.py +273 -0
  351. physicskit/rmt/tests/test_circular.py +225 -0
  352. physicskit/rmt/tests/test_crossover.py +72 -0
  353. physicskit/rmt/tests/test_density.py +23 -0
  354. physicskit/rmt/tests/test_density_matrix.py +181 -0
  355. physicskit/rmt/tests/test_effective_hamiltonian.py +140 -0
  356. physicskit/rmt/tests/test_embedded.py +169 -0
  357. physicskit/rmt/tests/test_free_probability.py +81 -0
  358. physicskit/rmt/tests/test_gaussian_ensembles.py +22 -0
  359. physicskit/rmt/tests/test_gaussian_semicircle.py +127 -0
  360. physicskit/rmt/tests/test_ginibre_circular_law.py +131 -0
  361. physicskit/rmt/tests/test_girko.py +178 -0
  362. physicskit/rmt/tests/test_graph_laplacian.py +102 -0
  363. physicskit/rmt/tests/test_haar.py +118 -0
  364. physicskit/rmt/tests/test_jacobi_wachter.py +136 -0
  365. physicskit/rmt/tests/test_localization.py +240 -0
  366. physicskit/rmt/tests/test_poisson.py +149 -0
  367. physicskit/rmt/tests/test_polynomial.py +107 -0
  368. physicskit/rmt/tests/test_pt_symmetric.py +178 -0
  369. physicskit/rmt/tests/test_random_state.py +19 -0
  370. physicskit/rmt/tests/test_real_ginibre.py +112 -0
  371. physicskit/rmt/tests/test_rigidity_universality.py +167 -0
  372. physicskit/rmt/tests/test_single_ring.py +132 -0
  373. physicskit/rmt/tests/test_spacing_and_ratios.py +122 -0
  374. physicskit/rmt/tests/test_sparse.py +71 -0
  375. physicskit/rmt/tests/test_spectrum.py +27 -0
  376. physicskit/rmt/tests/test_syk.py +136 -0
  377. physicskit/rmt/tests/test_tracy_widom.py +113 -0
  378. physicskit/rmt/tests/test_tridiagonal.py +41 -0
  379. physicskit/rmt/tests/test_truncated_unitary.py +80 -0
  380. physicskit/rmt/tests/test_validation_base.py +25 -0
  381. physicskit/rmt/tests/test_validation_misc.py +67 -0
  382. physicskit/rmt/tests/test_wishart_marchenko_pastur.py +120 -0
  383. physicskit/rmt/utils/__init__.py +0 -0
  384. physicskit/rmt/utils/haar.py +128 -0
  385. physicskit/rmt/utils/random_state.py +24 -0
  386. physicskit/rmt/utils/tridiagonal.py +167 -0
  387. physicskit/rmt/validation/__init__.py +36 -0
  388. physicskit/rmt/validation/base.py +126 -0
  389. physicskit/rmt/validation/circular_law.py +80 -0
  390. physicskit/rmt/validation/marchenko_pastur.py +53 -0
  391. physicskit/rmt/validation/ratio_distribution.py +53 -0
  392. physicskit/rmt/validation/real_ginibre.py +60 -0
  393. physicskit/rmt/validation/sine_kernel.py +57 -0
  394. physicskit/rmt/validation/single_ring.py +68 -0
  395. physicskit/rmt/validation/tracy_widom.py +89 -0
  396. physicskit/rmt/validation/universality.py +100 -0
  397. physicskit/rmt/validation/wachter.py +52 -0
  398. physicskit/rmt/validation/wigner_semicircle.py +40 -0
  399. physicskit/rmt/validation/wigner_surmise.py +58 -0
  400. physicskit/semiclassical/__init__.py +94 -0
  401. physicskit/semiclassical/_compat.py +5 -0
  402. physicskit/semiclassical/core/__init__.py +41 -0
  403. physicskit/semiclassical/core/gutzwiller.py +215 -0
  404. physicskit/semiclassical/core/path_integral.py +594 -0
  405. physicskit/semiclassical/core/propagators.py +579 -0
  406. physicskit/semiclassical/core/wkb.py +308 -0
  407. physicskit/semiclassical/systems/__init__.py +13 -0
  408. physicskit/semiclassical/systems/scarring.py +278 -0
  409. physicskit/semiclassical/tests/__init__.py +0 -0
  410. physicskit/semiclassical/tests/test_gutzwiller.py +35 -0
  411. physicskit/semiclassical/tests/test_path_integral.py +194 -0
  412. physicskit/semiclassical/tests/test_propagators.py +82 -0
  413. physicskit/semiclassical/tests/test_scarring.py +43 -0
  414. physicskit/semiclassical/tests/test_visualizers.py +89 -0
  415. physicskit/semiclassical/tests/test_wkb.py +30 -0
  416. physicskit/semiclassical/visualizers/__init__.py +17 -0
  417. physicskit/semiclassical/visualizers/gutzwiller.py +55 -0
  418. physicskit/semiclassical/visualizers/path_integral.py +195 -0
  419. physicskit/semiclassical/visualizers/propagators.py +89 -0
  420. physicskit/semiclassical/visualizers/scarring.py +146 -0
  421. physicskit/semiclassical/visualizers/wkb.py +55 -0
  422. physicskit/statphys/__init__.py +80 -0
  423. physicskit/statphys/chapters/__init__.py +43 -0
  424. physicskit/statphys/chapters/ehrenfest_urn.py +112 -0
  425. physicskit/statphys/chapters/ising_lattice.py +431 -0
  426. physicskit/statphys/chapters/kpz_growth.py +129 -0
  427. physicskit/statphys/chapters/molecular_dynamics.py +258 -0
  428. physicskit/statphys/chapters/nonequilibrium_work.py +146 -0
  429. physicskit/statphys/chapters/percolation.py +305 -0
  430. physicskit/statphys/chapters/random_walk.py +142 -0
  431. physicskit/statphys/chapters/renormalization.py +148 -0
  432. physicskit/statphys/chapters/sandpile.py +109 -0
  433. physicskit/statphys/chapters/spin_glass.py +275 -0
  434. physicskit/statphys/core/__init__.py +10 -0
  435. physicskit/statphys/core/kpz_engine.py +53 -0
  436. physicskit/statphys/core/md_engine.py +157 -0
  437. physicskit/statphys/core/monte_carlo.py +462 -0
  438. physicskit/statphys/core/random_walk_engine.py +68 -0
  439. physicskit/statphys/core/sandpile_engine.py +52 -0
  440. physicskit/statphys/tests/__init__.py +0 -0
  441. physicskit/statphys/tests/test_dynamics.py +66 -0
  442. physicskit/statphys/tests/test_ehrenfest_urn.py +44 -0
  443. physicskit/statphys/tests/test_finite_size_scaling.py +62 -0
  444. physicskit/statphys/tests/test_interactive.py +33 -0
  445. physicskit/statphys/tests/test_ising.py +68 -0
  446. physicskit/statphys/tests/test_kpz.py +55 -0
  447. physicskit/statphys/tests/test_landau_theory.py +49 -0
  448. physicskit/statphys/tests/test_md_engine.py +31 -0
  449. physicskit/statphys/tests/test_molecular_dynamics.py +72 -0
  450. physicskit/statphys/tests/test_nonequilibrium_work.py +33 -0
  451. physicskit/statphys/tests/test_partition_function.py +26 -0
  452. physicskit/statphys/tests/test_percolation.py +116 -0
  453. physicskit/statphys/tests/test_potts_model.py +46 -0
  454. physicskit/statphys/tests/test_random_walk.py +50 -0
  455. physicskit/statphys/tests/test_renormalization.py +44 -0
  456. physicskit/statphys/tests/test_sandpile.py +44 -0
  457. physicskit/statphys/tests/test_spin_glass.py +73 -0
  458. physicskit/statphys/tests/test_thermodynamics.py +121 -0
  459. physicskit/statphys/tests/test_xy_model.py +45 -0
  460. physicskit/statphys/utils/__init__.py +1 -0
  461. physicskit/statphys/utils/dynamics.py +100 -0
  462. physicskit/statphys/utils/finite_size_scaling.py +171 -0
  463. physicskit/statphys/utils/landau_theory.py +151 -0
  464. physicskit/statphys/utils/partition_function.py +109 -0
  465. physicskit/statphys/utils/thermodynamics.py +356 -0
  466. physicskit/statphys/visualizers/__init__.py +87 -0
  467. physicskit/statphys/visualizers/interactive.py +161 -0
  468. physicskit/statphys/visualizers/jarzynski_render.py +44 -0
  469. physicskit/statphys/visualizers/kpz_render.py +65 -0
  470. physicskit/statphys/visualizers/lattice_render.py +212 -0
  471. physicskit/statphys/visualizers/particle_render.py +121 -0
  472. physicskit/statphys/visualizers/random_walk_render.py +106 -0
  473. physicskit/statphys/visualizers/rg_render.py +45 -0
  474. physicskit/statphys/visualizers/sandpile_render.py +65 -0
  475. physicskit/statphys/visualizers/spin_glass_render.py +40 -0
  476. physicskit/statphys/visualizers/urn_render.py +38 -0
  477. physicskit/statphys/visualizers/vortex_render.py +84 -0
  478. physicskit/tests/__init__.py +0 -0
  479. physicskit/tests/test_constants.py +38 -0
  480. physicskit-0.1.0.dist-info/METADATA +196 -0
  481. physicskit-0.1.0.dist-info/RECORD +484 -0
  482. physicskit-0.1.0.dist-info/WHEEL +5 -0
  483. physicskit-0.1.0.dist-info/licenses/LICENSE +21 -0
  484. 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,5 @@
1
+ """Small compatibility shims (numpy>=2.0 renamed trapz to trapezoid)."""
2
+
3
+ import numpy as np
4
+
5
+ trapz = np.trapezoid if hasattr(np, "trapezoid") else np.trapz
@@ -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))))